linuxDarkHole 2

Enumeration

Vamos a empezar escaneando la red local:

┌──(pylon㉿kali)-[~/…/pylon/Vulnhub/DarkHole2/nmap]
└─$ sudo arp-scan -I eth0 --localnet
[sudo] password for pylon:
Interface: eth0, type: EN10MB, MAC: 00:0c:29:9e:99:b0, IPv4: 192.168.64.128
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.64.1    00:50:56:c0:00:08       VMware, Inc.
192.168.64.2    00:50:56:fb:55:46       VMware, Inc.
192.168.64.129  00:0c:29:95:1b:eb       VMware, Inc.
192.168.64.254  00:50:56:ed:c4:96       VMware, Inc.

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.922 seconds (133.19 hosts/sec). 4 responded

Por la dirección MAC identifico la IP de la máquina que es la 192.168.64.129. Ahora vamos a realizar un escaneo de puertos con nmap:

┌──(pylon㉿kali)-[~/…/pylon/Vulnhub/DarkHole2/nmap]
└─$ nmap -p- --open -sS -n -Pn -vvv 192.168.64.129 -oG ports
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-01 13:18 CEST
Initiating ARP Ping Scan at 13:18
Scanning 192.168.64.129 [1 port]
Completed ARP Ping Scan at 13:18, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 13:18
Scanning 192.168.64.129 [65535 ports]
Discovered open port 80/tcp on 192.168.64.129
Discovered open port 22/tcp on 192.168.64.129
Completed SYN Stealth Scan at 13:18, 0.97s elapsed (65535 total ports)
Nmap scan report for 192.168.64.129
Host is up, received arp-response (0.00060s latency).
Scanned at 2025-07-01 13:18:21 CEST for 1s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 00:0C:29:95:1B:EB (VMware)

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.13 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

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-dumperarrow-up-right :

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 GET id , 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:

  1. No vemos todos los resultados solo muestra la primera fila.

  2. 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:

Bien nos pondremos en escucha en el puerto 8081:

Ahora enviaremos la reverse shell sacada de Online - Reverse Shell Generatorarrow-up-right:

Ahora veremos si se estableció conexión:

Bien! Pongamos whoami para ver si somos losy:

Vemos que estamos en el directorio /opt/web donde vemos un index.php:

Ahí vemos que recoge el valor del parámetro por GET y ejecuta como comando del sistema con system.

Shell as root

Vamos a ver el .bash_history del usuario losy:

Username
Password
Servicio

root

darkhole_2

mysql

lush@admin.com

321

login (http)

jehad

fool

ssh

losy

gang

Ahora vamos a hacer un sudo -l:

Lo que haremos es ejecutar python3 como root e importar la libreria os:

root! ;)