Xss 浅谈
跨站脚本 Cross-Site Scipting(Xss) 是最为流行的Web 安全漏洞之一,本文浅要的说明下这个漏洞形成的原因及危害.
所谓跨站脚本就是攻击者可以将恶意的脚本代码注入到合法页面当中.当用户点击浏览这个页面时嵌在页面中的恶意代码就会被执行.跨站脚本有好几种类型最为普遍的为反射类型的跨站脚本.
下面我以一个jsp页面为例说明Xss的机理.
操作系统:win xp sp2
编译环境:netbean6.1
服务器:tomcat 6
浏览器:遨游(IE内核)
这个例子很简单.当用户输入内容.将这个内容输出到页面上显示,为了方便我将服务处理和显示放到同一个页面,这个例子虽然简单但带有普遍性
index.jsp
2 <html>
3 <head>
4 <title>XSS</title>
5 </head>
6 <body>
7 <%
8 String Name=request.getParameter("textfield");
9 %>
10 name: <%=Name%>
11 <form id="form1" name="form1" method="get" action="index.jsp">
12 XssTest Input
13 <input type="text" name="textfield" />
14 <input type="submit" name="Submit" value="OK" />
15 </form>
16 </body>
17 </html>
当用户浏览这个页面时就会显示:
当用户输入信息时例如Xss就会提交一些Xss请求
将显示
这个例子很简单.看上去没什么功能但它却存在一个很典型的反射类跨站脚本漏洞.
如果我们在这个文本框内输入如下代码
则提交的请求为:
那么这个这个页面动态生成就包含了其插入的脚本
2 <html>
3 <head>
4 <title>XSS</title>
5 </head>
6 <body>
7
8 name: <script>alert("Cookie=\n"+document.cookie);</script>
9 <form id="form1" name="form1" method="get" action="index.jsp">
10 XssTest Input
11 <input type="text" name="textfield" />
12 <input type="submit" name="Submit" value="OK" />
13 </form>
14 </body>
15 </html>
脚本执行后就会弹出以下对话框,对画框内容是本地浏览器所在域的Cookie值
对于刚才的演示只是用户自己输入的信息.没有什么危害,但当供给这诱使用户点击刚才生成的提交请求
那么嵌入到URL中的js就会在用户的浏览器中执行..当然攻击者会事先对这个URL进行不同形式的编码,对刚才只是将cookie显示出来并没有什么危害,但是如果将cookie被攻击者获得其危险性就会大大增加..
说起Cookie就不得不说浏览器的安全的原则:同源原则
同源原则认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。
比如:Cookie记录着你的登陆的帐户密码之类的信息.用户通过浏览器用Cookies服务器进行交互验证.当然这些cookies一般通过md5进行加密.但是攻击者并不需要知道加密前是什么只需要将这个截获的Cookies重新提交就可以冒充浏览者身份进行登陆从而获得敏感信息.
其实Xss攻击是将攻击者获得Cookie发送到指定网站进行收集一般脚本构造如下代码
其实对于Xss攻击并不是只获得cookie这么简单.攻击者可以任意构造js脚本.甚至可以访问本地的磁盘然后将敏感信息发给攻击者.也可以将用户不知不觉导向有木马的恶意站点等..可想而知如果163等大型网站出现这个漏洞后果很严重(163.腾讯都出现过这种漏洞而且现在还是总是不断发现).因为用户对于这些网站的连接总是很信任的.所以后果也更为严重.