上次提到的是sql注入,算是較大的安全隱患,今天我們來介紹另外一種較爲嚴重的安全隱患--XSS跨站腳本***。
首先咱們來說什麼是跨站腳本***。它的英文叫“CrossSite Scripting”,通俗點說就是***者向web頁面裏跨站的插入惡意html代碼,那麼當用戶瀏覽該頁的時候,嵌入到web中的html代碼就會被執行。我們經常看到的重定向啊,以及一些釣魚網站,大多數利用的就是這種技術。比如有個廣告,裏邊網址是item.taobao.com/.xxxx的,是某個人在某論壇發的廣告鏈接,你覺得東西很便宜啊,又是淘寶的,有保障,就點擊進去了。其實呢,它會redirect到另一個***者自己的網站,你在上面通過他的接口付款時候,就會不小心被他洗劫一空。
介紹過了,其實老實講,我自己對怎麼***和***的原理也不是特別特別瞭解(大多數時候我們只要知道怎麼測試出來有這個隱患和怎麼防止就ok了)。不過大致原理咱們還是要了解的,後面是我節選自百度空間一篇文章,具體作者和鏈接我都忘記了。。是很久之前存下的,在這先感謝下。大家可以簡單瞭解下其原理。
上面這段既包含了原理,也說了防止手段。算是我看過文章裏比較全面的。那後邊我們進入最重點部分,那就是怎麼去測試XSS跨站腳本***。
大致上可以把XSS***分成三類,Stored XSS、Reflected XSS、Dom-Base XSS。我們逐一介紹下。
首先是Stored XSS,就是存儲式跨站***。這是最爲厲害的一種***方式,也是測試起來相對容易的。存儲式跨站***簡單來說就是***者提交給網站的數據呢會提交併永久保存到服務器的數據庫或者是文件系統等其他地方,之後不做任何編碼操作就會顯示在web頁面上。貌似說的不是很清楚,我們可以舉個例子來說:
比如說一個社交網站或其他可以給在網站中留言的地方,事實上呢,我們在可以留言的地方寫入一段代碼:
這樣這個信息就被存儲到了服務器上,當有其他用戶訪問這個網頁時候,其瀏覽器就會執行這個腳本,從而彈出一個關於cookie的alert。類似下圖所示。
我們就完成一次最簡單的存儲式跨站***。到目前爲止最典型的存儲式跨站***的例子就是05年myspace發現的漏洞,具體情況大家自行google~~~
其次Reflected XSS,反射跨站腳本***。這個是最著名最常見的***手段。所謂反射,就是等着服務器所給的返回。我們在進行測試行依據的就是在自己頁面上的簡單注入。在web客戶端提交了數據後,服務端馬上給這個請求生成返回結果頁,如果結果中包含了未驗證的客戶端輸入數據,那就表示會允許客戶端腳本直接注入到頁面裏,也就出現了這樣一個漏洞。簡單舉個例子,在搜索引擎裏邊,我們如果搜索了一個包含html代碼的字符串,如果返回的字符串仍然沒被編碼,那就是存在XSS漏洞了。呃,我自己說的也比較暈,不知道大家能理解沒有。
這個漏洞乍聽上去比較不嚴重,反正覺得只能在自己頁面上注入代碼嘛,但是其實只要有一些工程學方法,***者就可以誘使其他用戶訪問一個在結果中注入了代碼的url,使***者擁有整個頁面的權限。(具體的工程學方法。。我也不會,要是我會估計我就不在這裏敲字了哈)
剛纔說了三類,最後一類就是基於DOM的XSS***。由於我是做web測試的,這類相對見的比較少,該漏洞多見於客戶端腳本,意思就是如果一個js訪問需要參數的url,並且需要把信息用於自己頁面,信息又未被編碼,就會出現該漏洞。是不是太抽象了?好吧,我簡化一下,我們是不是經常看到一個網站(比如我們論壇)在網址後邊帶個參數(?XXX的),當看到這種情況時候,我們可以在參數後邊加點料,加個<script></script>的,如果加了這個參數之後的結果不被編碼就輸出,那就證明它具有這麼一個漏洞。
舉個例子吧,比如某某網站,我們輸入一個這樣的url去請求:
如果這個腳本被執行了,那麼我們就說他有這樣一個漏洞
(該系列搬運自本人論壇帖~)