天天看點

反射型 XSS

反射型XSS

科普型paper,大牛略過。--:

在Web2.0技術的發展下越來越多的計算工作被放到用戶端處理,由于程式員的疏忽,導緻了許多的安全漏洞。XSS屬于比較常見的一種,在前幾年XSS還并不怎麼被人重視,但如今,随着XSS漏洞的危害日益增大,如校内和baidu空間前陣子的XSSWORM等等,其危害之大也引起了大家的重視。

XSS的類型大體分為三種:反射型XSS、持久型XSS以及DOMXSS,相比之下,後兩種的利用要比前者友善許多。甚至許多人認為反射型的XSS是雞肋,因為其利用起來很不友善,但在安全技術飛速發展的今天,雞肋也有變雞翅的一天。下面我們來看看什麼是反射型XSS。

什麼是反射型XSS

XSS又叫CSS(CrossSiteScript),跨站腳本攻擊。它指的是惡意攻擊者往Web頁面裡插入惡意html代碼,當使用者浏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,進而達到惡意攻擊使用者的特殊目的。

那麼什麼是反射型XSS呢?

如"http://www.jpl.nasa.gov/about_JPL/maps.cfm?departure=lax%22%3Cimg%20src=k.png%20onerror=alert(%22XSSed%20by%20sH%22)%20/%3E"這樣需要欺騙使用者自己去點選連結才能觸發XSS的是反射型XSS,如在論壇發貼處的XSS就是持久型的XSS。

非持久性XSS(Reflectedcross-sitescripting),是我們通常所說的反射型XSS,也是最常用,使用最廣的一種方式。它通過給别人發送帶有惡意腳本代碼參數的URL,當URL位址被打開時,特有的惡意代碼參數被HTML解析、執行。它的特點是非持久化,必須使用者點選帶有特定參數的連結才能引起。

持久性XSS(Persistentcross-sitescripting),指的是惡意腳本代碼被存儲進被攻擊的資料庫,當其他使用者正常浏覽網頁時,站點從資料庫中讀取了非法使用者存入非法資料,惡意腳本代碼被執行。這種攻擊類型通常在留言闆等地方出現。

很多人非常鄙視非持久性XSS(反射型XSS),認為這種XSS隻能依靠欺騙的手段去騙人點選,才能讓攻擊正常實施起來。其實讓反射型XSS變得持久的方法,已經出現過好多次了。比如利用applet、利用flash的AS腳本、利用IE的Ghost頁面,CrossIframeTrick等等。

反射型XSS的常見利用方法

既然是“需要欺騙使用者自己去點選連結才能觸發XSS”,那利用反射型XSS豈不是隻有去忽悠使用者這一種方法?放在幾年前也許是這樣的,現如今,就要上演雞肋變雞翅的好戲了!

[1]欺騙

不得不說這是最簡單有效的利用方法了,但對忽悠的能力有嚴格的要求,不然使用者不會那麼容易上鈎的。其次,現在的使用者都有了一定的安全意識,也不是那麼好騙了。以上面提到的連結為例,由于是NASA網站的跨站,大家完全可以在一些天文愛好者聚集的群裡發類似這樣的消息,如:“美國航空航天局公布最新UFO照片”然後加上我們的連結。由于是NASA的連結(現在連國小生都知道NASA是幹什麼的),我想應該會有一部分人相信而去點選進而達到了我們的目的,這個反射型的XSS被觸發。但如果不是這麼碰巧呢?請往下看。

[2]ClickJacking

在幾年前的OWASP會議上,ClickJacking這種攻擊方式被提了出來。簡單來說ClickJacking大緻是這麼回事:

1.表現為點選某個連結或button時,實際上是點選到别的地方去了(劫持連結)

2.不一定需要javascript,是以noscript也擋不住,但是如果有javascript會讓事情更簡單

3.攻擊是基于DHTML的

4.需要攻擊者一定程度上控制頁面

是以,我們隻要将使用者的點選劫持到我們的連結上去就行了,而且ClickJacking是可以跨域的哦~

具體應用示例大家去google下就有了。

[3]結合CSRF技術

CSRF是僞造用戶端請求的一種攻擊,CSRF的英文全稱是CrossSiteRequestForgery,字面上的意思是跨站點僞造請求。這種攻擊方式是國外的安全人員于2000年提出,國内直到06年初才被關注。

[4]CrossIframeTrick

先講講這種攻擊能夠達成什麼效果:

1.跨域執行腳本(IE、Firefox)

2.把非持久性XSS變成持久性XSS-->!!!

