
Dies ist ein Python3-Skript, das einen Exploit für eine Blind SQL Injection-Schwachstelle in WebERP Version 4.15 demonstriert.
Dies ist ein Python3-Skript, das einen Exploit für eine Blind-SQL-Injection-Schwachstelle in WebERP Version 4.15 demonstriert, ursprünglich entdeckt von Semen Alexandrovich Lyhin am 10. Juni 2019. Der ursprüngliche Exploit ist hier zu finden, und weitere Details zum WebERP-System können von der offiziellen WebERP-Website bezogen werden. Übersicht
Die Schwachstelle liegt darin, wie WebERP Abfragen verarbeitet, die in base64-Kodierung empfangen und an die Funktion unserialize() übergeben werden. Bemerkenswerterweise kann das Skript diese Abfragen ohne jegliche Bereinigung in ein Array deserialisieren. Danach wird jedes Element dieses Arrays direkt in die SQL-Abfrage eingespeist, ohne weitere Überprüfungen, was das System anfällig für SQL-Injection-Angriffe macht. Skriptoperation
Dieses Skript funktioniert, indem es die obige Schwachstelle in den folgenden Schritten ausnutzt:
Eine bösartige Abfrage wird mit der Funktion generatePayload() vorbereitet. Die Funktion erstellt ein serialisiertes Array mit SQL-Injection-Payloads und kodiert es in base64-Format.
Das Skript meldet sich mit den bereitgestellten Anmeldedaten und der Funktion getCookies() am WebERP-System an, die Sitzungscookies abruft.
Ein neuer Lieferant wird mit der Funktion addSupplierID() zum System hinzugefügt. Der Name des Lieferanten wird später als Marker verwendet, um die Antwort des Systems zu identifizieren.
Der Exploit wird mit der Funktion runExploit() ausgeführt. Es sendet eine POST-Anfrage an die Seite "Payments.php" des WebERP-Systems. Diese Funktion bettet den base64-kodierten Payload als Parameter in die POST-Daten ein.
Die Antwortzeit auf die Anfrage wird gemessen. Eine deutlich längere Antwortzeit deutet darauf hin, dass die SQL-Abfrage aufgrund des injizierten sleep()-Befehls verzögert wurde, was das Vorhandensein der SQL-Injection-Schwachstelle bestätigt.
python3 exploit.py <target> <path> <login> <password> <order>
Ersetzen Sie <target>, <path>, <login>, <password> und <order> durch Ihre Ziel-IP-Adresse, den Zielpfad, den Benutzerlogin, das Benutzerpasswort bzw. die Unternehmensbestellung.
Beispiel:
python exploit.py 192.168.1.1 'WEBerp/' admin weberp 1