Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2553902
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: 系统运维

2006-08-17 14:30:57

跨站脚本(Cross Site Scripting)攻击是指在远程WEB页面的HTML代码中插入恶意的JavaScript,VBScript,ActiveX,HTML,或Flash等脚本,窃取浏览此页面的用户的信息,改变用户的设置,破坏用户数据的攻击技术。跨站脚本攻击在多数情况下不会对服务器和WEB程序的运行造成影响,但对客户端的安全构成严重的威胁,这主要是由于服务器对用户提交的数据过滤不完整造成的。

简单漏洞
我们举个最简单的例子,在动网论坛中提交:
***.com.cn/newbbs/showerr.asp?Errcodes=&action=otherErr 
便能弹出包含自己Cookie信息的对话框,
而提交:
***.com.cn/newbbs/showerr.asp?Errcodes=&action=otherErr 
就能重定向到xxx.com。 
由于在返回"Errcodes"变量的值给客户端时,脚本没有进行任何编码或过滤恶意代码,当用户访问嵌入恶意"Errcodes"变量数据链接时,会导致脚本代码在用户浏览器上执行,从而导致用户资料泄露等后果。比如下面的链接:
***.com.cn/newbbs/showerr.asp?Errcodes=&action=otherErr 
xxx.asp用于收集后边跟的参数,而这里参数指定的是Document Cookie,也就是使用户的Cookie值提交到了xxx.asp中。
以上的例子说明了CSS漏洞的存在,况且还可能实现不同的攻击。例如在一个News.asp中调入以上链接的框架,便能使用户在不知觉间交出自己的Cookie。当然,跨站脚本从来就不仅局限于得到Cookie的一功能。只要HTML代码能做到的,跨站脚本执行漏洞基本都能做到。例如,在一个WEB论坛用户注册页面中有以下的内容:


1.gif
2.gif
……
$face的值按照程序员的意图应仅设定在下拉菜单中供用户选择,但是事实上我们可以通过POST的方法直接指定$face的值骗过程序:
"><"&data=......
程序接到$face的值后未经过任何处理,便将它显示出来:
" >
显然,返回的页面中将会带上了一个零宽度的页面,这样造成的后果是不言而喻的。

漏洞实例
大家最关心的大概要算这个问题了,下面列举的漏洞危害可能并不全面,但应该是比较典型的:
获取用户Cookie中的敏感数据。
屏蔽页面特定信息。
伪造页面信息。
拒绝服务攻击。
突破外网内网不同安全设置。
与其它漏洞结合,修改系统WEB设置,查看系统文件,执行系统命令等。
一般来说,上面的危害还经常伴随着页面变形的情况。而所谓跨站脚本执行漏洞,也就是通过别人的网站达到攻击的效果,也就是说,这种攻击能在一定程度上隐藏身份。
1.伪造页面
如图2是一个伪造页面信息的例子,原理很简单:由于没有过滤$msg的内容,可以通过提交"?msg=要显示的内容"来伪造页面。IE对GET的长度有限制,你可以自行创建一个表单再用POST的方法提交,如:

跨站脚本(Cross Site Scripting)
伪造页面的一个例子">



以上的代码运行后仅显示出一个普通的"查看"按钮,由于我们把"msg"的Input Type设置为"hidden",从而将POST的内容隐藏了起来。以后,当用户点击"查看"按钮时,将会看到如图2所示的的伪造页面。

图2

2.获取其他用户Cookie中的敏感数据
既然CSS漏洞主要是由于服务器对用户提交的数据过滤不完整造成的,那么利用方法关键是找到可以向服务器写入信息的脚本。下面以WDB论坛为例子说明。
在WDB论坛中,当用户访问Wdbread.php文件时,返回的页面左侧会显示出发贴者"级别"、"来自"等信息,而这些信息是有作者通过Profile.php文件设定的。Wdbread.php返回页面显示用户"来自"的地方有这样一段代码:

级别:侠客


来自:

门派:无门无派 

经验值:49 点
……
而Profile.php返回页面有以下的代码:

中国
安哥拉
澳大利亚
……
如果我没有猜错的话,Wdbread.php的处理用户"来自"的PHP代码应该是这样的:
echo "";
?>
于是我把Profile.php返回的页面保存到本地,将其中的一个"userflag"值改为China.gif>html代码
图3
这时候再打开自已发过的帖,嵌入里面的代码便执行了(如图4所示)。

图4
提示:当WEB的脚本禁止从外部提交数据时,你可以用NC或者Achilles间接修改POST的数据。
3.修改WEB设置
笔者以DVBBS为例,登陆dvbbs/modifyadd.asp,再将该页面保存到本地,用记事本打开,修改表单中的:action="modifyadd.asp?action=updat"为: action=dvbbs/modifyadd.asp?action=updat,再将"method=post"一句改为"method=get",点击"更新"后得到类似以下的URL:
%B8%FC+%D0%C2
修改当前的URL为:
%B8%FC+%D0%C2
最后再把这个URL伪装一下让论坛的其他用户点击,或者将链接在一个Main.htm上设置成零宽度的框架:

我想,以后只有论坛上正在登陆的用户打开Main.htm,那么他的用户资料就会被更改了。

CSS漏洞的利用方法是多种多样的,建议你自己在网络上找一些相关的资料学习,如果有不明白的地方,可以到hacker.com.cn的论坛上交流。关于CSS漏洞的防范,从程序员来说,过滤或转换用户提交数据中的HTML代码,然后限制用户提交数据的长度就可以了;作为普通用户,不要轻易访问别人给你的链接,再禁止浏览器运行JavaScript和ActiveX代码,整个世界就清净了!
阅读(2502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~