
ZoneMinder 시간 기반 SQL 주입(CVE-2024-51482) 익스플로잇 POC
이 저장소는 ZoneMinder 1.37.* ~ 1.37.64에서 발견된 블라인드 SQL 인젝션 취약점에 대한 고성능 병렬 처리 PoC(Proof-of-Concept) 익스플로잇(Exploit.py)을 포함합니다.
GHSA-qm8h-3xvf-m7j3에 따르면, 이 취약점은 web/ajax/event.php에서 removetag 액션을 처리할 때 발생합니다. tid(TagId) 매개변수가 요청에서 읽혀진 후 SQL 문에 안전하지 않게 직접 연결됩니다:
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
$tagId가 dbNumRows()에 전달되기 전에 매개변수화되지 않기 때문에, 인증된 공격자는 boolean 기반 또는 시간 기반 SQL 인젝션 기법(여기에 제시된 PoC는 SLEEP()를 활용)을 사용하여 임의의 SQL 명령을 주입할 수 있습니다.
이로 인해 SQL 데이터베이스를 완전히 제어할 수 있게 되어 데이터 기밀성과 무결성이 손상될 수 있으며, 지속적인 sleep 명령을 통한 서비스 거부(DoS) 가능성도 있습니다.
1.37.65 버전부터 SQL 쿼리가 적절하게 매개변수화되었습니다. 취약했던 블록은 안전한 쿼리를 구성하도록 패치되었습니다:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
v2.0 FAST EXPLOIT 스크립트는 멀티스레딩, 최적화된 문자 빈도 탐색, 동적 임계값 보정을 사용하여 zm.Users 데이터베이스 테이블에서 사용자 자격 증명(Username:Password)을 적극적으로 추출함으로써 데이터 추출 속도를 최대 5배까지 크게 향상시킵니다.
Exploit.py v2.0 FAST EXPLOIT)zm.Users 테이블을 순차적으로 덤프하는 것을 지원합니다.http://<target>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
실행하면 스크립트는 대화형 모드로 실행되며 다음을 입력하라는 메시지를 표시합니다:
index.php 파일의 경로 (예: http://zoneminder.local/zm/index.php).ZMSESSID 쿠키를 제공하세요.zm.Users 테이블을 덤프합니다.extracted_data.txt라는 파일이 덤프된 자격 증명(Username:Password 형식)과 함께 자동으로 생성됩니다. 또한 스크립트는 총 경과 시간과 전송된 총 HTTP 요청 수를 포함한 실시간 실행 통계를 표시합니다.
면책 조항: 이 익스플로잇 스크립트는 엄격히 교육 목적과 승인된 침투 테스트를 위해서만 제공됩니다. 소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에는 이 도구를 사용하지 마십시오.