Discuz x3.2 瀏覽器執行任意XSS


0x00 說說xss

跨站腳本(Cross-site scripting,通常簡稱為XSS)是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它允許惡意用戶將代碼注入到網頁上,其他用戶在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及用戶端腳本語言。

XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載並執行攻擊者惡意制造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。

0x01 Discuz論壇x3.2版本xss分析

Discuz 在用戶評論處設置了帖子管理員編輯評論的功能,由於前端 JS 代碼處理不當導致了經過惡意構造的評論內容在經過交互后形成 XSS 。下面通過 payload 的調試過程來解釋該漏洞的形成過程。

JS原生去ELEMENT中HTML內容的方法,會將服務端轉義過的單雙引號實體編碼進行反轉。

payload:[align=”onmouseover=”alert(1)]

這是一種bbcode語言,多用於bbs,blog中。瀏覽器不會識別這種語言,只能轉換成html實體語言,瀏覽器才會識別

0x02 xss彈窗分析

  • forum.php?mod=viewthread&tid=1&extra=page%3D1

查看源碼,發現已被實體編碼,不會彈框。

當管理或版主對用戶的評論點擊管理時,前端JS代碼就開始處理,彈出一個編輯框供管理或版主操作。在JS代碼處理的過程中,首先獲取用戶評論的內容,代碼位於當前頁面中

而$() 函數是經過封裝過的,原型位於 /static/js/common.js 中:

  • /static/js/common.js

使用了原生的 document.getElementById() 函數來獲取頁面中的對應對象,此處獲取的是標有id=”e_textarea” 的對象,其對應的值為用戶評論的內容。由於JS原生函數的原因,被服務器后端轉義的引號會被重新是渲染回引號:

然后流程繼續執行,wysiwyg在前面判斷瀏覽器時已經賦了值

在前面wysiwyg變量的值為1,所以會執行如下代碼
newEditor(1, bbcode2html(textobj.value))

其中textobj.value的值為: 2(經過document.getElementById()獲取的對象解析了實體編碼)
在進行 newEditor() 時,會對傳入的內容使用函數bbcode2html()進行編碼過濾,其函數原型位於/static/js/bbcode.js,

  • /static/js/bbcode.js

程序匹配其支持的shortcode然后正則替換為相應的HTML代碼,
str = str.replace(/[email=(.[^[])](.?)[/email]/ig, '$2');
經過正則匹配替換后,str的值會變為: 2

  • static/js/editor.js

繼續跟蹤,在當前文件中,直接把剛剛傳入的textobj的值,嵌入到html語句中后,直接寫入到頁面當中。

直接產生xss


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM