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.