您的位置:首页 > 其它

跨站脚本之深入研究

2007-12-06 15:08 141 查看
跨站脚本攻击是指在远程WEB页面的html代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行。跨站脚本攻击在网上最常见的应用方法是在某个论坛的ubb嵌入图像代码中写入一条javascript语句,当用户访问这个图像代码时就会有一个asp或php等服务器类型脚本文件来自动收集他的cookie信息。但这种利用方法有很多弊处,列举最重要三条:一是跨站攻击者需要有一个支持asp或php等权限的空间来放他的脚本文件。但现在网上免费空间是越来越少了,有asp功php权限的免费空间更是云深不知处;二是访问者访问攻击者构造的的论坛贴子时会弹出另一个ie浏览器窗口,其恶意用心简直是路人皆知。三是在有的论坛上攻击者收集到的并不是访问者的cookie信息,而是他的session id,让攻击者构造cookie欺骗时撒手无策。针对这三个提问,我深入研究了一下跨站技巧,可以说完美解决了全部问题,现在我就以wdb论坛的若尘美化版为例子撰文如下。
  一、跨站攻击不需要asp或php脚本的解决办法。
  网上最常见的跨站攻击方法是在论坛发贴时写入这样一条语句:
  其中kuzhan.php的源码如下:
<?php
$info = getenv("QUERY_STRING");
if ($info) {
$fp = fopen("lcx.txt","a");
fwrite($fp,$info."/n");
fclose($fp);
}
?>
当访问者浏览攻击者所在发的贴子时,kuazhang.php脚本里指定的lcx.txt就会收集访问者在这个论坛的cookie信息。其实,我们不用kuazhan.php也可以收集到cookie信息的。每个功能完整的论坛都会有一个短消息发送,我们完全可以用论坛里自带的短消息收件箱来接收cookie。像笔者的小论坛海阳顶端网的url是http://smallhome.51.net/lcx/wdb/index.php,发送短消息的url是http://smallhome.51.net/lcx/wdb/messanger.php?job=write图1,我们来看一下接收短消息的url是什么。将这个url文件保存到本地为messanger_php.htm,用记事本打开messanger_php.htm,找到<FORM action=messanger.php method=post>这一行改为<FORM action=http://smallhome.51.net/lcx/wdb/messanger.php method=get>,然后再打开messanger_php.htm,写入如图数据图2,点提交按扭就会得到这串url数据http://smallhome.51.net/lcx/wdb/messanger.php?ruser=lcx&title=title&content=message&job=write&step=2。图3。在这串数据里很明显可以看到短消息的接收人是lcx,短消息标题是title,短消息内容是messgae。得到这串数据后,我们将构造的跨站语句改造如下:
只要我以lcx这个id登陆论坛后,在贴子里写入这条语句,访问这个贴子的用户的cookie信息就会保存到lcx的短消息收件箱里。这条语句理论上是成立的,但是真要实战的话。你会发现是不行的,因为笔者的的wdb论坛过滤了单引号,如果真想构造成功的话就要把这条语句稍微改造一下,用单引号的ascii码代替单引号,所以语句要造如下:
这样才会真正成功。当然不同的用户登陆论坛后进行跨站攻击,要将这条语句的ruser=lcx中的lcx改为不同用户的id。而且如果你想在别的论坛进行跨站的话,只要采用我的方法找出不同论坛短消息发送的url数据,将其改造一下使之能够接受cookie就可以了。
二、跨站不弹出ie窗口的解决办法。
我以lcx这个id登陆论坛后,在论坛里发了一个贴子,其中代码中嵌入就是上文提到过的url数据。此时另一个用户hehe此时访问这个贴子看看会发生什么。图4。此时在用户hehe的电脑里会弹出另一个ie窗口,上面写到“已经完成,点这里返回收件箱"。而且ubb代码表示的图像是一个红色的x。针对这两个问题,绿盟的牛人czy提到过利用Microsoft.XMLHTTP控件(该控件WIN98/2K上都默认自带的东东,并且它是IE认为safe的控件!)在网页中给网站发送POST或GET的http请求这一特性写javascript语句来解决弹窗口的问题;对于“图片不能正常显示会是一个红色小叉”这个小问题,czy的解决思路是:一个网页中的所有IMG元素通过document.imanges都能例举到,并且可以设置它们的大小,当width=0时就相当于HIDDEN了。通过比较元素的src属性的值是否含有"ript"就可以判断是不是我们的图片。另外比较时大于符用>代替,0用0代替!这些话听起来好专业,不懂脚本编程的人确实难懂,幸好czy给我们写出了一个现成的工具ASPSKY 5.0 0320 COOKI搜集器。czy的这个工具只是针对动网5.0论坛的,不过我们完全可以改造一下针对若尘美化版的wdb论坛。图5。在图5中我们根据提示填写完毕有关输入后,得到如下数据:
得到的这一些数据只是针对动网论坛形式的,我们要改造成针对wdb论坛。只要将数据里最后的urlsmallhome.51.net/lcx/wdb/usersms.asp?action=send&touser=lcx&title=news&submit=发送&message=改一下就行了,我改成了接收cookie的在wdb论坛的短消息url,像我在第一标题段里写出来的那样。我改造后如下:

两串数据对照比较一下你就会明白我是如何改的了,当然你也就学会了用czy的ASPSKY 5.0 0320 COOKI搜集器得来的数据来改造成针对不同论坛的跨站数据了。此时我将这些数据以lcx的id发在贴子里,用户hehe再来访问的话,就不会有图4的那种情况发生了,他的cookie就会毫无查觉到被发送到lcx的短消息收件箱里。
三、session的伪造。
session通俗的讲就是会话的意思。每个用户访问论坛时,论坛的服务器就会给用户自动生成一个会话id,这个id和cookie不同,它是随机的变化的,每次用户访问论坛这个id都不同,而且当用户离开论坛后,这个id也会消失。在跨站攻击时,我们有时就得到的不是cookie而是session。像wdb论坛,我收集到了用户hehe的session信息是:图6
2003-10-28-13:13
lastpath=/lcx/wdb/wdbread.php?forumid=7&filename=f_198; lastvisit_fr=1067317946; lastvisit=1067317946; s=c4f8bde828bed94e80d3491dd5b2fcab
其中s=c4f8bde828bed94e80d3491dd5b2fcab就是用户hehe的session。很多人可能会cookie欺骗,但如何进行session欺骗就束手无策。其实session也是可以伪造的。
我们用minibrowser.exe这一工具来打开笔者论坛,并以用户名lcx来登陆。图7。我们来看看lcx的session选项。图8。只要我们将图8中的session也就是s=后边那一串数据改成为用户hehe的c4f8bde828bed94e80d3491dd5b2fcab,再来用minibrowser.exe这一工具请求该论坛的url,你就会发现此时我们的身份是用户hehe了。图9当然,要做到这一点的前提是用户hehe此时正在此论坛上。
  最后,笔者要说明的是,虽然全文是以wdb论坛举例,但我相信熟读本文后,你就能够在其它的论坛上成功进行跨站攻击和session欺骗登陆。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: