日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

富文本存储型XSS的模糊测试之道

發(fā)布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 富文本存储型XSS的模糊测试之道 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
富文本存儲型XSS的模糊測試之道

憑借黑吧安全網(wǎng)漏洞報告平臺的公開案例數(shù)據(jù),我們足以管中窺豹,跨站腳本漏洞(Cross-site Script)仍是不少企業(yè)在業(yè)務(wù)安全風(fēng)險排查和修復(fù)過程中需要對抗的“大敵”。
XSS可以粗分為反射型XSS和存儲型XSS,當(dāng)然再往下細(xì)分還有DOM XSS, mXSS(突變XSS), UXSS(瀏覽器內(nèi)的通用跨站腳本)。其中一部分解決方法較為簡便,使用htmlspecialchars()對HTML特殊符號做轉(zhuǎn)義過濾,經(jīng)過轉(zhuǎn)義的輸入內(nèi)容在輸出時便無法再形成瀏覽器可以解析的HTML標(biāo)簽,也就不會形成XSS漏洞。

(圖:htmlspecialchars函數(shù)的轉(zhuǎn)義規(guī)則)
但網(wǎng)站做大了,總有一些業(yè)務(wù),比如郵件內(nèi)容編輯、日志帖子類編輯發(fā)布等功能時,需要授權(quán)給用戶自定義鏈接、改變字體顏色,插入視頻圖片,這時就不得不需要需要引入HTML富文本實現(xiàn)相應(yīng)功能。之前提到,htmlspecialchars()這樣把所有特殊符號做轉(zhuǎn)義處理的過濾辦法,這是就英雄無用武之地,因為HTML標(biāo)簽全部被過濾了,那之前提到的這些用戶可以自定義功能又該如何實現(xiàn)?
一個問題總有它的解決辦法,所以基于白/黑名單防御思想的富文本內(nèi)容過濾器應(yīng)運而生,并很快被應(yīng)用到了對抗富文本存儲型XSS的前沿。它的任務(wù)就是根據(jù)內(nèi)置的正則表達式和一系列規(guī)則,自動分析過濾用戶提交的內(nèi)容,從中分離出合法和被允許的HTML,然后經(jīng)過層層刪除過濾和解析最終展示到網(wǎng)頁前端用戶界面來。這樣既不影響網(wǎng)站的安全性,也不會妨礙到用戶自定義富文本內(nèi)容功能的實現(xiàn)。
道高一尺魔高一丈,經(jīng)過一些前期的手工測試和側(cè)面從黑吧安全網(wǎng)公開的漏洞報告中了解,大多數(shù)網(wǎng)站的富文本過濾器采用“黑名單”的設(shè)計思想。這也為我們使用模糊測試來自動化挖掘富文本存儲型XSS提供了可能性。

(圖:某國內(nèi)知名郵箱的富文本過濾器基于“黑名單”設(shè)計邏輯)
與此同時,本文的主角,“強制發(fā)掘漏洞的利器”-- 模糊測試(Fuzzing Test),相信各位一定不會陌生。無論是在二進制還是在WEB端的黑盒測試中都有它立功的身影,從客戶端軟件漏洞的挖掘到WEB端弱口令的爆破,本質(zhì)上都可以認(rèn)為是一種模糊測試。
結(jié)合富文本過濾器“黑名單”的實現(xiàn)邏輯,接下來,本文將主要探討這類富文本存儲型跨站腳本的模糊測試之道。將模糊測試這一強大的漏洞挖掘武器通過精細(xì)的打磨,挖掘出大量的潛在缺陷。
0x01 找準(zhǔn)目標(biāo),事半功倍
要進行模糊測試,首先要找準(zhǔn)目標(biāo)。知道目標(biāo)有哪些地方有富文本編輯器,又有哪些種類,進一步推測其是否基于“黑名單”思想,是否可以進行自動化的模糊測試。才可以讓我們接下來要進行的模糊測試,發(fā)揮出事半功倍的效果
并不是所有允許用戶提交自定義內(nèi)容的地方,都允許用戶自定義富文本,如果網(wǎng)站已經(jīng)在后端對所有提交的內(nèi)容做了htmlspecialchars()的過濾,就意味著所有提交的內(nèi)容都會被轉(zhuǎn)義,也就不存在模糊測試的必要了。比如:

黑吧安全網(wǎng)漏洞報告平臺的評論回復(fù)區(qū)域,后端的實現(xiàn)邏輯就是不允許用戶傳入富文本內(nèi)容,對所有用戶輸入的內(nèi)容做了htmlspecialchars()的過濾。也就是說,如果你傳入類似:

