Revive Adserver SQL注入漏洞分析:關鍵詞參數引發的數據庫安全風險
Revive Adserver SQL注入漏洞技術分析
漏洞概述
在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注入漏洞:
- 基于錯誤的注入(使用MySQL的EXTRACTVALUE函數):
Payload: keyword=FUZZ') AND EXTRACTVALUE(8429,CONCAT(0x5c,0x716a7a6a71,(SELECT (ELT(8429=8429,1))),0x7178787871))-- Nqvq&compact=t
- 基于時間的盲注(使用MySQL的SLEEP函數):
Payload: keyword=FUZZ') AND (SELECT 3790 FROM (SELECT(SLEEP(5)))yGYJ)-- YFDA&compact=t
復現步驟
- 打開Burp Suite并使用其內置瀏覽器
- 訪問以下請求:
http://localhost/www/admin/admin-search.php?keyword=FUZZ&compact=t - 使用Burp Suite捕獲請求
- 使用
nano testsql.txt將請求保存到文本文件 - 運行以下命令:
sqlmap -r testsql.txt --dbs
您將看到數據庫被提取出來
影響范圍
此漏洞允許經過身份驗證的攻擊者:
- 從數據庫中提取敏感信息
- 修改或刪除數據庫內容
- 可能在數據庫服務器上執行特權命令
- 通過數據泄露可能升級到更嚴重的攻擊向量
SQLMap測試成功識別了數據庫名稱,并確認能夠通過易受攻擊的參數執行任意SQL查詢。
根本原因
根本原因是輸入驗證不當,以及缺乏預處理語句或參數化查詢。應用程序直接將用戶控制的輸入納入SQL查詢,而沒有足夠的清理或轉義機制。
這是Revive Adserver源代碼中的一個基本代碼缺陷,而不是配置錯誤的結果。
修復過程
開發團隊確認了該漏洞,并提供了一個臨時修復補丁。實際上,該漏洞存在于未維護的PEAR MDB2包中,特別是在matchPattern功能中,該功能以錯誤的順序應用不同類型的轉義,導致字符串轉義不當。
團隊計劃發布6.0.1版本,并請求CVE-ID(CVE-2025-52664),在發布后不久披露報告并發布安全公告。
漏洞狀態
- 嚴重程度:高(8.8)
- 狀態:已解決
- CVE ID:CVE-2025-52664
- 弱點類型:SQL注入
經過測試,修復補丁成功緩解了SQL注入漏洞,同時保持了所有搜索功能,查詢正常工作且沒有錯誤,輸入清理功能正確處理用戶輸入。
更多精彩內容 請關注我的個人公眾號 公眾號(辦公AI智能小助手)
對網絡安全、黑客技術感興趣的朋友可以關注我的安全公眾號(網絡安全技術點滴分享)
公眾號二維碼

公眾號二維碼


浙公網安備 33010602011771號