DarkHole2 - VulnHub
Fase de reconocimiento
Empezamos realizando un escaneo con arp-scan
a la red para averiguar la IP de la máquina:
Ahora realizamos un ping
a la máquina para ver si nos responde.
Vemos que el TTL es 64 lo que nos indica que es una máquina Linux
Empezamos ahora el reconocimiento de los puertos utilizando nmap
, primero
escaneamos todo el rango de puertos.
Ahora sobre estos puertos, hacemos un escaneo más profundo para detectar versión y servicio.
Vemos que nmap
detecta que hay un repositorio git bajo la ruta 192.168.1.37:80/.git
Fase de explotación
GitHub información expuesta
Investigando en el repositorio, encuentro los commits que se han ido haciendo.
Llama la atención el segundo commit, donde dice que ha puesto las credenciales por defecto en el login.php
.
Nos traemos el repositorio a nuestra máquina con wget -r <ruta>
para trabajar mejor y ahora dentro del repositorio hacemos git show <hash_commit>
para ver los cambios que se han realizado en ese commit.
Con esto obtenemos el email lush@admin.com
y la password 321
que nos sirven para hacer login en login.php
.
SQLI
Después de hacer login, examindo esta nueva página, vemos que se produce un la SQL bajo el parámetro id
.
Una vez que hemos detectado que se produce un SQLI, dectamos el número de columnas que se están representando utilizando order by
para después ir mostrando información de la base de datos. En este caso es 6.
El siguiente paso es mostrar las bases de datos que existen. En este caso utilizamos group_concat()
para agrupar toda la salida en una sola columna y así poder verla en la web. (Hacer url encode en la query para que no haya problemas).
2'union select 1,group_concat(schema_name),3,4,5,6 from information_schema.schemata-- -
Después obtenemos las tablas que hay en la base de datos darkhole_2
.
2'union select 1,group_concat(table_name),3,4,5,6 from information_schema.tables-- -
Ahora obtenemos las columnas de la tabla ssh
2'union select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='darkhole_2' and table_name='ssh'-- -
Finalmente mostramos la información de las columnas para la tabla ssh
2'union select 1,group_concat(id,user,":",pass),3,4,5,6 from ssh -- -
Llegados a este punto obtenemos el usuario jehad
y la contraseña fool
que podremos utilizar para conectarnos por ssh
a la máquina.
Escalada de privilegios
Una vez concetados a la máquina como el usuario fool
, vamos a hacer un reconociemintoutilizando la herramienta Linpeas.
Vemos que bajo la ruta /opt/web
el usuario losy
esta proporcionando un servidor web por el puerto 9000
. Además inspeccionando el archivo index.php
vemos que se pueden ejecutar comandos a través del parámetro cmd
en la url.
Como tenemos ejecución de comandos bajo el usuario losy
, entablamos una Reverse shell.
Escalada a Root
Observando el .bash_history
de losy
encontramos una posible credencial.
Ahora con la credencial podemos mirar si podemos ejecutar algún binario con sudo
, para ello, ejecutamos sudo -l
. Vemos que podemos ejecutar python3
como si fuesemos root
Ahora convertirse en root
es tarea sencilla, simplemente ejecutamos sudo /usr/bin/python3 -c 'import os; os.system("/bin/sh")'
y ya estaríamos como root
.