alert(1);??? =>? alert(1);?
這時無論你使用何種高大上的XSS Vector,都無濟于事,被轉(zhuǎn)義以后的內(nèi)容,無法對構(gòu)成XSS跨站腳本。
富文本編輯器也分很多種,比如基于HTML標(biāo)簽形式的富文本編輯器(Ueditor、Fckeditor),自定義富文本標(biāo)簽形式(Markdown, UBB),在國內(nèi)外各大網(wǎng)站都有使用。模糊測試萬變不離其宗,你有了一把鋒利的斧頭,你無論用什么方式砍柴,本質(zhì)相同。只是有時候是類似Ueditor的編輯器,在進行模糊測試的時候,可能會更加方便容易。

(圖:百度Ueditor)
0x02 模糊測試框架
就好像寫字之前你必須有一只筆,砍柴前必須有一把斧子一樣,在開始針對富文本過濾器展開模糊測試之前,你必須得有一個可以自動生成Payload的模糊測試框架。無論使用JavaScript、PHP、Python還是更加小眾亦或是高級的語言,模糊測試框架的中心思想就是,通過拼接思想動態(tài)生成大量的供模糊測試使用的Payload。對網(wǎng)站富文本編輯器的模糊測試,稍不同于對瀏覽器XSS

????Filter或者是對DOM特性的模糊測試,不過我們還是可以參考一些已經(jīng)在互聯(lián)網(wǎng)上公開的XSS Filter Fuzzer的現(xiàn)成代碼,加以修改,為我所用,這里就不再贅述。
所以,在開始更深一步的模糊測試方案設(shè)計之前,請選擇自己得心應(yīng)手的一種程序設(shè)計語言,參考現(xiàn)成的XSS Filter Fuzzer,編寫出一個或簡單或復(fù)雜的模糊測試框架。

(圖:基于拼接思想動態(tài)生成XSS Fuzzing Test Payload的框架代碼)
0x03 模糊測試模板
有了框架,就好比有了手槍,現(xiàn)在我們需要給它裝上“子彈”-- 模糊測試模板。一個模糊測試模板的好壞,很大程度上決定了,之后我們是否能夠高效的測試出富文本編輯器中潛在的缺陷,從而發(fā)掘出大量的存儲型XSS構(gòu)造姿勢。而在設(shè)計自己的模糊測試模板時,主要需要考慮三點:邊界、進制編碼和字符集。
先來說說邊界問題。以下面簡單的HTML代碼為例:

