Gatekeeper
En esta sala nos enfrentaremos a una maquina Windows de la cual debemos explotar un buffer overflow sencillo para obtener una shell de la maquina victima, luego dumpear credenciales almacenadas en el navegador y haciendo uso de psexec podremos ingresar como 'nt authority\system'.

Link :gatekeeper
Created by TheMayor
Enumeración
Iniciamos haciendo ping a la maquina victima y vemos que que es una maquina windows, esto porque tiene un ttl de 127.

Ahora realizaremos un escaneo de y enumeración de los puertos abiertos
Luego de enumerar los puertos abiertos, enumeraremos los servicios y las versiones que se ejecutan en cada uno de los puertos abiertos de la maquina victima
Enumeración de smb
Enumeraremos el servicio de smb en busca de recursos compartidos de los cuales podemos hacer uso para realizar la intrusión.
Enumerando podemos ver que podemos acceder al directorio de Users

Haciendo uso de smbmap enumeraremos los archivos dentro del directorio de Users
Encontramos varios directorios de los cuales el mas interesante es Share, por lo que ingresaremos con smbclient para ver el contenido.

Ingresamos al a la carpeta compartida con smbclient
En este directorio encontraremos un archivo gatekeeper el cual descargaremos para poder analizarlo.

Explotación
Buffer overflow
Teniendo el ejecutable podremos ver que se ingresa un texto en el cual podremos realizar un desbordamiento de buffer. Para esto necesitaremos un Windows 7 en la cual instalaremos el Immunity Debugger y así hacer pruebas para encontrar los badcharacters para luego tener control del flujo del problema y así obtener una shell.

Fuzzing
Para encontrar el numero de bytes exacto que ocasiona el desbordamiento de buffer realizaremos el siguiente script en python3
Teniendo el anterior script ejecutaremos para encontrar el numero exacto de bytes que ocasiona el desbordamiento.

Luego de ejecutar podemos ver que el rango se encuentra entre 140 a 150 ya que con 150 bytes el programa dejo de funcionar.

Numero de Offset
Para encontrar con exactitud el numero de offset haremos uso de msf-pattern_create el cual nos ayudara a identificar el numero exacto.
Realizando ciertas modificaciones al código que se tenia anteriormente podemos ejecutar nuevamente
Ahora en el Immunity Debugger en la dirección de EIP tenemos 39654138 , haciendo que el programa deje de funcionar.

Teniendo los caracteres en hexadecimal de 39654138, haremos uso de msf-pattern_offset para saber en que posición se encuentra y así obtener el offset
Nos indica que los carácter entonces el numero de offset es de 146. Teniendo en cuenta esto
Realizando algunas modificaciones de script en python e ingresando BBBB luego de las 146 'A' podremos observar que podemos sobre escribir el EIP

Puede verse confuso ya que ingresamos BBBB y vemos 42424242, pero esto no es mas que los caracteres están en hexadecimal.
Veamos los siguiente:
Entonces podemos entender que ahora tenemos control de la pila y podemos indicarle a que dirección queremos que vaya el flujo del programa
Bad characters
Los badchars son los bytes que el programa no admite. Para lo que debemos quitarlos a la hora de generar el payload, porque de lo contrario con funcionara
Su instalación es bastante sencilla, descargamos el script mona.py de su repositorio oficial. Este script lo movemos a la siguiente ruta:
C:\\Archivos de programa\\Immunity Inc\\Immunity Debugger\\PyCommands C:\\Program Files\\Immunity Inc\\Immunity Debugger\\PyCommands

Para poder trabajar en un directorio y que en este se guarden los archivos que generaremos crearemos un espacio de trabajo con el siguiente comando.

Ahora, vamos a generar un array que contendrá todos los caracteres con el fin de encontrar los badchars. Ejecutamos lo siguiente:

Esto nos genera una cadena con todos los bytes posibles, nos servirá para determinar cuáles son badchars y cuáles no.
Además, con este comando como hemos configurado el espacio de trabajo previamente, ahora se nos habrá generado una carpeta con el nombre del proceso al que estamos adjuntados:



badchars :
Agregamos a nuestro script buffbadCharacter.py
Detección de badchars

Ahora nos interesa el valor del ESP. Mediante este valor, mona nos automatizará la tarea de detectar los badchars.
Haremos uso del siguiente comando:

