Author: c1tas, p0wd3r (知道創宇404安全實驗室)
CVE: CVE-2016-6483
一、漏洞概述
vBulletin 接受url參數,未禁止跳轉導致SSRF
vBulletin 需要這個功能來訪問外部連接,但是對此處限制不嚴導致可以引發redirect
漏洞存在版本:
vBulletin <= 5.2.2
vBulletin <= 4.2.3
vBulletin <= 3.8.9
二、漏洞復現
1. 漏洞分析
漏洞流程
分析過程
- 尋找
SSRF
觸發點 PHP
能夠發起請求的模塊以及函數大致有cURL
file_get_contents()
fopen()
fsockopen()
經過驗證是采用的cURL
模塊,并且vB
對其進行了二次封裝
- 對
cURL
類進行跟蹤
所以根據上訴搜結果定位到
/upload/core/vb/vurl/curl.php
經過閱讀源碼,發現這個封裝的最底層的實現cURL
的類
拿到了這個最下層的類我們繼續往上尋找他在哪里被調用
所以我們來看class vB_vURL
的核心代碼
繼續往上跟蹤尋找vB_vURL
被實例化的地方
- core/includes/class_apiclient.php
- class vB_APIClient
- public function __construct
- core/includes/class_humanverify_recaptcha.php
- class vB_HumanVerify_Recaptcha
- function verify_token
- core/includes/class_sitemap.php
- class vB_SiteMapRunner
- public function ping_search_engines
- core/includes/class_upload.php
- abstract class vB_Upload_Abstract
- function accept_upload
- function fetch_remote_filesize
- core/includes/functions_file.php
- function fetch_body_request
- core/includes/paymentapi/class_google.php
- class vB_PaidSubscriptionMethod_google
- public function verify_payment
- core/vb/akismet.php
- class vB_Akismet
- protected function _submit
- core/vb/api/content/link.php
- class vB_Api_Content_Link
- public function parsePage
- core/vb/api/profile.php
- class vB_Api_Profile
- public function uploadUrl
- core/vb/library/content/attach.php
- class vB_Library_Content_Attach
- public function uploadUrl
- core/vb/library/content/video.php
- class vB_Library_Content_Video
- public function getVideoFromUrl
- core/vb/stopforumspam.php
- class vB_StopForumSpam
- protected function _submit
在上述類或函數中對vB_vURL
類進行了實例化
-
如何觸發
-
從已經掌握的信息來看
- 一次跳轉觸發
SSRF
需要的條件有 - 訪問的協議是
http/https
- 禁止本地地址
- 僅限
80/443
- 很明顯在一次跳轉的情況下基本無法完成有威脅操作
- 一次跳轉觸發
- 那么只能從二次跳轉入手
- 需要條件
VURL_FOLLOWLOCATION
為真
- 需要條件
- 再與上述具有實例化
vB_vURL
的類或函數做一個取交集我們不難發現 -
core/vb/api/content/link.php
中的函數prasePage()
就是我們的突破口 -
可控輸入點
-
我們已經找到了如何觸發的方法,那么接下來應該尋找可供輸入的點
- 從上述結果中閱讀源碼發現
upload/core/vb/api/content/link.php
- 繼續向上游尋找調用點
-
/upload/include/vb5/frontend/controller/link.php
-
典型框架入口
- 路由解析
- 故構造觸發
URL
:http://localhost/link/getlinkdata
2. 漏洞利用
Demo
#!/usr/bin/env python
# coding: utf-8
import requests as req
u = 'vB_Server'
redirect_server = 'Your_VPS:80'
vul_url = u + '/link/getlinkdata'
data = {
'url': redirect_server
}
req.post(vul_url, data=data)
3. 漏洞修復
- 廠商對
vB_vURL_cURL
類中二次跳轉進行更加嚴格限制 - 用戶等待升級版本或者修改上述觸發漏洞源碼
三、參考
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/24/
暫無評論