span class=”yyy οnmοuseοver=11111” style="width:expression(alert(9));">span>
上述HTML標(biāo)記語言文本傳給后端富文本編輯器的時候,程序會如何過濾和解析?也許是這樣的:首先匹配到,進入其屬性值過濾的邏輯,首先是否含有高危的on開頭的事件屬性,發(fā)現(xiàn)存在onmouseover但被”,”包裹,作為class屬性的屬性值,所以并不存在危險,于是放行;接著分析style屬性,其中有高危關(guān)鍵詞”expression()”,又有括弧特殊符號,所以直接清除過濾。
上述過濾流程的實現(xiàn),很大程度依賴于后端通過正則匹配進行的HTML標(biāo)簽中的邊界分析。通過對“邊界”的判定,類似class=”yyyy onmouserover=11111” 的屬性及其值才會被放行,因為雖然onmouserover=11111雖然是高危的事件屬性,但存在于=””中,沒有獨立成一個HTML屬性,也就不存在風(fēng)險。所以在上面的例子中,=””就是邊界,中的尖括號也是邊界,空格也可以說成一種邊界。所以,形象一點說,一段HTML代碼的邊界位置很有可能是下面這樣的:
[邊界]span[邊界]class=[邊界]yyy[邊界]>[邊界]span[邊界]>
所以如果是類似style="width:expr/*”*/esion(alert(9));"屬性和屬性值呢?程序又該如何確定邊界?是style="a:expr/*”還是style="a:expr/*”*/ession(alert(9));"?
當(dāng)后端富文本過濾程序遇到這樣,略微復(fù)雜的選擇題時,如果其后端規(guī)則設(shè)計的過于簡單,就很有可能導(dǎo)致把不該過濾的過濾掉,而把非法的內(nèi)容放行,從而我們可以構(gòu)造出存儲型XSS。打亂HTML邊界,讓后端富文本過濾器陷入選擇窘境,這是我們設(shè)計模糊測試模板的原則之一。有哪些內(nèi)容可能會導(dǎo)致富文本內(nèi)容過濾器出現(xiàn)邊界判斷問題?
(1)特殊HTML符號,通過這類明顯的符號,過濾器就可以到HTML標(biāo)簽及其屬性,但這些符號錯誤的時候出現(xiàn)在了錯誤的地點,往往會釀成大禍,如:
=, ”, ’, :, ;, >,
(2)過濾器會過濾刪除的內(nèi)容,我們在邊界填充下面這些元素,過濾器盲目刪除,很有可能導(dǎo)致原本無害的屬性值,掙脫牢籠,成為惡意的屬性和屬性值,如:
expression, alert, confirm, prompt, ,
(3)不可打印字符,如:
\t、\r、\n、\0等不可打印字符
綜上,現(xiàn)在我們已經(jīng)可以用Fuzzer生成一個下面這樣的Payload。幸運的話,或許已經(jīng)可以繞過一些后端邏輯簡單的富文本過濾器了,示例如下:
span/class=/yyyy οnmοuseοver=11111/style="a:exp/*”>*/resion(1);">span>
當(dāng)然,除了邊界區(qū)分問題,富文本過濾器面對著另外兩個勁敵,特殊的進制字符編碼和千奇百怪的字符集。
我們先來說說字符編碼,類似\x22,\40,"等一系列進制編碼,直接當(dāng)作文本內(nèi)容傳遞給后端富文本過濾器,如果處理的辦法?解密后過濾?直接輸出?經(jīng)驗告訴我們,不少過濾器在處理類似特殊的進制編碼時,往往會在進制編碼的特殊HTML符號面前摔個人仰馬翻。于是,像下面這樣一段看似無害化的Payload,在富文本過濾器自作聰明的解密過后,變成了一段跨站腳本:
前:span class=”yyy "οnmοuseοver=alert(1);//”>span>
?=>
后:span class=”yyy“ οnmοuseοver=alert(1);//”>span>
接下來,我們再來說說千奇百怪的字符集,不少富文本編輯器在處理類似“祝”的unicode字符時,會將字符轉(zhuǎn)化成標(biāo)簽,所以在mramydnei報告的一個騰訊郵箱存儲型XSS中,一段無害的Payload逆襲成了有害的跨站腳本:
前:style x="祝" y="Fuzzitup {}*{xss:expression(alert(document.domain))}">
?=>
后:style x=" https:="" res.mail.qq.com="" zh_cn="" htmledition="" images="" emoji32="" 3297.png"="">" y="Fuzzitup {}*{xss上一頁??????:expression(alert(document.domain))}">style>
0x04 模糊測試實戰(zhàn)
正所謂“磨刀不誤砍柴工”,在進行模糊測試實戰(zhàn)之前,我建議,對富文本過濾器的大改過濾規(guī)則和實現(xiàn)原理手動測試一番,了解哪些HTML標(biāo)簽允許被使用,有哪些關(guān)鍵詞出現(xiàn)就會被刪除,又有哪些Payload會觸發(fā)網(wǎng)站存在的WAF,在之后的測試中,針對目標(biāo)網(wǎng)站“個性化”的修改模糊測試模板。
講到這里,相信你已經(jīng)大概了解富文本跨站腳本模糊測試了,不過模糊測試的威力究竟如何呢?我們用實例來做論證:
網(wǎng)易有道云筆記存儲型XSS [進制編碼處理缺陷]
XSS利用技巧(自動觸發(fā)/所有瀏覽器通用)
小米論壇存儲型XSS [進制編碼處理缺陷]
新浪郵箱存儲型XSS [邊界判定缺陷]
QQ郵箱存儲型XSS [字符集處理缺陷]
WooYun: 騰訊郵箱郵件正文存儲型漏洞 "> WooYun: 騰訊郵箱郵件正文存儲型漏洞
QQ郵箱存儲型 XSS [字符集處理缺陷]
0x05 寫在最后
模糊測試只是自動化強制發(fā)現(xiàn)漏洞的一個重要手段,就像自動化漏洞掃描器一樣。我們并不能完全依靠它,在測試過程中,對過濾器結(jié)果進行適時的分析,對模糊測試模板做出合理的改進,不僅能提高模糊測試的效率,還能夠幫助我們挖掘到更多潛在的設(shè)計缺陷。畢竟,機器終究是“死板”的,而人是“靈活”的。
富文本跨站腳本測試之道,就是細(xì)致的模糊測試結(jié)果分析,加上對模糊測試模板的不斷打磨,人與機器的結(jié)合,才會打造出一把真正的“神器”。
?上一頁?????

轉(zhuǎn)載于:https://www.cnblogs.com/xdans/p/5412735.html

總結(jié)

以上是生活随笔為你收集整理的富文本存储型XSS的模糊测试之道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。