De esta forma, como vemos, mona nos dice que un badchars es el \x00 (este es un badchar muy típico, por lo que normalmente se quita de inmediato)
Con esto hecho, vamos a actualizar los archivos bytearray que tenemos, para decirles que eliminen el \x00:

Eliminamos el badchar del script "\x00"

Segundo badchar
Repetimos el proceso
Volvemos a ejecutar el programa y hacemos crashear el programa

Con esto hecho, vamos a actualizar los archivos bytearray que tenemos, para decirles que eliminen el \x00\x0a:


Luego de la segunda podemos ejecutar el tercero
Ejecutando nos vemos que no vemos otro badcharacter, por lo que seguiremos con el siguiente paso que es ahora de encontrar el opcode

Encontrando el ESP
El objetivo ahora es localizar la instrucción JMP ESP, que actúa como el punto de entrada para ejecutar nuestro código shell. Una vez que identifiquemos esta dirección, la colocaremos en el registro EIP. Después, al sobrescribir el búfer, el flujo del programa se dirigirá hacia ESP, donde hemos alineado nuestro código shell. Esto la podemos hacer de dos maneras
Primer caso
Teniendo los badchars y ejecutando en mona lo siguiente podremos encontrar las direcciones

Estas direcciones son:
Segundo caso
Para el segundo caso necesitamos ver los módulos, en mona podemos listarlos de la siguiente manera

Ahora para obtener un OpCode equivalente a jmp ESP haremos uso de msf-nasm_shell y para luego buscar las direcciones que anteriormente vimos con el otro método pero haciendo uso de un OpCode

Tenemos el OpCode el cual usaremos con el modulo gatekeeper.exe que anteriormente se había listado

La dirección que nos muestra es igual al anterior método:
Para verificar que la dirección que hace un salto al jmp ESP podemos hacer una búsqueda con la dirección obtenida


Generación de payload con msfvenom
Luego de obtener las dirección del salto al ESP, luego debemos convertir la dirección de HEX a Little Endian y tendremos lo siguiente: retn = "\xc3\x14\x04\x08" y también agregaremos los NOPs padding = "\x90"*16
Ahora si podemos crear nuestro payload indicándole los badchars
Si ejecutamos el script y nos ponemos a la escucha debemos de obtener una shell, pero antes no olvides de correr el programa en el Windows 7.

Antes de hacer la intrusión en la maquina victima agregaremos a nuestro comando de msfvenom los siguiente EXITFUNC=thread lo que indica al shellcode utilizará la técnica de terminación de subproceso. Esto significa que después de que el shellcode haya finalizado su ejecución, el subproceso actual será terminado de manera segura y controlada. Esta técnica es útil para evitar la terminación inesperada del programa objetivo, lo que podría alertar al usuario o causar problemas de estabilidad.
Ahora si podemos generar nuestro payload y luego realizar nuestra intrusion en la maquina victimasin temor a perder la shell y quedarnos sin hacer nuevamente la intrusión
Terminal 1
Ponemos a la escucha por el puerto que ingresamos en nuestro payload
Terminal 2
Ejecutamos el script que ocasiona el desbordamiento de buffer
Y deberíamos de obtener una shell
Escalada de privilegios
Usuario : natbat

Enumerando nos encontraremos con un archivo que me llama la atención que puede ser una pista par lograr escalar privilegios

Enumerando mas encontraremos un directorio donde se almacenan datos sensibles del navegador, en este caso Firefox.

En el siguiente post puedes encontrar mas informacion de como explotarlo dump firefox passwords with firepwd and firefox_decrypt
Por lo que se necesita los archivos de key4.db y logins.json. Para poder copiarnos a nuestra maquina iniciaremos un servidor smb, para luego agregar como partición mas de la maquina victima
Luego copiaremos los archivos al recurso compartido que iniciamos
firefox_decrypt
Para el caso de necesiremos otros archivos mas que los podemos encontrar en el directorio

Luego obtendremos las credenciales
firepwd
En este caso solo necesitamos los dos archivos que descargamos primero.

Igual forma podemos obtener la credencial
Usuario : mayor
Haciendo uso de las credenciales podemos verificar con crackmapexec si son validas y efectivamente son validas.

Ahora para ingresar haremos uso de impacket-psexec proporcionando las credenciales que encontramos

Entonces ingresaremos como nt authority\system
Happy Hacking :P
Last updated