第 35 卷 第 21 期
Vol.35 No.21
·安全技术·
计 算 机 工 程
Computer Engineering
文章编号:1000—3428(2009)21—0151—04
2009 年 11 月
November 2009
文献标识码:A
中图分类号:TP393.08
基于爬虫的 XSS 漏洞检测工具设计与实现
沈寿忠 1,2,张玉清 2
(1. 西安电子科技大学计算机网络与信息安全教育部重点实验室,西安 710071;
2. 中国科学院研究生院国家计算机网络入侵防范中心,北京 100043)
摘 要:通过对 XSS 漏洞的研究,剖析其产生、利用的方式,在此基础上针对 XSS 漏洞的检测机制进行进一步的分析和完善。结合网络
爬虫的技术,研究设计并实现了一款 XSS 漏洞的检测工具(XSS-Scan),并与当前比较流行的一些软件做了分析比较,证明利用该工具可以
对 Web 网站进行安全审计,检测其是否存在 XSS 漏洞。
关键词:XSS 漏洞;Web 安全;漏洞;网络爬虫
Design and Implementation of XSS Vulnerability Detection Tool
Based on Crawler
(1. Key Lab of Computer Networks and Information Security, Ministry of Education, Xidian University, Xi’an 710071;
2. National Computer Network Intrusion Protection Center, Graduate University of Chinese Academy of Sciences, Beijing 100043)
SHEN Shou-zhong1,2, ZHANG Yu-qing2
【Abstract】Through the deep study and analysis of the Cross Site Scripting(XSS) vulnerability, this paper knows that how the XSS vulnerability
produces and to be used. Further analysis and improvement are made about the XSS vulnerability’s detection mechanism. This paper realizes an XSS
vulnerability detection tools(XSS-Scan) based on Crawler’s technology, and does the analysis and comparison with some popular softwares. This
tool can be used to audit the Web site’s safety and detect the existence of XSS vulnerability in it.
【Key words】XSS vulnerability; Web security; vulnerability; Crawler
1 概述
随着 Internet 的发展,基于 Web 和数据库架构的应用系
统已经逐渐成为主流,广泛应用于企业内部和外部的业务系
统中。各种基于 Web 应用的业务模式不断成熟,但是各种网
络安全事件也同时不断地发生。据国家计算机网络应急技术
处理协调中心(CNCERT/CC)的统计,2007 年接收的网络仿冒
事件和网页恶意代码事件,分别超出 2006 年总数的近 1.4 倍
和 2.6 倍;而 2008 年 5 月,我国大陆地区被篡改网站的数量
就有 6 915 个。各种 Web 应用的安全事件严重影响了 Web 应
用的发展,其中基于 XSS 漏洞的应用攻击尤为严重。
现 有 的 工 具 如 XSS-Me, Acunetix Web Vulnerability
Scanner, Paros[1]等软件都可以对 Web 应用程序的 XSS 漏洞
进行扫描检测。但这些软件都或多或少地存在着一些不足。
如 XSS-Me 只能针对表单进行测试,而且是单页面的分析,
并且无法分析框架式的单页面。Acunetix Web Vulnerability
Scanner 5 对框架式的 Web 应用程序及含参超链的分析存在
着不足。Paros 3.2.13 针对可疑点测试时所使用的数据包较少
且内置不可改变,测试不完全,易造成漏报。
本文所研究设计的基于网络爬虫的 XSS 漏洞扫描工具
(XSS-Scan),加强了框架式网站的分析,对所有可能出现 XSS
漏洞的切入点都进行了分析处理,避免了 XSS-Me, Acunetix
Web Vulnerability Scanner, Paros 等造成漏报的情况。
2 网络爬虫
网络爬虫(Crawler)是通过网页的链接地址来寻找网页的
程序,它从网站的某一个页面开始,读取网页的内容,找到
在网页中的其他链接地址,然后通过这些链接地址寻找下一
个网页,这样一直循环下去,直到把这个网站所有的网页都
抓取完为止。网络爬虫一般有 2 种策略:深度优先和广度
优先。
深度优先是指网络爬虫会从起始页开始,逐个链接跟踪
下去,处理完这条线路之后再转入下一个起始页,继续跟踪
链接。
广度优先是指网络爬虫会先抓取起始网页中链接的所有
网页,然后再选择其中的一个链接网页,继续抓取在此网页
中链接的所有网页。这种方式可以让网络爬虫并行处理,提
高其抓取速度。
3 XSS 漏洞
由于 HTML 语言支持脚本语言嵌入页面中的机制,从而
引发了脚本的安全问题。XSS(Cross-Site Scripting)是最常见
的一种应用层的攻击。XSS 攻击基本上是将攻击代码注入到
各种浏览器的解释过程中,同时利用 XSS 漏洞旁路调用访问
控制——例如同源策略;这种攻击可以使用各种客户端语言
实现。而且这种类型的漏洞往往被用来编写危害性更大的
phishing 攻击和利用浏览器漏洞的攻击。
基 金 项 目 : 国 家 自 然 科 学 基 金 资 助 项 目 (60573048, 60773135,
90718007) ; 国 家 “ 863 ” 计 划 基 金 资 助 项 目 (2007AA01Z427,
2007AA01Z450)
作者简介:沈寿忠(1982-),男,硕士研究生,主研方向:网络与信
息安全;张玉清,教授、博士生导师
收稿日期:2009-05-19 E-mail:shenshzh@163.com
—151—
http://bbs.****.com.cn/tagSearch.do?tags=&action=forum
在地址栏中输入将其输入,然后刷新,会出现如图 2 弹
出对话框的异常情况。
图 2 测试网站的异常页面
因此可以判定该网站引发被挂马利用,引发 XSS 攻击。
具体 URL 可以如下所示:
http://bbs.****.com.cn/tagSearch.do?tags=&action=for
um
在地址栏中将其输入,然后刷新,会出现如图 3 所示的
情况。显然在该截图中可以看到百度的页面,该图说明该网
站是可以被用来进行跨站攻击的。如果将 URL 中百度的网址
改写成一些恶意网站,或者一些木马,然后将其在 BBS、电
子邮件上恶意传播,诱使他人点击访问,那么就可以进行跨
站脚本的攻击了。
3.1 XSS 漏洞分类
XSS 漏洞目前可以分为以下 3 类[2]:
(1)DOM-based XSS[2-3]
基于 DOM 或者为本地跨站脚本的漏洞。此类型的漏洞
存在于页面中客户端脚本自身。例如:如果 JavaScript 代码
访问 URL 请求参数,并使用这个信息在自身所在的页面中输
出一些 HTML,而这个信息没有使用 HTML 实体编码,则这
个被输出的 HTML 数据可以重新被浏览器进行解释执行,所
以出现了此类型的 XSS 漏洞。
(2)Reflected XSS
这种 XSS 漏洞涉及一些非持久化的或者反射的漏洞。常
出现在 Web 客户端使用 server 端脚本生成页面为用户提供数
据时。如果未 经验 证 的用 户 数据 被 包含 在 页面 中 而未 经
HTML 实体编码,这便使客户端代码能够注入到动态页面中。
这就是 Reflected XSS 的 XSS 漏洞。
(3)Stored XSS
该类型的 XSS 漏洞涉及到被存储的、持久化的或者二次
的漏洞。这种 XSS 漏洞出现于当 Web 应用提供数据的情况
下,此时这些数据首先被用户持久化保存到服务器上,然后
被显示在页面中但没有经过 HTML 实体编码。
3.2 XSS 漏洞检测原理
针 对 XSS 漏 洞 的 检 测 [1-2,4-5]最 常 见 方 法 的 就 是 利 用
, 等标签及 alert 等函
数来构造一系列的脏数据,进行测试。
假定一条正常的 URL 链接请求如下:
http://www.example.com/search.asp?value=****
如果此时的脏数据为
则新的 URL 链接为
http://www.example.com/search.asp?value=
向该网站发送该链接请求,如果该网站存在 XSS 漏洞,
则在返回的 HTML 代码中,能够捕获到一些特定的数据(此
示例中为“XSS”)。
下面给出一个实例:
为了对测试网站负责,在其网址及截图上隐去了关于该
网站的敏感性信息。故其 URL 如下:
http://bbs.****.com.cn/tagSearch.do?tags=%e4%b8%80%e8%af%
ad%e6%83%8a%e5%9d%9b&action=forum
其正常页面如图 1 所示。
图 3 跨站示例
4 XSS-Scan 的设计与实现
4.1 改进的 XSS 漏洞检测策略
一般的 XSS 漏洞检测工具会在 Web 应用程序的表单中
寻找 XSS 漏洞。但笔者通过对 XSS 漏洞的研究发现:在网
页之间传递参数时(非由表单提交的数据),如果接收端没有
对接收的数据进行过滤,同样也可以被用来挂马,即存在 XSS
漏洞。故可以把存在 XSS 漏洞的切入点归结为 2 大类:
(1)表单;(2)含参数的 URL。
图 1 测试网站的正常页面
修改上述链接的参数的值,构造新的 URL 如下:
—152—
针对 XSS 漏洞的检测可以分为 2 步:(1)利用网络爬虫自
动分析 Web 应用程序,寻找可疑的切入点;(2)对可疑的切入
点作测试。在第(1)步中,采取广度优先的策略,对可疑的切
入点进行收集,增强对框架式 Web 的分析。在第(2)步中,允
许其对特定的 URL 绑定,进行 Fuzzing 测试,减少漏报的
概率。
4.2 XSS-Scan 的主要结构
XSS 漏洞检测工具由 URL Message 模块、Crawler 模块、
Testing 模块和数据库 4 大部分组成:(1)URL Message 模块:
完成对网站 URLs 及其相关信息的管理。(2)Crawler 模块:分
析 Web 站点,寻找切入点,并记录相关信息。(3)Testing 模
块:完成对切入点的测试工作。(4)数据库:记录信息。如
图 4 所示。
Crawler
URL
Message
Testing
DB
图 4 XSS-Scan 的系统结构
4.3 URL Message 模块
URL Message 模块主要由 URL Hash Table, Crawler URL
Queue 和 Test URL Queue 3 部分共同完成对测试网站 URL
及其相关信息的管理:(1)Crawler URL Queue:使用队列存放
未经分析的 Web 页面所对应的 URL 地址信息。(2)URL Hash
Table:使用 Hashtable 结构,以 URL 为 Key,存放爬抓到的
URL 的信息。(3)Test URL Queue:使用队列存放可进行注入
测试的 URL 信息。
4.4 Crawler 模块
Crawler 模块主要通过对 Web 页面的分析从而获取测试
Web 站点下的所有 URL 及其相关信息,为站点完全测试做前
期的工作。其主要的流程如图 5 所示。
Crawler URL
Queue 为空?
NO
YES
获取一个URL
结束
请求Web页面
分析页面
图 5 Crawler 流程
对于一个 Web 站点,首先需要抽象出该网站的基本结构。
如果把首页当成一个根节点,把由首页能够链接到的网页作
为这个根节点的子节点,则这个网站的结构可以认为是一棵
由首页生成的链接树+孤立节点组成的。而这些页面也是应该
扫描的,只是无法知道这些页面的 URL,所以只能进行猜测。
故扫描过程可以分为 2 个部分:(1)针对由首页生成的树的扫
描,(2)针对孤立节点的扫描。
对树的扫描,采用广度优先的方式,具体算法描述如下:
(1)将网站的首页的 URL 加入到 Crawler URL Queue 中。
(2)判断 Crawler URL Queue 是否为空。为真,则退出;
为假,则从 Crawler URL Queue 中取出一条记录,转步骤(3)。
(3)用取出的 URL 向对应的网址发出 HTTP 请求,对返
回的 htmlcode 进行分析(具体分析过程见图 6),转步骤(2)。
Web 页面
获取URL及其
相关信息
理
处
的
签
标
t
e
s
e
m
a
r
F
.. .
理
处
的
签
标
>
=
f
e
r
h
a
<
.
…
理
处
的
签
标
e
g
a
m
I
…
理
处
的
单
表
m
r
o
F
YES
判定URL是否
访问过
NO
NO
可注入测试?
YES
将URL加入到
Test URL Queue中
将获取的URL
信息加入到
URL HashTable
当前网页深度
+1>MAX
YES
NO
将URL加入到
CrawlerURLQueue中
结束本次页
面分析
图 6 Web 页面的分析流程
在处理孤立节点时,采用经验测试的方法。本文使用一
个单独的可配置的站点隐藏页面搜索列表,里边包含了大量
的隐藏页面常用的相对路径和页面名称的排列组合,利用这
个字典对隐藏的孤立点进行尝试性搜索。
图 6 所示的 Web 页面的分析过程是该模块的重点。传统
的方法是在返回的 HTML 字符串中查找标签。这种分析方法
的效率低下,尤其在对表单的处理上存在着明显的不足,易
造成对 Web 页面的错误分析。而本文设计的工具在分析 Web
页面时一律使用自定义的正则表达式来全文匹配从而分析提
取有用信息。
例如在处理
…这类链接时,使用正
则表达式:
String hrefExpr = "<\\s*?a\\s[^>]*? href\\s*?=\\s*?
([\\\"']?)
([^\\1]*?)\\1(>|\\s.*?>)";
Regex hrefRegex =
new Regex(hrefExpr, RegexOptions.
IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);
MatchCollection col = hrefRegex.Matches(HTML);
在提取出该标签中的 URL 后,再进一步对其进行处理使
之转化为绝对路径。
url = new Uri(src_uri, new_uri);
//转绝对路径方式的 URL
Uri
接着对提取出的 URL 进行过滤,然后进行进一步处理。
对于页面中的表单同样采取自定义的正则表达式进行处
理从而获取所需要的数据。具体步骤如下:(1)提取整个表单
内容。(2)分析获取表单的属性(如 action, method 等属性值)。
(3)分析获取表单中的各项数据(如 input, select, textarea 等数
据项,提取其 name, type, value 等属性值)。(4)根据 action 中
—153—
的 URL 值进行分类,并保存相应的数据,以供下一步的测试
分析。以下为记录 Form 的内容的主要结构:
public class WebForm
{ private String _actionAddress;
private Uri _uri;
private FormParameterCollection _parameters;
private String _encoding = "";
private Method _method = FormMethod.None;
private String _htmlForm;
private int _formId;
…
}
最后根据过滤后的情况,对获取到的信息进行进一步的
处理。
4.5 Testing 模块
Testing 模块主要是通过构造数据包发送到服务器的,然
后分析返回的代码,从而判定 Web 的安全性,其测试过程如
图 7 所示。
NO
YES
Crawler
结束?
YES
退出
Test URL
Queue为空?
NO
取出一条记录
构造数据包
向服务器发送数据包,并
获取返回页面
分析页面
有漏洞?
YES
记录漏洞
NO
图 7 测试过程流程
Testing 模块的具体测试步骤如下:
(1)判断 Test URL Queue 是否为空。为真,则转步骤(2);
为假,则转步骤(3)。
(2)判断 Crawler 是否结束。为真,则退出;为假,则转
步骤(1)。
(3)从 Test URL Queue 取出一条记录。
(4)构造数据包;并向服务器发送请求,获取返回页面;
分析页面。
(5)判断是否有漏洞。为真,则转步骤(6);为假,则转步
骤(1)。
(6)记录漏洞的相关信息;然后转步骤(1)。
在该模块中,允许其绑定 URL,进行 Fuzzing 测试,减
少漏报的概率。其主要过程就是逐一取出测试语句,进行注
入测试(主要过程如图 7 的虚线框中所示),直到确认该切入
点存在 XSS 漏洞或者所有测试语句取遍为止。
—154—
5 XSS-Scan 的测试及其结果分析
为了检测本文设计并实现的工具 XSS-Scan 的有效性,
对某些网站进行了安全扫描,并与其他的一些软件做了对比,
具体的数据如表 1 所示。其中,Ⅰ代表 Frame 框架式的网页;
Ⅱ代表非 Frame 框架式的网页。
表 1 XSS 漏洞测试数据比较 个
工具
AcunetixWeb Vulnerability Scanner 5
XSS-Scan
XSS-Me
Paros 3.2.13
URL
URL
URL
某政府网站 某媒体网站 BlogPHPv2
Form
Ⅰ Ⅱ
1
0
0
1
1
0
0
1
Form
Ⅰ Ⅱ
0
2
0
0
0
2
0
0
Form
Ⅰ Ⅱ
0
0
0
0
0
0
0
0
2
0
1
2
1
0
0
1
0
0
0
0
从表 1 所示的测试数据中,可以看出 XSS-Me, Acunetix
Web Vulnerability Scanner 5, Paros 3.2.13 都存在着漏报。而本
文所开发的 XSS 漏洞扫描工具 XSS-Scan 在对 Web 应用程序
进行 XSS 漏洞检测时,明显比其他 3 款工具有效。
通 过 对 测 试 网 站 的 具 体 漏 洞 的 一 些 详 细 分 析 , 知 道
XSS-Scan 与其他工具相比的一些优势:(1)与 XSS-Me 的数据
相比,由于 XSS-Me 无法对框架式的网站进行分析,在这种
情况下易造成漏报;(2)与 Acunetix Web Vulnerability Scanner
5 的数据相比,由于 Acunetix Web Vulnerability Scanner 5 在
URL 中的参数分析存在不足,因此也产生了漏报;(3)与 Paros
3.2.13 的数据相比,由于 Paros 在测试可疑点时,使用的数据
包较少,因此造成了它对可疑点的分析不足,所以也产生了
漏报。本文所开发的 XSS-Scan 则加强了对框架式的网页的分
析,同时也加强了对 URL 中的参数、Web 页面中的表单,对
这些 XSS 漏洞存在的可疑点进行了测试。从所得的测试结果
上看,本文所开发的工具在 XSS 漏洞的检测上显然强于其他
3 款工具。
6 结束语
本文通过对 XSS 漏洞的产生、利用及检测技术的研究,
设计并实现了针对 Web 应用程序中 XSS 漏洞的扫描工具。
该工具与同类软件相比,在网页爬抓及可疑点的分析上更加
全面。该工具在网页的分析过程中主要使用正则表达式进行
分析提取内容,分析过程快,不易遗漏。下一步将结合 Cookie
及 Session 的技术,使本文的 Clawler 功能更强,同时也可以
使分析更全面。
参考文献
[1] Chinotec Technologies Company. Paros——for Web Application
Security Assessment[EB/OL]. (2008-08-15). http://www.parosproxy.
org/index.shtml.
[2] OWASP. OWASP Testing Project[EB/OL]. (2008-08-10). http://
www.owasp.org/.
[3] Klein A. DOM Based Cross Site Scripting or XSS of the Third
Kind[EB/OL]. (2008-07-28). http://www.Webappsec.org/projects/
articles/071105.html.
[4] Fortify Software Inc.. Cross-site Scripting(XSS)[EB/OL]. (2008-04-
07). http://www.owasp.org/index.php/Cross-site_Scripting_(XSS).
[5] Ismail O, Etoh M, Kadobayashi Y. A Proposal and Implementation
of Automatic Detection/Collection System for Cross-site Scripting
Vulnerability[C]//Proc. of the 18th International Conference on
Advanced Information Networking and Applications. Washington D.
C., USA: IEEE Computer Society, 2004.
编辑 任吉慧