Sto solo speculando, ma sì le N sono per il buffer overflow iniziale. Noterai che %u9090%u6858%ucbd3%u7801
viene ripetuto più e più volte. Questi sono 8 byte di valori Unicode in esadecimale.
%u9090
è molto probabilmente un'istruzione macchina NOP
(nessuna operazione). In esadecimale per Intel x86, questa istruzione è un byte, 0x90
. Quindi ripete questi 8 byte 3 volte. Lo scopo che sto indovinando è quello di sovrascrivere l'indirizzo di ritorno con il suo indirizzo.
Quindi hai %u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00
. Che mi sembra che questo è il codice shell necessario per ottenere l'esecuzione. Se rimuovi l'unicode designatore %u
ottieni un flusso di istruzioni. Usando radare2 puoi eseguire il seguente comando su 90909090819000c300038b00531b53ff00780000
rasm2 -d 90909090819000c300038b00531b53ff00780000
nop
nop
nop
nop
adc dword [eax + 0x300c300], 0x1b53008b
push ebx
inc dword [eax]
js 0x13
.byte 0x00 1
Ora potrei sbagliarmi riguardo ai primi 3 valori ripetuti. Forse fanno parte dello shellcode. Quindi lascia solo eseguire lo stesso comando sulla stringa di byte completa:
$ rasm2 -d 90906858cbd3780190906858cbd3780190906858cbd3780190909090819000c300038b00531b53ff00780000
nop
nop
push 0x78d3cb58
add dword [eax - 0x34a79770], edx
sar dword [eax + 1], cl
nop
nop
push 0x78d3cb58
add dword [eax - 0x7e6f6f70], edx
nop
add bl, al
add byte [ebx], al
mov eax, dword [eax]
push ebx
sbb edx, dword [ebx - 1]
add byte [eax], bh
.byte 0x00 1
Per saperne di più su come funzionano gli overflow del buffer; controlla Perché i buffer overflow vengono eseguiti nella direzione in cui sono? e Implicazioni di sicurezza nel trascurare il byte NULL finale