CTF Sender Intermediate

URL Download CTF = https://drive.google.com/file/d/1BhCC4I7IJO1Gv7mBTusZDbXl2KfIH1TQ/view?usp=sharing

Instalación

Cuando obtenemos el .zip nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

unzip sender.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_run.sh sender.tar

Info:

██████╗ ██╗    ██╗███╗   ██╗██████╗ ██████╗ ██╗
██╔══██╗██║    ██║████╗  ██║╚════██╗██╔══██╗██║
██████╔╝██║ █╗ ██║██╔██╗ ██║ █████╔╝██║  ██║██║
██╔═══╝ ██║███╗██║██║╚██╗██║ ╚═══██╗██║  ██║╚═╝
██║     ╚███╔███╔╝██║ ╚████║██████╔╝██████╔╝██╗
╚═╝      ╚══╝╚══╝ ╚═╝  ╚═══╝╚═════╝ ╚═════╝ ╚═╝

          ==                           
         @+:@ @##@                     
          @++:-----+@ @@#+:----:+#     
           #-+-----:+:---------:       
            *::-----++-----::::#       
             ::------+:--------:       
             #-+------+:-::-----#@     
              *::+=@@#++-------::@     
              @+=     @++::+#@@@#*#    
               #-@                     
                *+#++@                 
               +-:::+-@                
               :-:+:::+                
              @+::*::::                
             *::++-::*                 
          =:--:-:++ @-#                
      #*:---:--++@   @@                
      @::-:--++*                       
       @::-:++#                        
         *++*                          

 :: Plataforma de máquinas vulnerables ::
 :: Desarrollado por Pwn3d! y Dockerlabs - creado por @d1se0 ::

 █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 █           FLAG{Pwn3d!_is_awesome!}            █
 █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█


[✔] bc ya está instalado.

[✔] Docker ya está instalado
[!] Limpiando previos contenedores e imágenes
[✔] Cargando la máquina virtual      
[✔] Activando máquina virtual      

[✔] Máquina activa. Dirección IP: 172.17.0.2
[!] Presiona Ctrl+C para limpiar y salir

Por lo que cuando terminemos de hackearla, le damos a Ctrl+C y nos eliminara la maquina para que no se queden archivos basura.

Escaneo de puertos

Info:

Si nos metemos en la pagina veremos una pagina normal y corriente en el que podemos descargar lo que parece ser una herramienta que esta proporcionando el servidor victima, si nos la descargamos dandole al boton y la intentamos ejecutar...

Info:

Por lo que vemos necesitamos la IP que seria la de la maquina victima, pero el puerto aparentemente todavia no le sabemos, ya que parece ser que se puede enviar algun tipo de informacion a dicho puerto el cual todavia no sabemos, por lo que seguiremos investigando.

Escalate user alex

cewl

Si investigamos en la pagina vemos 3 posibles usuarios que estan encima del footer que srian los siguientes:

users.txt

Por lo que vamos a crearnos un diccionario de usuarios con esos 3 y vamos a generar un diccionario de contraseñas de las palabras que se puedan encontrar en la pagina web de la siguienet forma:

Info:

Esto nos habra generado un diccionario de palabras de la pagina web, por lo que ahora utilizaremos hydra para saber si alguno de los usuarios de la lista tuviera alguna contraseña debil.

Hydra

Info:

Por lo que vemos hemos sacados las credenciales del usuario alex, por lo que nos conectaremos por ssh.

SSH

Metemos como contraseña emfUa y estaremos dentro, leeremos la flag del usuario.

user.txt

Escalate Privileges

Si listamos los archivos vemos que tenemos un archivo llamado server el cual tiene permisos SUID y si lo ejecutamos veremos lo siguiente:

Info:

Por lo que se ve, esta escuchando por el puerto 7777 por lo que ya tenemos un vector de ataque con el otro archivo que nos descargamos anteriormente llamado sender, probaremos a ejecutar en nuestro host el archivo sender pasandole como puerto el 7777 y ver que recibe el server:

