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

0x00 說說xss

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

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

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代碼處理的過程當中,首先獲取用戶評論的內容,代碼位於當前頁面中cookie

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

  • /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

相關文章
相關標籤/搜索