XSS全解析—初探

前些時間準備面試的時候一直會遇到這個XSS,寥寥幾句話好像很簡單,後來看到同窗的《XSS跨站腳本攻擊剖析與防護》這本書,稍微翻看了一下,其中的學問仍是挺多的。這系列的文章就當作讀書筆記吧。javascript

什麼是XSS

聽過不少道理,固然不少人都已經知道XSS是個啥,跨站腳本(Cross-Site Scripting),因爲它前面有個老大哥CSS擺在那兒,就只能叫XSS了。官方是這麼說的"A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same-origin policy."「一種可能會被攻擊者用來 經過 好比同源策略 來獲取用戶權限的跨站腳本。」
通俗點來講,好比你在瀏覽百度的時候,假設百度沒作任何安全策略(固然這是不可能的),攻擊者對百度的登錄按鈕作了點修改,你登錄的時候,它把你登錄的信息都發送到攻擊者那兒去了,GG,2個T的學習資料沒了。這還算好的,給你的花旗銀行網站來個這玩意,2個億沒了。php

XSS的分類

反射型XSS

也叫作非持久性、參數性跨站腳本,顧名思義,攻擊者製做了一個含有惡意代碼的url,好比java

http://www.test.com/search.ph...="><script>alert("xss")</script>
(這個算惡意比較小的,要是在裏面獲取你的cookie程序員

而後攻擊者給你發了個連接,「大胸妹妹正在直播,邀請您觀看。」
圖片描述面試

你們能夠搭個DVWA本身玩一下嘛,別的漏洞也有,就是別用過高級的瀏覽器,這時候深惡痛絕的IE就該上場了,時候表演真正的技術了。
「我不服,就這URL我還不一眼就看出來有毛病?」
「http%3A//www.test.com/search.php%3Fkey%3D%22%3Cscript%3Ealert%28%22xss%22%29%3C/script%3E%22,繼續裝逼。」shell

持久型XSS

至關於存儲型跨站腳本。

來看看有什麼效果(想一想還有點小激動呢)
數據庫

固然了這不是你的鍋,但若是這個網站是你搭的,那你等着GG吧。若是這個玩意兒一直沒有被搞掉,而攻擊者給你來了10000個這樣的評論,每一次刷新後都會來10000下,想一想會發生什麼吧。編程

XSS構造剖析

繞過XSS-Filter

固然大部分的程序員兒是不會像我這麼挫的,正常狀況下基本都會在Web應用中設計一個XSS Filter,一些白名單、黑名單什麼的來過濾掉大胸妹。那有沒有能過濾掉全部大胸妹的Filter呢?sorryno.jpg瀏覽器

咱們有不少繞過Filter的方法:安全

1)利用<>標記注射代碼

前面咱們寫的大胸妹,哦不是,代碼都是這樣的,很少說了。

2)利用HTML標籤屬性執行XSS

<table background="javascript:alert(/XSS/)"></table>
<img src="javascript:alert('XSS')">;

這玩意兒呢對咱們這些使用Canary、Nighty的人來講是沒有任何威脅的?,固然對一些非功能須要還在使用IE6的山頂洞人仍是有點威脅的。

3)空格回車Tab

加入你在你的黑名單里加了'javascript',而後說這下沒辦法來寫腳本了吧。對不起,沒用。
<img src="java script:alert('XSS')">再次GG。這玩意兒涉及到一點js和瀏覽器引擎解析的問題。咱們知道

var a = daxiongmei
var b = "kan na ge daxiongmei"

這樣雖然沒有分號不像咱們這些規範的程序員的編程習慣,但它是沒毛病的並且很Geek,那這樣呢?

var a 
= 'kan na ge daxiongmei;
alert(a);

也是能夠的!由於引擎並不會把換行符當作一個完整語句的終點(上面的能夠是由於引擎已經意識到一個完整的語句了),它會繼續處理後面發現的內容,知道一個分號出現或者這個語句變成一個完整的語句。

4)對標籤屬性值轉碼

那我處理輸入的時候.split(" ").join("")行了吧,對不起仍是不行。
還記得大寫字母A的ASCII碼是多少嗎,不記得先向你的老師說聲對不起又還給您了。
說正事,HTML是支持ASCII碼形式的。咱們把上面的代碼換成這樣。

<img src="javascrip&#116&#58alert("XSS")>;

GG
因此最好把這些字符也給過濾了吧。

5)產生本身的事件

這個和上面的第二點有點相似,只不過此次把屬性換成事件,像這樣:

<img src="#" onerror=alert(/xss/)>

onerror換成onclick,onblur什麼都是能夠的。

6)利用CSS跨站

CSS也能夠用來跨站,想的起來是什麼嗎?方式還挺多的

<div style="backgroun-image:url(javascript:alert('XSS'))"></div>

或者用@important引入,引入文件寫個xss,就是這麼簡單。你說咱們名字簡寫都同樣的,相煎何太急呢。

利用字符串編碼

其實以前咱們已經幾回提到了用字符串編碼來繞過Filter的方法,因爲js支持Unicode、escapes、十六進制、八進制等編碼,還有不少加密編碼,防止XSS變得很麻煩,心累。

拆分跨站法

可能有的同窗要想好事兒了,你每次攻擊我都要寫那麼長的代碼,我限制你個字符輸入字數爲好比30個不就好了嗎,你寫兩個script標籤都要17個字符了。Naive

<script>z='document.'</script>
<script>z=z+'write('</script>
...
<script>eval(z)</script>

GG

Shellcode的調用

有幾個概念咱們先來了解一下。
【Shellcode】
這玩意兒呢一開始是指溢出程序和蠕蟲病毒的核心,其實看單詞就能看出來了,就是一個利用漏洞執行時的代碼。在咱麼這兒呢,就是指XSS利用代碼。
【Exploit】
翻譯:利用。這玩意我我不知道怎麼解釋,「一般表示完整編寫好的漏洞利用工具」,總之記住Exploit每每包含了Shellcode。
payload、shellcode、exp、poc怎麼區別?
【POC】
Proof of Concept,是一段證實漏洞存在的程序代碼片斷。

動態調用遠程JavaScript

其實這和JSONP有點相似,在url後面跟個script標籤,標籤裏引入遠程的js文件,這文件不是個好東西,恩差很少就是這樣。

使用window.location.hash

知道location.hash獲取什麼嗎?好比咱們有個url:http://domain/#admin, location.hash獲取的就是'#'後面的東西,這裏就是admin。那location.hash怎麼用到咱們的XSS裏面呢?

http://www.bug.com/veiw.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')"

應該都能看懂我就很少說了啊。

XSS Downloader

介紹另一種存儲和調用Shellcode的方法,把它存儲到網站的數據庫中個,而後再把它下載下來執行。簡單說呢,就是咱們寫了個XSS的下載器,把這個下載器放在網站的某個頁面,再用Ajax什麼的來向這個網站發送請求,執行了返回的數據,返回的是啥?Shellcode。

備選存儲技術

瀏覽器的存儲技術有哪些?相信通過校招的同窗都應該不陌生。Cookie、Flash、UserData、localStorage等。既然這些玩意兒都能存儲數據,那Shellcode呢,固然也能夠。


好了第一章就到此結束了。原本說的只用1天完成的,沒想到各類事兒拖了兩天,enjoy。固然確定大部分都不enjoy的,歡迎提意見。

相關文章
相關標籤/搜索