Kate Li (Taiwan)的部落格

首頁

vbulletin覈心挿件forumrunner sql注入(cve

作者 iacona 時間 2020-02-29
all

Author: janes(知道創宇404安全實驗室)

Date: 2016-11-15

漏洞概述

漏洞簡介

vBulletin是一個商業論壇程式,使用PHP語言編寫,有研究者發現VBulletin覈心挿件forumrunner存在SQL注入漏洞:CVE-2016-6195.挿件forumrunner默認開啟,利用該漏洞,攻擊者能够利用SQL注入漏洞脫庫。

forumrunner forumrunner

漏洞影響

攻擊者能够利用SQL注入漏洞脫庫

影響版本

3.6.x~4.2.1

4.2.2~4.2.2 Patch Level 5

4.2.3~4.2.3 Patch Level 1

漏洞分析

分析所用版本4.2.1

4.2.1

漏洞的本質是forumrunner/includes/moderation.php檔案中,do_get_spam_data()函數()對參數postids和threadid過濾不嚴導致SQL注入漏洞,覈心代碼如下:

forumrunner/includes/moderation.php do_get_spam_data() postids threadid

VBulletin程式中並不直接使用$_GET等全域變數獲取輸入數據,而是使用clean_gpc()和clean_array_gpc()函數來過濾輸入數據,而這兩個函數並未對STRING類型做嚴格過濾,而傳入的參數postids是作為SRING類型解析,參數postids隨後拼接在SQL語句中進行査詢,導致SQL注入漏洞。

$_GET clean_gpc() clean_array_gpc() STRING postids SRING postids SQL

尋找調用或包含do_get_spam_data()函數的程式碼,發現forumrunner/support/common_methods.php

do_get_spam_data() forumrunner/support/common_methods.php

繼續回溯,發現forumrunner/request.php檔案包含support/common_methods.php.

forumrunner/request.php support/common_methods.php

上面程式碼中process_input()函數(forumrunner/support/utils.php),會從$_REQUEST中取值,進行簡單的類型轉換,STRING類型則原樣返回,根據上面程式碼,可以通過$_REQUEST['cmd']參數調用get_spam_data()函數,進而調用do_get_spam_data()函數。設定$_REQUEST['d']參數將打開錯誤報告,有助於SQL注入,當然也可以不設定$_REQUEST['d']參數,這對觸發SQL注入漏洞沒有影響。剩下的就是使用postids參數構造SQL payload

process_input() $_REQUEST STRING $_REQUEST['cmd'] get_spam_data() do_get_spam_data() $_REQUEST['d'] $_REQUEST['d'] postids

postids參數注入

postids

有效載荷:forumrunner/request.php?d=1&cmd=get_spam_data&postids=-1)聯合選擇1,2,3,(從用戶選擇concat(用戶名,0x3a,密碼),5,1,7,8,9,10--+

forumrunner/request.php?d=1&cmd=get_spam_data&postids=-1)union select 1,2,3,(select concat(username, 0x3a, password) from user),5,1,7,8,9,10--+

設定中斷點及變數取值,注入結果如下:

從圖中可以看出SQL注入語句執行成功,$post['title']變數已經獲取了用戶名和密碼,其中forumid設定為1,保證下麵程式碼不會進入if條件判斷語句中。

$post['title'] forumid 1 if

補丁分析

includes/general_vb.php檔案,fr_clean_ids函數對id類變數進行了整數轉換,從而封锁SQL注入攻擊。

includes/general_vb.php fr_clean_ids id

forumrunner/include/moderation.php檔案,do_get_spam_data函數過濾$postids和$threadid參數

forumrunner/include/moderation.php do_get_spam_data $postids $threadid

修復方案

直接更新補丁http://members.vbulletin.com/patches.php

更新VBulletin程式版本(>4.2.3)

reference

https://www.seebug.org/vuldb/ssvid-92354

https://enumerated.wordpress.com/2016/07/11/1/

http://blog.securelayer7.net/vbulletin-sql-injection-exploit-cve-2016-6195/

本文由Seebug Paper發佈,如需轉載請注明來源。本文地址:https://paper.seebug.org/116/