
在Revive Adserver的管理搜索功能中发现了一个严重的SQL注入漏洞,具体位于admin-search.php文件中。该漏洞存在于keyword GET参数的处理过程中,该参数被传递给多个数据库查询,但缺乏适当的清理或参数化处理。
漏洞源于使用phpAds_registerGlobalUnslashed()函数注册用户输入变量(包括keyword),但未进行适当的转义:
phpAds_registerGlobalUnslashed('keyword', 'client', 'campaign', 'banner', 'zone', 'affiliate', 'compact');随后,这些用户控制的输入被直接传递给多个数据库查询函数:
$rsClients = $dalClients->getClientByKeyword($keyword, $agencyId);
$rsCampaigns = $dalCampaigns->getCampaignAndClientByKeyword($keyword, $agencyId);
$rsBanners = $dalBanners->getBannerByKeyword($keyword, $agencyId);
$rsAffiliates = $dalAffiliates->getAffiliateByKeyword($keyword, $agencyId);
$rsZones = $dalZones->getZoneByKeyword($keyword, $agencyId);即使不检查这些函数的实现,也能明显看出它们在将keyword参数纳入SQL查询之前没有进行适当的清理,从而导致SQL注入。
使用SQLMap测试确认了两种不同的SQL注入漏洞:
http://localhost/www/admin/admin-search.php?keyword=FUZZ&compact=tnano testsql.txt将请求保存到文本文件此漏洞允许经过身份验证的攻击者:
SQLMap测试成功识别了数据库名称,并确认能够通过易受攻击的参数执行任意SQL查询。
根本原因是输入验证不当,以及缺乏预处理语句或参数化查询。应用程序直接将用户控制的输入纳入SQL查询,而没有足够的清理或转义机制。
这是Revive Adserver源代码中的一个基本代码缺陷,而不是配置错误的结果。
开发团队确认了该漏洞,并提供了一个临时修复补丁。实际上,该漏洞存在于未维护的PEAR MDB2包中,特别是在matchPattern功能中,该功能以错误的顺序应用不同类型的转义,导致字符串转义不当。
团队计划发布6.0.1版本,并请求CVE-ID(CVE-2025-52664),在发布后不久披露报告并发布安全公告。
经过测试,修复补丁成功缓解了SQL注入漏洞,同时保持了所有搜索功能,查询正常工作且没有错误,输入清理功能正确处理用户输入。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。