Info:

Y ahora si nos vamos a donde estaba escuchando el server veremos lo siguiente:

Por lo que vemos lo recibe bien, ahora vamos a probar a pasarle muchos caracteres para ver si es vulnerable a un Buffer Overflow:

Info:

Y ahora si nos vamos a donde estaba escuchando el server veremos lo siguiente:

Vemos que si, ya que nos pone Segmentation fault, por lo que vamos a realizar ingenieria inversa sobre el binario server, pero antes si leemos la nota que encontramos en el /opt llamada note.txt veremos lo siguiente:

Info:

Por lo que vemos nos confirma que tenemos gdb en el servidor victima, por lo que podremos abrir el gdb en dicha maquina, pero antes le vamos a pasar una extension para que se nos abra el gdb con pwndbg.

Ingenieria inversa (server)

Instalacion de GDB con PEDA/GDB con pwndbg

Lo que primero tendremos que hacer sera lo siguiente:

Y si iniciamos el programa con GDB pasandole como parametro el programa, se nos pondra el gdb-peda...

Pero si diera error por las versiones, podremos instalar esta otra herramienta que es mas poderosa:

host

maquina victima

Ahora vamos hacer que el gdb se inicie desde el gdbinit.py

Lo guardamos y si iniciamos gdb veremos lo siguiente:

Info:

Comprobacion de desbordamiento de Buffer

En el host, generamos una cadena de caracteres diseñada para intentar desbordar el buffer de la aplicación. Esto se logra con la herramienta pattern_create.rb:

Info:

Este patrón se usará como entrada en la aplicación para identificar cómo se maneja el buffer.

Ahora llendonos al GDB tendremos que ejecutar run.

Y en nuestro host con el binario sender tendremos que enviar todos estos caracteres:

Info:

Si nos vamos al gdb veremos lo siguiente:

Estamos detectando que lo primero la aplicacion es de 32 bits ya que tiene EIP y que identificamos el EIP con la siguiente direccion de memoria:

Por lo que vamos a identificar su offset.

Identificación del Offset

Para determinar el desplazamiento exacto (offset) donde ocurre la sobrescritura, usamos pattern_offset.rb, proporcionando la dirección en hexadecimal obtenida del EIP:

Info:

Esto indica que el offset es de 76 bytes.

Por lo que vamos a hacerlo un poco mas automatico con python2 y enviar comandos de una sola vez, vamos a ver si realmente se llena de B(42) el EIP de la siguiente forma.

Vamos a poner run en el gdb para que este a la escucha el server y en nuestro host pondremos lo siguiente.

Info:

Si ahora nos vamos al gdb veremos lo siguiente:

Vemos que estamos llenando de forma correcta el EIP, por lo que ahora vamos a llenar lo que haya despues del EIP para determinar alguna direccion de memoria en la que poder inyectarle un shell_code.

Inyección de código en direccion de memoria

Info:

Si nos vamos al gdb veremos lo siguiente:

Por lo que vemos las C se estan poniendo bien, por lo que ahora vamos a ver cuales son las direcciones de memoria en las cuales se estan inyectando esas C para coger una la cual en vez de inyectarle una C le inyectaremos una shell.

Info:

Vemos que alguna de estas direcciones de memoria es en la que vamos a poder inyectar la shell por lo que vamos a elegir una de forma aleatoria que este por el medio, en mi caso elegire la siguiente:

Ahora vamos a crearnos una shell inyectandola en esta direccion de memoria, por lo que nos dara una shell como root ya que el binario esta con permisos SUID y se estaria ejecutando como root.

Vamos a salirnos del gdb e iniciar el binario server de forma normal:

host

NOTA:

Podremos ver shell's en hexadecimal en la siguiente pagina:

URL = Pagina Shell-Storm

Info:

Y si nos vamos donde teniamos el binario server escuchando, veremos que hemos obtenido una shell como el usuario root:

Por lo que leeremos la flag de root.

root.txt

Last updated