qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          Web十大安全隱患之XSS跨站腳本

          上次提到的是sql注入,算是較大的安全隱患,今天我們來(lái)介紹另外一種較為嚴(yán)重的安全隱患--XSS跨站腳本攻擊。
            首先咱們來(lái)說(shuō)什么是跨站腳本攻擊。它的英文叫“CrossSite Scripting”,通俗點(diǎn)說(shuō)就是攻擊者向web頁(yè)面里跨站的插入惡意html代碼,那么當(dāng)用戶瀏覽該頁(yè)的時(shí)候,嵌入到web中的html代碼就會(huì)被執(zhí)行。我們經(jīng)常看到的重定向啊,以及一些釣魚網(wǎng)站,大多數(shù)利用的就是這種技術(shù)。比如有個(gè)廣告,里邊網(wǎng)址是item.taobao.com/.xxxx的,是某個(gè)人在某論壇發(fā)的廣告鏈接,你覺(jué)得東西很便宜啊,又是淘寶的,有保障,就點(diǎn)擊進(jìn)去了。其實(shí)呢,它會(huì)redirect到另一個(gè)攻擊者自己的網(wǎng)站,你在上面通過(guò)他的接口付款時(shí)候,就會(huì)不小心被他洗劫一空。
            介紹過(guò)了,其實(shí)老實(shí)講,我自己對(duì)怎么攻擊和攻擊的原理也不是特別特別了解(大多數(shù)時(shí)候我們只要知道怎么測(cè)試出來(lái)有這個(gè)隱患和怎么防止就ok了)。不過(guò)大致原理咱們還是要了解的,后面是我節(jié)選自百度空間一篇文章,具體作者和鏈接我都忘記了。。是很久之前存下的,在這先感謝下。大家可以簡(jiǎn)單了解下其原理。
            傳統(tǒng)的跨站利用方式一般都是攻擊者先構(gòu)造一個(gè)跨站網(wǎng)頁(yè),然后在另一空間里放一個(gè)收集cookie的頁(yè)面,接著結(jié)合其它技術(shù)讓用戶打開(kāi)跨站頁(yè)面以盜取用戶的cookie,以便進(jìn)一步的攻擊。這種方式太過(guò)于落后,對(duì)于弊端大家可能都知道,因?yàn)榧幢隳闶占搅薱ookie你也未必能進(jìn)一步滲透進(jìn)去,多數(shù)的cookie里面的密碼都是經(jīng)過(guò)加密的,如果想要cookie欺騙的話,同樣也要受到其它的條件的限約。而另一種思路,則從一定程度上解決上述的問(wèn)題。比較成熟的方法是通過(guò)跨站構(gòu)造一個(gè)表單,表單的內(nèi)容則為利用程序的備份功能或者加管理員等功能得到一個(gè)高權(quán)限。下面將詳細(xì)的介紹這種技術(shù)。
            尋找跨站漏洞
            如果有代碼的話比較好辦,我們主要看代碼里對(duì)用戶輸入的地方和變量有沒(méi)有做長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符是否做過(guò)濾。還有要注意的是對(duì)于標(biāo)簽的閉合,像測(cè)試QQ群跨站漏洞的時(shí)候,你在標(biāo)題處輸入<script>alert(‘test’)</script>,代碼是不會(huì)被執(zhí)行的,因?yàn)樵谠创a里,有其它的標(biāo)簽未閉合,如少了一個(gè)</script>,這個(gè)時(shí)候,你只要閉合一個(gè)</script>,代碼就會(huì)執(zhí)行,如:你在標(biāo)題處輸入</script><script>alert(‘test’)</script>,這樣就可以彈出一個(gè)test的框。
            如何利用
            跨站腳本(Cross-site scripting,XSS)漏洞是Web應(yīng)用程序中最常見(jiàn)的漏洞之一。如果您的站點(diǎn)沒(méi)有預(yù)防XSS漏洞的固定方法,那么就存在XSS漏洞。這個(gè)利用XSS漏洞的病毒之所以具有重要意義是因?yàn)椋ǔky以看到XSS漏洞的威脅,而該病毒則將其發(fā)揮得淋漓盡致。
            這個(gè)利用XSS漏洞的蠕蟲(chóng)病毒的特別之處在于它能夠自我傳播。myspace.com上的一個(gè)用戶希望自己能夠在網(wǎng)站的友人列表上更“受歡迎”。但是該用戶不是通過(guò)普通的方法來(lái)結(jié)交新朋友,而是在自己的個(gè)人信息中添加了一些代碼,導(dǎo)致其他人在訪問(wèn)他的頁(yè)面時(shí),會(huì)不知不覺(jué)地利用XSS漏洞將他加為好友。更惡劣的是,它會(huì)修改這些人的個(gè)人信息,使其他人在訪問(wèn)這些被感染的個(gè)人信息時(shí),也會(huì)被感染。由于這種呈指數(shù)傳播的方式,這種病毒才很快就被發(fā)現(xiàn)。
            很難預(yù)防站點(diǎn)中的XSS。因此一定要認(rèn)真檢查您的應(yīng)用程序是否存在XSS漏洞。此外,WebLogic Server的encodeXSS()也可以有所幫助。可以試著針對(duì)所有牽涉到使用encodeXSS()或其他某個(gè)篩選方法的輸出找出一種編碼模式——找出對(duì)一種編碼模式來(lái)說(shuō)不正確的應(yīng)用程序往往要比找出XSS漏洞要容易的多。更重要的是,不要認(rèn)為,就因?yàn)閄SS漏洞是一個(gè)常見(jiàn)問(wèn)題,所以它危害不大。
            之所以出現(xiàn)XSS漏洞有兩個(gè)原因。首先,HTML沒(méi)有明確區(qū)分代碼和數(shù)據(jù)。無(wú)法確定指出“這個(gè)字符串表示的是數(shù)據(jù)”。您可以將其放入引號(hào)中,但是數(shù)據(jù)是否包含引號(hào)呢?……其次,程序在將用戶數(shù)據(jù)發(fā)送回瀏覽器時(shí)沒(méi)有進(jìn)行有效的轉(zhuǎn)義。這導(dǎo)致包含有(例如說(shuō))引號(hào)的數(shù)據(jù)被放入頁(yè)面中,從而引發(fā)了問(wèn)題。而AJAX要提供的好處是,它包含一個(gè)專用渠道XML鏈接,其中全是數(shù)據(jù)而沒(méi)有代碼。這樣,就有可能讓客戶端AJAX引擎負(fù)責(zé)對(duì)字符串進(jìn)行轉(zhuǎn)義、檢測(cè)不正確的值,等等。說(shuō)是這么說(shuō),直到AJAX更為成熟(可能也更為標(biāo)準(zhǔn)化)之前,它只會(huì)導(dǎo)致錯(cuò)誤的編程和安全漏洞。
            XSS漏洞可能造成的后果包括竊取用戶會(huì)話,竊取敏感信息,重寫Web頁(yè)面,重定向用戶到釣魚網(wǎng)站等,尤為嚴(yán)重的是,XSS漏洞可能使得攻擊者能夠安裝XSS代理,從而攻擊者能夠觀察到該網(wǎng)站上所有用戶的行為,并能操控用戶訪問(wèn)其他的惡意網(wǎng)站。

            對(duì)于XSS漏洞,我們有兩種常見(jiàn)的措施,第一種就是消除漏洞,簡(jiǎn)而言之就是在輸出頁(yè)面上不提供任何用戶的輸入信息;另外一種就是想辦法來(lái)抵御這種漏洞,可以采用對(duì)所有用戶的輸入編碼后再輸出(可以用OWASP的ESAPI),也可以對(duì)所有用戶輸入進(jìn)行“白名單”驗(yàn)證,另外,OWASP還提供了AntiSamy對(duì)HTML頁(yè)面做優(yōu)化以消除這個(gè)漏洞。
            上面這段既包含了原理,也說(shuō)了防止手段。算是我看過(guò)文章里比較全面的。那后邊我們進(jìn)入最重點(diǎn)部分,那就是怎么去測(cè)試XSS跨站腳本攻擊。
            大致上可以把XSS攻擊分成三類,Stored XSS、Reflected XSS、Dom-Base XSS。我們逐一介紹下。
            首先是Stored XSS,就是存儲(chǔ)式跨站攻擊。這是最為厲害的一種攻擊方式,也是測(cè)試起來(lái)相對(duì)容易的。存儲(chǔ)式跨站攻擊簡(jiǎn)單來(lái)說(shuō)就是攻擊者提交給網(wǎng)站的數(shù)據(jù)呢會(huì)提交并永久保存到服務(wù)器的數(shù)據(jù)庫(kù)或者是文件系統(tǒng)等其他地方,之后不做任何編碼操作就會(huì)顯示在web頁(yè)面上。貌似說(shuō)的不是很清楚,我們可以舉個(gè)例子來(lái)說(shuō):
            比如說(shuō)一個(gè)社交網(wǎng)站或其他可以給在網(wǎng)站中留言的地方,事實(shí)上呢,我們?cè)诳梢粤粞缘牡胤綄懭胍欢未a:
            <script>alert(document.cookie)</script>
            這樣這個(gè)信息就被存儲(chǔ)到了服務(wù)器上,當(dāng)有其他用戶訪問(wèn)這個(gè)網(wǎng)頁(yè)時(shí)候,其瀏覽器就會(huì)執(zhí)行這個(gè)腳本,從而彈出一個(gè)關(guān)于cookie的alert。
            我們就完成一次最簡(jiǎn)單的存儲(chǔ)式跨站攻擊。到目前為止最典型的存儲(chǔ)式跨站攻擊的例子就是05年myspace發(fā)現(xiàn)的漏洞,具體情況大家自行g(shù)oogle~~~
            其次Reflected XSS,反射跨站腳本攻擊。這個(gè)是最著名最常見(jiàn)的攻擊手段。所謂反射,就是等著服務(wù)器所給的返回。我們?cè)谶M(jìn)行測(cè)試行依據(jù)的就是在自己頁(yè)面上的簡(jiǎn)單注入。在web客戶端提交了數(shù)據(jù)后,服務(wù)端馬上給這個(gè)請(qǐng)求生成返回結(jié)果頁(yè),如果結(jié)果中包含了未驗(yàn)證的客戶端輸入數(shù)據(jù),那就表示會(huì)允許客戶端腳本直接注入到頁(yè)面里,也就出現(xiàn)了這樣一個(gè)漏洞。簡(jiǎn)單舉個(gè)例子,在搜索引擎里邊,我們?nèi)绻阉髁艘粋€(gè)包含html代碼的字符串,如果返回的字符串仍然沒(méi)被編碼,那就是存在XSS漏洞了。呃,我自己說(shuō)的也比較暈,不知道大家能理解沒(méi)有。
            這個(gè)漏洞乍聽(tīng)上去比較不嚴(yán)重,反正覺(jué)得只能在自己頁(yè)面上注入代碼嘛,但是其實(shí)只要有一些工程學(xué)方法,攻擊者就可以誘使其他用戶訪問(wèn)一個(gè)在結(jié)果中注入了代碼的url,使攻擊者擁有整個(gè)頁(yè)面的權(quán)限。(具體的工程學(xué)方法。。我也不會(huì),要是我會(huì)估計(jì)我就不在這里敲字了哈)
            剛才說(shuō)了三類,最后一類就是基于DOM的XSS攻擊。由于我是做web測(cè)試的,這類相對(duì)見(jiàn)的比較少,該漏洞多見(jiàn)于客戶端腳本,意思就是如果一個(gè)js訪問(wèn)需要參數(shù)的url,并且需要把信息用于自己頁(yè)面,信息又未被編碼,就會(huì)出現(xiàn)該漏洞。是不是太抽象了?好吧,我簡(jiǎn)化一下,我們是不是經(jīng)常看到一個(gè)網(wǎng)站(比如我們論壇)在網(wǎng)址后邊帶個(gè)參數(shù)(?XXX的),當(dāng)看到這種情況時(shí)候,我們可以在參數(shù)后邊加點(diǎn)料,加個(gè)<script></script>的,如果加了這個(gè)參數(shù)之后的結(jié)果不被編碼就輸出,那就證明它具有這么一個(gè)漏洞。
            舉個(gè)例子吧,比如某某網(wǎng)站,我們輸入一個(gè)這樣的url去請(qǐng)求:
            http://server.com/XXX.php?<SCRIPT>alert(“Cookie”+document.cookie)</SCRIPT>
            如果這個(gè)腳本被執(zhí)行了,那么我們就說(shuō)他有這樣一個(gè)漏洞

          posted on 2013-12-06 11:12 順其自然EVO 閱讀(252) 評(píng)論(0)  編輯  收藏 所屬分類: 安全性測(cè)試

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 孝感市| 东方市| 普陀区| 河北区| 胶州市| 嫩江县| 枣庄市| 正安县| 德昌县| 武山县| 芮城县| 长泰县| 进贤县| 明水县| 长丰县| 上虞市| 海丰县| 滨州市| 固始县| 浦东新区| 鄂托克前旗| 汉川市| 四平市| 洪湖市| 湖州市| 合水县| 封丘县| 大洼县| 商水县| 奇台县| 长沙县| 兰坪| 阜阳市| 肇庆市| 普洱| 昌平区| 新巴尔虎右旗| 夏河县| 科技| 贺兰县| 庆阳市|