
Didaktischer PoC in Python 3 für CVE-2019-9053, eine time-based blind SQL Injection im CMS Made Simple <= 2.2.9. Diese Version wurde für den Einsatz in CTF/Laborumgebungen angepasst, mit vorkonfigurierten Präfixen zur Reduzierung der Extraktionszeit und erklärenden Nachrichten auf Portugiesisch.
Didaktischer PoC in Python 3 für CVE-2019-9053, eine Schwachstelle für zeitbasierte Blind-SQL-Injection in CMS Made Simple <= 2.2.9.
Diese Version wurde für den Einsatz in CTF-/Laborumgebungen modifiziert. Sie enthält vorkonfigurierte Präfixe, um die Extraktionszeit zu reduzieren, sowie erklärende Texte auf Portugiesisch, um Studenten das Verständnis der Funktionsweise des Exploits zu erleichtern.
Dieses Projekt ist ausschließlich für Bildungszwecke, kontrollierte Laborumgebungen und CTF-Umgebungen bestimmt.
Verwenden Sie diesen Code nicht gegen Systeme Dritter ohne ausdrückliche Genehmigung.
Der Autor dieses Repositorys übernimmt keine Haftung für Missbrauch dieses Materials.
Die CVE-2019-9053 betrifft ältere Versionen von CMS Made Simple und ermöglicht eine nicht authentifizierte SQL-Injection über den Parameter m1_idlist am Endpunkt:
/moduleinterface.php?mact=News,m1_,default,0
Da das Ergebnis der SQL-Abfrage nicht direkt auf der Seite erscheint, verwendet der Exploit eine Technik namens zeitbasierte Blind-SQL-Injection.
Der Exploit sendet Payloads, die die Datenbank dazu bringen, sleep(1) auszuführen, wenn eine Bedingung wahr ist.
Konzeptionelles Beispiel:
AND (
SELECT sleep(1)
FROM cms_users
WHERE password LIKE '0c01%'
)
Wenn der Server verzögert antwortet, erkennt das Skript, dass das getestete Präfix korrekt ist.
Auf diese Weise rekonstruiert es sensible Informationen Zeichen für Zeichen, wie:
In dieser CTF-Version wurden einige Präfixe bereits in den Code aufgenommen, um die benötigte Zeit während der Aktivität zu reduzieren.
Eine SQL-Injection tritt auf, wenn die Anwendung benutzergesteuerte Daten ohne ordnungsgemäße Behandlung in eine SQL-Abfrage einfügt.
In diesem Fall ist die Injection blind, weil das Ergebnis der Abfrage nicht direkt in der HTTP-Antwort erscheint.
Sie ist zeitbasiert, weil der Angreifer die Antwortzeit des Servers als Antwortkanal nutzt. Wenn die getestete Bedingung wahr ist, führt die Datenbank eine Verzögerung mit sleep() aus. Ist sie falsch, kommt die Antwort normal.
Vereinfachtes Beispiel:
Vom Exploit gestellte Frage:
"Beginnt der Passwort-Hash mit 0c01?"
Wenn ja:
Die Datenbank führt sleep(1) aus, und die Antwort verzögert sich.
Wenn nein:
Die Antwort kommt ohne wahrnehmbare Verzögerung.
Durch Wiederholen dieses Vorgangs Zeichen für Zeichen kann der Exploit Datenbankwerte rekonstruieren, auch wenn er sie nicht direkt auf der Seite sieht.
Ein Salt ist ein zusätzlicher Wert, der zusammen mit dem Passwort verwendet wird, bevor der Hash erzeugt wird.
In dieser Herausforderung verwendet CMS Made Simple eine ähnliche Logik wie:
md5(salt + password)
Zum Beispiel:
salt = 1dac0d92e9fa6bb2
password = exemplo123
Der Hash würde berechnet aus:
1dac0d92e9fa6bb2exemplo123
Das Salt dient dazu, Angriffe mit vorberechneten Tabellen zu erschweren und sicherzustellen, dass gleiche Passwörter in verschiedenen Kontexten unterschiedliche Hashes erzeugen können.
Trotzdem ist md5(salt + password) eine veraltete und schwache Methode zur Passwortspeicherung. Moderne Systeme sollten eigene Algorithmen für Passwörter verwenden, wie:
Diese Version wurde angepasst, um die Verwendung in einer praktischen Aktivität zu erleichtern.
Hauptänderungen:
Im Challenge verwendete Werte:
Salt completo: 1dac0d92e9fa6bb2
Username: mitch
Email: [email protected]
Hash completo: 0c01f4468bd75d7a84c7eb73846e8d96
Im Exploit konfigurierte Präfixe:
Salt prefix: 1dac0d92
Username prefix: mit
Email prefix: admin@
Hash prefix: 0c01f446
Diese Präfixe entfernen nicht die Logik des Angriffs. Sie reduzieren lediglich die benötigte Zeit für die Laboraktivität.
poc-CVE-2019-9053/
├── exploit_ctf.py
├── requirements.txt
├── README.md
├── wordlist-example.txt
└── .gitignore
Klonen Sie das Repository:
git clone https://github.com/SEU_USUARIO/poc-CVE-2019-9053.git
cd poc-CVE-2019-9053
Erstellen Sie eine virtuelle Umgebung:
python3 -m venv .venv
Aktivieren Sie die virtuelle Umgebung:
source .venv/bin/activate
Installieren Sie die Abhängigkeiten:
pip install -r requirements.txt
Die Datei requirements.txt sollte enthalten:
requests
termcolor
Einfache Ausführung:
python3 exploit_ctf.py -u http://target/cms
Ausführung mit versuchtem Passwortknacken mittels Wortliste:
python3 exploit_ctf.py -u http://target/cms --crack -w wordlist-example.txt
Hilfe zum Skript anzeigen:
python3 exploit_ctf.py -h
Die Datei wordlist-example.txt könnte enthalten:
wrongpassword
admin123
dieema123
password
123456
[+] Salt da senha encontrado: 1dac0d92e9fa6bb2
[+] Username encontrado: mitch
[+] Email encontrado: [email protected]
[+] Hash da senha encontrado: 0c01f4468bd75d7a84c7eb73846e8d96
[+] Senha encontrada: dieema123
Nachdem der Exploit das Salt und den Passwort-Hash extrahiert hat, kann er versuchen, das Passwort im Klartext mithilfe einer Wortliste zu ermitteln.
Die getestete Logik ist:
md5(salt + senha_candidata)
Für jedes Passwort aus der Wortliste berechnet das Skript den Hash und vergleicht ihn mit dem aus der Datenbank extrahierten Hash.
Konzeptionelles Beispiel:
candidate_hash = md5("1dac0d92e9fa6bb2" + "dieema123")
Wenn das Ergebnis gleich dem extrahierten Hash ist, wurde das Passwort gefunden.
Zeitbasierte Blind-SQL-Injection ist in der Regel langsam, da jedes Zeichen durch mehrere Anfragen getestet werden muss.
Diese Version reduziert die Zeit durch:
Trotzdem kann die Zeit variieren je nach:
TIME_DELAY.Bei vielen falsch positiven oder falsch negativen Ergebnissen erhöhen Sie den Wert von TIME_DELAY im Code.
Für CTF modifizierte Python-3-Version von Derick G. Andrighetti.
Basiert auf einem alten öffentlichen PoC in Python 2, ursprünglich veröffentlicht von Daniele Scanu von der Certimeter Group.
Bildungszwecke.
Dieses Material wurde für Studienzwecke, Labordemonstrationen und CTF-Aktivitäten erstellt.