3.跨頁面執行腳本

[5]反轉雅典娜---配合Anehta的回旋镖子產品

什麼是Anehta?Anehta是一個跨站腳本攻擊(XSS)的利用平台。功能子產品化,開發者可以單獨為anehta開發各種各樣的子產品,以滿足獨特的需求。Anehta中有許多的具有創意的設計,回旋镖子產品(Boomerang),就是其中一個。回旋镖子產品的作用,是為了跨域擷取本地cookie,隻是在站點上有一個XSS,種類不限,不管是反射型XSS,還是持久型XSS,都可以為我們工作。

這時,反射型XSS的餘熱就被充分的發揮了。

DVWA(DamnVulnerableWebApplication)DVWA是用PHP+Mysql編寫的一套用于正常WEB漏洞教學和檢測的WEB脆弱性測試程式。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。

下面簡單的以dvwa裡面反射型XSS漏洞的三種等級代碼來說一下代碼審計。

首先比較low、medium、high三種級别的php代碼:

<a href="http://blog.51cto.com/attachment/201310/215733643.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/215735561.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/215739668.png" target="_blank"></a>

通過對三份代碼的比較,我們發現media的代碼比low的代碼增加了一個&lt;script&gt;的過濾,在送出後,我們發現&lt;script&gt;被過濾轉意了,而high的代碼則是使用了dhtmlspecialchars()函數,htmlspecialchars()函數把一些預定義的字元轉換為HTML實體。

預定義的字元是:

&amp;(和号)成為&amp;amp;

"(雙引号)成為&amp;quot;

'(單引号)成為&amp;#039;

&lt;(小于)成為&amp;lt;

&gt;(大于)成為&amp;gt;

現在我們來對反射型的XSS三種級别的漏洞進行測試

在low裡,未做任何的驗證

直接送出&lt;script&gt;alert(/xss/)&lt;/script&gt;測試

<a href="http://blog.51cto.com/attachment/201310/215741108.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/215743213.png" target="_blank"></a>

在media裡,隻過濾了&lt;script&gt;,那麼我們可以對它繞過去

我們可以送出&lt;SCRIPT&gt;alert('xss')&lt;/SCRIPT&gt;

或者&lt;scri&lt;script&gt;pt&gt;alert('xss')&lt;/script&gt;

<a href="http://blog.51cto.com/attachment/201310/215746362.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/215749892.png" target="_blank"></a>

對于high的XSS,用了htmlspecialchars,不知道你能不能用什麼方法繞過,如果無法繞過可以參考Discuz的dhtmlspecialchars()函數:)

淺析Anehta回旋镖子產品工作原理

既然提到了Anehta的Boomerang子產品,那就簡單說說吧。

Boomerang的工作原理:我們知道,浏覽器被XSS攻擊後,攻擊者可以用js或其他腳本控制浏覽器的行為。這時候如果我們強制浏覽器去通路站點B上一個存在XSS漏洞的頁面,就可以繼續用B站上的XSS_B控制使用者的浏覽器行為;那麼把整個過程結合起來,簡單表示如下:

victimBrowser---&gt;siteA,XSS_A----redirectto----&gt;SiteB,XSS_B-----redirectsomewhere---&gt;.....

在IE中,iframe、img等标簽都是攔截本地cookie的。需要使用不攔截cookie的比如window.open等方法,但是window.open會被IE攔截彈出視窗,是以axis牛在Boomerang中使用了表單送出,構造一個form,向siteB送出,然後再從SiteB導入一個XSSB,擷取了cookie後,再通過表單送出,跳轉回原來的SiteA.如果在SiteB上,使用XSS_B再将頁面重新定向回SiteA,那麼對于使用者來說,就是簡單的閃了一下,非常具有欺騙性,整個過程就像用回旋镖扔出去打了一下B一樣。

但其實這并沒有把反射型XSS真正的變成持久型的XSS,隻是反射型XSS的一種攻擊方式而已,也沒有跨域,而是URL重定向轉了一圈,跳了一圈又回來了。但這确實是讓反射型XSS得到了充分的利用,達到了我們的目的。axis牛的這種思路非常值得我們學習!

本文隻總結了常見的反射型XSS利用的方法,但都是簡單的提了下,讓大家見到反射型XSS時能想到這些(貌似要都詳細寫出來就太多了--:),如有不足之處還請各位見諒。

     本文轉自Tar0 51CTO部落格,原文連結:http://blog.51cto.com/tar0cissp/1305995,如需轉載請自行聯系原作者

繼續閱讀