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. 漏洞分析

漏洞流程

分析過程

  1. 尋找SSRF觸發點
  2. PHP能夠發起請求的模塊以及函數大致有
    • cURL
    • file_get_contents()
    • fopen()
    • fsockopen()

經過驗證是采用的cURL模塊,并且vB對其進行了二次封裝

  1. 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類進行了實例化

  1. 如何觸發

  2. 從已經掌握的信息來看

    • 一次跳轉觸發SSRF需要的條件有
    • 訪問的協議是http/https
    • 禁止本地地址
    • 僅限80/443
    • 很明顯在一次跳轉的情況下基本無法完成有威脅操作
  3. 那么只能從二次跳轉入手
    • 需要條件VURL_FOLLOWLOCATION為真
  4. 再與上述具有實例化vB_vURL的類或函數做一個取交集我們不難發現
  5. core/vb/api/content/link.php中的函數prasePage()就是我們的突破口

  6. 可控輸入點

  7. 我們已經找到了如何觸發的方法,那么接下來應該尋找可供輸入的點

  8. 從上述結果中閱讀源碼發現

upload/core/vb/api/content/link.php

  • 繼續向上游尋找調用點
  • /upload/include/vb5/frontend/controller/link.php

  • 典型框架入口

  1. 路由解析

  1. 故構造觸發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類中二次跳轉進行更加嚴格限制
  • 用戶等待升級版本或者修改上述觸發漏洞源碼

三、參考


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/24/