淺談xss原理

近日,論壇上面XSS滿天飛,各處都可以見到XSS的痕跡,前段時間論壇上面也出現了XSS的跡象。而後我等小菜不是太懂啊,怎麼辦?沒辦法僅僅有求助度娘跟谷歌這對情侶了。
可以說小菜也算懂了一些。不敢藏私,故發文出來你們一塊學習,討論。



如下是正文:

0x00:xss的來由


記得以前看過一篇文章,這樣來形容XSS 「 假設把瀏覽器看做WEB2.0後時代的操做系統。那麼client腳本就至關於傳統的應用程序,而XSS的攻擊方式事實上就至關於在被攻擊者的系統上運行了一個木馬程序。但這樣的「木馬」有個很是大的缺點。就是沒法像傳統木馬那樣在操做系統中安家。之後還能本身主動運行。 」
這多是對XSS的最好詮釋了吧,但是XSS究竟是什麼?如下就跟小菜來一窺其神奇面容吧。


XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面裏插入惡意html代碼。當用戶瀏覽該頁之時,嵌入當中Web裏面的html代碼會被運行,從而達到惡意攻擊用戶的特殊目的。javascript


爲何會出現XSS呢,這個沒什麼好說的,確定是過濾不嚴,或者就是程序員以爲XSS並無什麼實際的用途,從而忽略了XSS攻擊的產生。比方在一個搜索框裏面,對於輸入數據沒有一點過濾的話。那麼咱們提交如下這條語句

    <script>alert(’test’)</script>


結果是什麼,你們應該都知道,就是頁面彈出了一個對話框。php


我記得當我剛開始對黑客技術產生興趣的時候,那是的XSS還只在於娛樂的地步。

html

0x01:xss的類型


XSS的類型一般是三種:
第一種:反射型XSS
       這種xss,跨站代碼通常存在於某一個連接中。當唄攻擊者訪問這種鏈接時,跨站代碼就被運行,這類跨站代碼通常不會存儲在server上面
另一種:存儲型XSS
        這樣的xss用起來比較方便,跨站代碼會存儲在server上面數據庫中。換句話就是可以持久的進行攻擊。亦稱持久型XSS
第三種:就是基於DOM的XSS
       這是由於client腳本自身的解析不對致使的安全問題

0x02:反射型XSS的攻擊原理


反射型XSS,是最常用,使用最廣的一種方式。

它經過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、運行。它的特色是非持久化,必須用戶點擊帶有特定參數的連接才幹引發。
既然是需要用戶點擊才幹觸發的跨站。那麼這就要考驗你的忽悠水平了,就像前段時間論壇出現的XSS攻擊。就是經過轉帳,而後被攻擊者查看消息從而觸發的一種反射型XSS攻擊
再如:

    http://searchb.dangdang.com/?key=f',true,1);alert(1);//


這個經常逛烏雲的應該都不陌生,這就是一個典型的反射型XSS。需要誘使用戶去點擊該連接。xss代碼並不存儲在服務端。因此攻擊並不能持續。java


常用測試方法:
對整個輸入(特別強調的是。整個HTTP請求都是輸入,數據庫取來的數據事實上也是輸入。程序員

HTTP請求包含GET、POST參數。COOKIE,URL,頭部的REFERER等等)中每個地方都可以例如如下操做,
1.        本身構造一個惟一的串,好比:myxsstestxxxx
2.        將某個輸入項(比方某個參數)替換爲上面的串
3.        查看HTTP對應中是否有這個串。並記錄下來
4.        依據HTML上下文決定,用哪一種類型串來嘗試,嘗試攻擊串,而後又一次提交請求
5.        假設能夠找到對應的攻擊串說明漏洞是存在的 這裏的關鍵在於第四步。因爲server端可能會作一些限制,比方encode或者長度限制。測試的時候需要想辦法看看可否繞過限制。數據庫




0x03:存儲型XSS的攻擊原理


存儲型就是攻擊腳本被存儲到了數據庫或者文件裏,server端(多是別的應用或者別的頁面)在讀取了存儲的內容後回顯了,就是存儲型。

這樣的狀況用戶可能直接打開正常的頁面就會看到被注入了
原理事實上也很是easy
XSS代碼被提交給站點-->站點把XSS代碼存儲進數據庫—>當該頁面再次被請求時。server發送已經被植入XSS代碼的數據給client—>client運行XSS代碼
比較常見的樣例是在留言板上插入XSS代碼,前提固然是留言內容過濾不善
想內容中加入[/code]<script>alert(‘test’)</script>[/code]
這樣就會彈出對話框。固然僅僅要是可以加入內容的地方,你都可以試試XSS,比方說QQ空間的裝扮裏面。有一個本身定義模塊。你可以選擇圖片,而後加入例如如下代碼

    javascript:alert('XSS')"


固然,其可以運行的前提是服務端代碼是這樣寫的

    A=get[a]
    <img src=$a>


利用方法還有很是多。比方現在興起的XSS平臺,新建一個項目,你就可以作很是多事情

編程

0x04:XSS BASED DOM


DOM—based XSS漏洞是基於文檔對象模型Document Objeet Model,DOM)的一種漏洞。

DOM是一個與平臺、編程語言無關的接口,它贊成程序或腳本動態地訪問和更新文檔內容、結構和樣式,處理後的結果可以成爲顯示頁面的一部分。DOM中有很是多對象。當中一些是用戶可以操縱的,如uRI 。location,refelTer等。client的腳本程序可以經過DOM動態地檢查和改動頁面內容。它不依賴於提交數據到server端。而從client得到DOM中的數據在本地運行,假設DOM中的數據沒有通過嚴格確認,就會產生DOM—based XSS漏洞。
DOM—based XSS攻擊源於DOM相關的屬性和方法。被插入用於XSS攻擊的腳本。一個典型的樣例例如如下:
HTTP請求http://www.Xss.com/hello.html?name=test使用下面的腳本打印出登陸用戶test的名字,即

    <SCRIPT>
    var pos=docmnent.URL.indexOf(」name=」)+5;
    document.write (document.URL.substring(pos,document.URL.1ength))。
    < /SCRIPT>


假設這個腳本用於請求http://www.Xss.com/hello.html?瀏覽器

name=<script>alert(‘test’)</script>時,就
致使XSS攻擊的發生。
當用戶點擊這個連接,server返回包括上面腳本的HTML靜態文本,用戶瀏覽器把HTML文本解析成DOM,DOM中的document對象URL屬性的值就是當前頁而的URL。安全

在腳本被解析時,這個URL屬性值的一部分被寫入HTML文本,而這部分HTML文本倒是JavaScript腳本,這使得<script>alert(‘test’)</script>成爲頁面終於顯示的HTML文本。從而致使DOM—base XSS攻擊發生。

xss

0x05: XSS的防範辦法


上面簡單說了一下各類XSS的原理。以及最簡單的利用方法,固然一些高級的XSS利用技巧,這裏不會涉及,授人以魚不如授人以漁嘛。還靠各位去琢磨了。如下咱們來簡單說一下XSS的防範。
現在的XSS如此流行。緣由何在。我想你們應該都知道。就是在輸入的時候沒有作嚴格的過濾,而在輸出的時候。也沒有進行檢查,轉義,替換等
因此防範的方法就是。不信任不論什麼用戶的輸入,對每個用戶的輸入都作嚴格檢查,過濾。在輸出的時候,對某些特殊字符進行轉義,替換等

0x06:淺談CSRF攻擊


事實上以前我一直不知道csrf是什麼東西。直到那次phpmywind被搞掂官網,我才注意到這個攻擊方法。以後呢,經過度娘。谷歌這一對好情侶,慢慢了瞭解了一下
CSRF是僞造client請求的一種攻擊。CSRF的英文全稱是Cross Site Request Forgery,字面上的意思是跨網站僞造請求。這樣的攻擊方式是國外的安全人員於2000年提出,國內直到06年初才被關注。
CSRF的定義是強迫受害者的瀏覽器向一個易受攻擊的Web應用程序發送請求,最後達到攻擊者所需要的操做行爲。
CSRF漏洞的攻擊通常分爲站內和站外兩種類型:
CSRF站內類型的漏洞在必定程度上是由於程序猿濫用$_REQUEST類變量形成的,一些敏感的操做原本是要求用戶從表單提交發起POST請求傳參給程 序。但是由於使用了$_REQUEST等變量,程序也接收GET請求傳參,這樣就給攻擊者使用CSRF攻擊創造了條件。通常攻擊者僅僅要把預測好的請求參數 放在站內一個貼子或者留言的圖片連接裏。受害者瀏覽了這種頁面就會被強迫發起請求。

CSRF站外類型的漏洞事實上就是傳統意義上的外部提交數據問題,通常程序猿會考慮給一些留言評論等的表單加上水印以防止SPAM問題,但是爲了用戶的體驗 性。一些操做可能沒有作不論什麼限制,因此攻擊者可以先預測好請求的參數,在站外的Web頁面裏編寫javascript腳本僞造文件請求或和本身主動提交的表單 來實現GET、POST請求。用戶在會話狀態下點擊連接訪問站外的Web頁面,client就被強迫發起請求。 假設,各位看官想具體瞭解CSRF google it! 這裏不過說了一些簡單的XSS原理。算一個拋磚引玉吧。各位可以跟帖討論,怎樣發揮XSS的最大能力

相關文章
相關標籤/搜索