> For the complete documentation index, see [llms.txt](https://itskode.gitbook.io/pentesting/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itskode.gitbook.io/pentesting/thehackerlabs/facil/thlpwn.md).

# THLPWN

## Introduccion

En este laboratorio de TheHackerLabs se compromete una maquina Linux mediante enumeracion web, analisis de un binario expuesto y abuso de una configuracion insegura de `sudo`.

El objetivo es descubrir el virtual host correcto, obtener credenciales SSH desde un binario vulnerable y escalar privilegios hasta `root`.

***

## Informacion de la maquina

Al iniciar la maquina se muestra la informacion basica del laboratorio:

![Informacion de la maquina](/files/U9R0AzjgxJP3xjoh5xgG)

Datos relevantes:

| Campo   | Valor          |
| ------- | -------------- |
| Nombre  | thlpwn         |
| Creador | Oscar          |
| IP      | 192.168.56.108 |

***

## Escaneo y enumeracion

Se realiza un escaneo de versiones con Nmap sobre la maquina objetivo:

```bash
nmap -sV -sS -n -Pn -T4 -p- 192.168.56.108
```

![Nmap](/files/s0oJsCFtmwnnav185KKo)

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version              |
| ------ | -------- | -------------------- |
| 22/tcp | SSH      | OpenSSH 9.2p1 Debian |
| 80/tcp | HTTP     | nginx 1.22.1         |

***

## Virtual hosting

Al acceder directamente por IP al puerto 80 aparece un `403 Forbidden`:

![403 Forbidden](/files/PeoI1QUXcoW59VUoOCmv)

La propia pagina indica que el acceso directo por IP no esta permitido y da una pista clara:

```
This server uses virtual hosting.
You need to discover the correct hostname.
```

Como el nombre de la maquina es `thlpwn`, se prueba el dominio `thlpwn.thl` y se anade al archivo `/etc/hosts`:

```bash
192.168.56.108 thlpwn.thl
```

![Hosts](/files/Rsqwjxh4KsXhahRmuQVo)

Al acceder a `http://thlpwn.thl` se carga correctamente la aplicacion web.

![Web principal](/files/YfxtDGhcsW74oXDQzgWl)

La pagina principal muestra un formulario y varios enlaces interesantes:

* `Admin Panel`
* `API Documentation`
* `Downloads`
* `Backups`
* `Uploads`

***

## Enumeracion web

Se revisa la documentacion de la API:

![API documentation](/files/f9teCJjCLZ0LeJRxFcFA)

La aplicacion documenta dos endpoints pero estan deshabilitados:

| Metodo | Ruta          | Descripcion             |
| ------ | ------------- | ----------------------- |
| GET    | `/api/users`  | Listar usuarios         |
| POST   | `/api/search` | Buscar en base de datos |

Tambien se realiza fuerza bruta de directorios y archivos con Gobuster:

```bash
gobuster dir -u http://thlpwn.thl/ \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404,403 -t 60 --exclude-length 4478
```

![Gobuster](/files/vHgf7TkjAG3778cLl3cy)

Recursos interesantes encontrados:

| Recurso       | Codigo | Comentario                  |
| ------------- | ------ | --------------------------- |
| `/search.php` | 200    | Posible busqueda vulnerable |
| `/downloads/` | 301    | Descargas disponibles       |
| `/admin/`     | 301    | Panel de administracion     |
| `/assets/`    | 301    | Recursos estaticos          |
| `/api/`       | 301    | API                         |
| `/backup/`    | 301    | Copias de seguridad         |
| `/robots.txt` | 200    | Pistas de enumeracion       |

***

## robots.txt

Al consultar `robots.txt` aparecen rutas y pistas muy directas:

![robots.txt](/files/5sQI1I9AVRvhhBZOaw0R)

Contenido relevante:

```
Disallow: /admin/
Disallow: /backup/
Disallow: /.git/

/downloads/ - Binary files available here
/backup/db_schema.sql - Database structure
/admin/secure/panel.php - Admin panel

Hint: Check /downloads/ for useful files
Hint: SQL Injection in search.php (6 columns)
Hint: Binary location also in database via SQLi
```

La ruta mas interesante para acceso inicial es `/downloads/`, ya que indica que hay binarios disponibles.

***

## Analisis del binario

En `/downloads/` aparece un binario llamado `auth_checker`.

![Downloads](/files/W0uakz41cmFLv6lcy0xU)

La propia pagina recomienda analizarlo con herramientas basicas:

```bash
file auth_checker
strings auth_checker
checksec auth_checker
ltrace ./auth_checker
```

Tras descargarlo, se ejecuta `strings` para extraer cadenas legibles:

```bash
strings auth_checker
```

![strings auth\_checker](/files/rlIIudVxlOUIyzebNqnb)

Entre las cadenas del binario aparecen credenciales SSH:

```
SSH Access Credentials:
Username: thluser
Password: 9Kx7mP2wQ5nL8yT4hR6zY
```

Tambien aparece una pista indicando que la password esta hardcodeada en el propio binario.

***

## Backup de base de datos

En la ruta `/backup/db_schema.sql` se puede descargar el esquema de la base de datos:

```bash
cat db_schema.sql
```

![db\_schema.sql](/files/gBa01Siw49tbVm27QyoT)

El backup confirma que existe una tabla `secrets` con campos como `key_name`, `key_value` y `hint`.

Aunque la propia aplicacion apunta a una SQL injection en `search.php`, en este caso no hace falta explotarla para el acceso inicial, porque las credenciales SSH ya aparecen en el binario descargado.

***

## Acceso inicial por SSH

Con las credenciales obtenidas se accede por SSH como `thluser`:

```bash
ssh thluser@192.168.56.108
```

Password:

```
9Kx7mP2wQ5nL8yT4hR6zY
```

![SSH thluser](/files/pdrNPVHY7mWhNp1NJsny)

Se obtiene una shell como el usuario `thluser`.

***

## Escalada de privilegios

Se comprueban los permisos sudo del usuario:

```bash
sudo -l
```

![sudo -l](/files/d26i3PEolGBhCM4eg08I)

El usuario `thluser` puede ejecutar `/bin/bash` como cualquier usuario sin password:

```
(ALL) NOPASSWD: /bin/bash
```

Esto permite obtener una shell como `root` directamente:

```bash
sudo -u root /bin/bash
```

![Root](/files/D412ZHvN1NcilbmFVeSy)

Se confirma el acceso privilegiado:

```bash
whoami
```

Resultado:

```
root
```

***

## Conclusion

El compromiso de la maquina ha sido posible por la combinacion de varios fallos:

* Virtual host facilmente deducible a partir del nombre de la maquina
* Rutas sensibles expuestas en `robots.txt`
* Directorio `/downloads/` accesible publicamente
* Credenciales SSH hardcodeadas dentro de un binario descargable
* Regla `sudo` extremadamente permisiva para `/bin/bash`

### Puntos clave

| Fase            | Tecnica                 | Resultado                                  |
| --------------- | ----------------------- | ------------------------------------------ |
| Reconocimiento  | Nmap                    | SSH y HTTP expuestos                       |
| Enumeracion web | Virtual hosting         | Descubrimiento de `thlpwn.thl`             |
| Enumeracion web | Gobuster y `robots.txt` | Rutas `/downloads/`, `/backup/`, `/admin/` |
| Analisis        | `strings auth_checker`  | Credenciales SSH de `thluser`              |
| Acceso inicial  | SSH                     | Shell como `thluser`                       |
| Escalada        | `sudo /bin/bash`        | Shell como `root`                          |

### Recomendaciones

* No publicar rutas sensibles en `robots.txt`
* Evitar exponer binarios internos en directorios web publicos
* No almacenar credenciales hardcodeadas en binarios ni codigo fuente
* Aplicar controles de acceso sobre backups y descargas
* Revisar reglas `sudoers` y evitar `NOPASSWD` sobre shells


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/thehackerlabs/facil/thlpwn.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
