Revive Adserver漏洞报告 #3395221 - 基于错误和时间的SQL注入
摘要
在Revive Adserver的管理搜索功能中发现了一个严重的SQL注入漏洞,具体位于admin-search.php文件中。该漏洞存在于keyword GET参数的处理过程中,该参数在传递给多个数据库查询时未经过适当的清理或参数化处理。
技术分析
漏洞根源
漏洞源于使用phpAds_registerGlobalUnslashed()函数注册用户输入变量(包括keyword),而未进行适当的转义:
|
|
随后,这些用户控制的输入直接传递给多个数据库查询函数:
|
|
SQL注入验证
使用SQLMap测试确认了两种不同的SQL注入漏洞:
- 基于错误的注入(使用MySQL的EXTRACTVALUE函数):
|
|
- 基于时间的盲注(使用MySQL的SLEEP函数):
|
|
复现步骤
- 打开Burp Suite并使用其内置浏览器
- 访问以下请求:
http://localhost/www/admin/admin-search.php?keyword=FUZZ&compact=t - 使用Burp Suite捕获请求
- 使用
nano testsql.txt将请求保存到文本文件 - 运行以下命令:
|
|
影响
此漏洞允许经过身份验证的攻击者:
- 从数据库中提取敏感信息
- 修改或删除数据库内容
- 可能在数据库服务器上执行特权命令
- 通过数据泄露可能升级到更严重的攻击向量
根本原因
根本原因是输入验证不当以及缺乏预处理语句或参数化查询。应用程序直接将用户控制的输入纳入SQL查询,而没有足够的清理或转义机制。
这是Revive Adserver源代码中的基本代码缺陷,而不是错误配置的结果。
修复过程
开发团队确认了漏洞并提供了修复补丁。漏洞实际上存在于未维护的PEAR MDB2包中,特别是在matchPattern功能中,该功能以错误的顺序应用不同类型的转义,导致字符串转义不当。
修复后发布了版本6.0.1,并分配了CVE-ID:CVE-2025-52664。
支持材料/参考
- PoC视频证据
- SQL注入相关参考资料: