linuxTHLPWN

Enumeration

Vamos a iniciar con un escaneo nmap :

┌──(pylon㉿kali)-[~/…/pylon/THL/THLPWN/nmap]
└─$ nmap -p- --open -n --min-rate=5000 -vvv -Pn 192.168.116.130          
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-29 22:34 CET
Initiating ARP Ping Scan at 22:34
Scanning 192.168.116.130 [1 port]
Completed ARP Ping Scan at 22:34, 0.05s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 22:34
Scanning 192.168.116.130 [65535 ports]
Discovered open port 22/tcp on 192.168.116.130
Discovered open port 80/tcp on 192.168.116.130
Completed SYN Stealth Scan at 22:34, 0.87s elapsed (65535 total ports)
Nmap scan report for 192.168.116.130
Host is up, received arp-response (0.00039s latency).
Scanned at 2025-10-29 22:34:14 CET 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:89:24:0B (VMware)

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

Vemos el puerto 22,80 , vamos a realizar un segundo escaneo para obtener más información detallada de ambos puertos:

Obtuvimos la siguiente información:

Puerto
Descripción

22/TCP

80/TCP

Vamos a ver la página web:

Vemos que nos dice lo siguiente:

Vemos que nos comenta que el servidor esta empleando Virtual Hosting (permite a un único servidor alojar distintas aplicaciones webs) así que intuyendo el posible dominio de la web sea el nombre de la máquina entonces podría ser:

Vamos a añadirlo a nuestro /etc/hosts :

Vamos a probar acceder a el:

Vemos un formulario, voy a dejar BurpSuite en segundo plano para que vaya capturando todos los movimientos que vamos a ir realizando. Vamos a probar a rellenar el formulario y enviarlo:

Al darle a Submit vemos lo siguiente:

Vemos que está teniendo un fallo con conectarse a la base de datos, así que no es funcional este formulario.

Vamos a realizar fuzzing para ver si encontramos algo más antes de seguir investigando por la aplicación web:

Vemos cosas interesantes como:

  • /api/

  • /backup/

  • /robots.txt

/api/

Vamos a ver el directorio /api/ :

Vemos 2 endpoints:

  1. /api/users :

Vemos que carga el mismo formulario que probamos anteriormente.

  1. /api/search :

Vemos nuevamente que carga el formulario. Así que por aquí no tiene que ir la cosa.

/backup/

Vamos a intentar acceder a él:

Vemos que no podemos acceder.

/robots.txt

Aquí vemos varias cosas interesantes. Vamos a probar acceder a /.git :

Nada... Vamos a probar a descargar el archivo db_schema.sql :

Vamos a ver su contenido:

Vemos que repetidamente podemos ver mucho la pista de que intentemos un SQL Injection. Actualmente con lo que tenemos enumerado no vemos ningún posible campo vulnerable. Vamos a seguir enumerando vamos a probar a ir /downloads :

Vemos que tenemos un binario donde lo podemos descargar. Luego nos da herramientas para poder analizar este binario. Vamos a ello.

Shell as thluser

Vamos a descargarnos el binario dándole click a Download Binary :

Vamos a analizarlo:

Vamos a empezar con el comando file , con este comando podremos determinar el tipo de archivo y formato gracias a los magic bytes:

Vemos que es un simple ejecutable. Vamos con el comando strings que nos ayudará a extraer cadenas de texto legibles del archivo:

Podemos ver la siguientes credenciales:

User
Password

thluser

Obtuvimos las credenciales de un usuario, vamos a intentar acceder por SSH:

Shell as root

Vamos a enumerar los permisos SUDOERS :

Vemos que podemos usar /bin/bash sin necesidad de contraseña como cualquier usuario. Vamos a ejecutarla con sudo para iniciar como root :

root! ;)