《基于模糊测试的漏洞发现 ——跨站脚本模糊测试毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于模糊测试的漏洞发现 ——跨站脚本模糊测试毕业设计论文.doc(58页珍藏版)》请在三一办公上搜索。
1、 毕业设计(论文)题目名称:基于模糊测试的漏洞发现跨站脚本模糊测试院系名称:计算机学院班 级:网络072班学 号:200700824214学生姓名:李宗辉指导教师:李向东 2011年 06月论文编号:(200700824214) 基于模糊测试的漏洞发现跨站脚本模糊测试Vulnerability Discovery based on fuzz testingXSS fuzz testing院系名称:计算机学院班 级:网络072班学 号:200700824214学生姓名:李宗辉指导教师:李向东 2011年 06月中文摘要跨站脚本漏洞是Web应用程序中最常见的一种漏洞,广泛存在于Web应用程序和服务
2、器中,很多计算机病毒、蠕虫等都是利用了跨站脚本,其危害性甚大。怎样发掘Web应用程序中跨站脚本漏洞,成了Web应用程序开发人员关注的重要问题。本文以Web应用程序跨站脚本为研究对象,研究Web应用程序跨站脚本漏洞模糊测试技术。论文包括以下研究工作。 首先,分析跨站脚本漏洞成因,重点研究了HTML,JavaScript。触发跨站脚本的原因分为以下两种:通过闭合标签触发跨站脚本,通过标签属性传递值触发跨站脚本。跨站脚本分为两种类型:反射型跨站脚本和持久型跨站脚本。然后,使用源代码分析方法发掘跨站脚本。在分析跨站脚本成因时,提出了利用源代码挖掘跨站脚本的方法。用这种方法挖掘跨站脚本是最基础的一种挖掘
3、方法,用分析源代码的方法寻找到若干跨站脚本漏洞。再者,重点分析了模糊测试原理,提出了模糊测试功能需求分析和框架设计,研究了实现模糊测试技术的核心算法。研究了模糊测试技术挖掘跨站脚本漏洞的方法技巧,总结了关键步骤,使用模糊器挖掘若干未知漏洞。最后应用模糊测试技术,发掘未知跨站脚本漏洞,并做收集记录添加在附录C中。本文研究意义为:能迅速挖掘跨站脚本漏洞,能有效测试Web应用程序中的跨站脚本。这为继续研究模糊测试Web应用程序提供了基础,为构建Web应用程序模糊测试系统探索了思路。关键词: Web应用程序; 跨站脚本; 模糊测试技术; 模糊器; WebFuzzAbstractCross-site s
4、cripting vulnerability is the most common web applications and servers vulnerability, which widely exists in the internet. Many computer viruses and worms are based on cross-site scripts. And the cross-site scripts harm is very serious. So how to explore cross-site scripting vulnerabilities has been
5、 the web application developers important concern. The main work what I have done in this paper is the following research:First, what I have done is analyzing the causes of cross-site scripting vulnerability. For this, I mainly focus on the HTML, JavaScript knowledge. And as a result, I divide the r
6、easons into the following two situations: triggered by closing tags, or triggered by passing tags property value. And also I find that cross-site scripting vulnerability can be divided into two types: Reflected XSS and Stored XSS. Second, what I have done is using the source code analysis method to
7、explore cross-site scripting vulnerabilities. When I analyze the causes of cross-site scripting vulnerability, I propose how to use source code method to explore cross-site scripting. It is the most basic method to explore XSS by this way. I have found a number of cross-site scripting vulnerabilitie
8、s with analyzing the source code method. Third, what I have done is studying web fuzz testing technique. I introduced the fuzz testing technology, which is the focus of this paper. I also analyzed the theory of the fuzz testing, then I suggested the requirement analysis and the framework of designin
9、g. I studied the core algorithms again. At last I summarized the step of exploring cross-site scripting with fuzz testing technology. Fourth, I use the fuzz testing technology to explore the unknown cross-site scripting, and do collect in the appendix C. At the end of this paper I have found some un
10、known XSS with the fuzzer.The significance of this research is that we can explore cross-site scripting and test web application fast and efficiently. It provides a foundation for building web applications, for constantly researching fuzz testing technology. Key words: web application; cross-site sc
11、ripting vulnerability; Fuzzing testing technology; Fuzzer; WebFuzz 目 录中文摘要IAbstractII目 录III第1章 前言11.1 研究背景11.2 研究内容21.2.1 Web应用程序漏洞21.2.2 模糊测试技术31.2.3 研究现状、存在问题及应用领域31.3 研究任务41.4 论文结构5第2章 跨站脚本分析62.1 跨站脚本概述62.2 跨站脚本成因62.2.1 超文本标记语言62.2.2 JavaScript82.2.3 跨站脚本产生的原因92.3跨站脚本的分类122.3.1 Non-persistent(非持久
12、型)122.3.2 Persistent(持久型)122.4跨站攻击与跨站脚本的危害132.4.1 跨站攻击132.4.2 跨站脚本的利用模式132.5本章小结14第3章 Web模糊测试技术153.1 HTTP状态码和信息头153.2 模糊测试原理153.3 模糊器功能需求分析163.3.1 请求173.3.2 模糊变量183.3.3 响应183.4 模糊器框架设计183.5 模糊器设计核心函数193.5.1 生成请求193.5.2 sendRequest类203.5.3 接收响应213.6 本章总结22第4章 跨站脚本漏洞挖掘234.1 源代码分析方法挖掘XSS234.1.1 正常状态记录2
13、34.1.2 返回信息源代码分析244.2 模糊测试方法挖掘XSS254.2.1 正常状态记录264.2.2 使用Fiddler工具264.2.3 Ping目标主机IP地址284.2.4 在模糊器中输入信息294.2.5 开始测试314.2.6 验证准确性324.3 两种测试方法的比较334.4 本章总结33第5章 结 论345.1 模糊测试技术总结345.2 模糊测试发展前景35参考文献36致 谢37附 录38附录A 图目录38附录B 主要源程序39附录C 跨站脚本记录50第1章 前言随着计算机通信技术的飞速发展,Web应用程序得到了越来越多的应用。Web应用程序的安全性成为了一个复杂性的课
14、题。怎么进行Web应用程序安全测试,怎么进行Web应用程序漏洞挖掘,已经成为Web应用程序开发者和Web应用程序安全维护者关心的重要议题。本篇论文将用最新的Web应用程序漏洞发掘技术模糊测试技术,对Web应用程序中跨站脚本漏洞进行挖掘。1.1 研究背景2010年8月中国互联网络中心CNNIC发布中国互联网发展现状报告。报告显示,中国网民规模持续增长,互联网应用深度不断提升,商务类应用成为新的增长点。其中网上支付、网络购物、网上银行增长最为强劲。企业借助互联网进行商务活动的价值日益凸显,企业利用互联网的积极性不断提高,企业在互联网上的投入也不断提高,包括建站、交易平台入驻、网络营销等。由此可见,
15、网络已经成为发布信息,获得信息,资源下载,网络应用,电子消费,电子政务等等的重要平台,而建立在庞大、集成的网络基础上的多平台、网络化、充分集成的Web应用程序已成为上述业务最流行的处理模式。但与此同时,承载着重要而丰富功能与用途的Web应用和服务器也成为恶意用户与黑客等攻击者的主要目标。因此,如何确保Web应用程序的安全已成为企业,政府,特别是金融系统、电子政务和电子购物系统所面临的主要挑战。为了防止政府系统、企业用户、广大个人用户成为Web应用程序安全性问题的受害者,应该关注Web应用程序和服务器的安全性问题。作为普通用户不应该利用Web应用程序和服务器的安全性问题危害公众利益,作为技术人员
16、应该维护Web应用程序和服务器的安全性,作为开发人员应该将Web应用程序和服务器的安全性放到重要位置。这对计算机通信技术的发展来说是很重要的。对Web应用程序和服务器的安全性的关注,其中最重要的一个方面是对其进行安全性测试,发掘其中存在的安全漏洞。可以采取很多不同的方法进行安全性测试,从大的方面来说可以分为白盒测试和黑盒测试两个方面,Web应用程序模糊测试技术是黑盒测试的一种,是自动化的黑盒测试技术。它是通过提供非预期的输入并监视异常结果来发现Web应用程序故障的方法。1.2 研究内容本小节将讲述Web应用程序和Web应用程序漏洞的有关知识,然后介绍什么是Web应用程序和服务器模糊测试技术,并
17、介绍Web应用程序和服务器模糊测试技术的研究现状、存在的问题和应用领域。1.2.1 Web应用程序漏洞Web应用程序(Web Application)是指用户界面驻留在Web浏览器中的任何应用程序,包括内容管理系统(CMS)、wiki百科、门户网站、电子公告板、论坛等。它基于Web运行,是浏览器-服务器架构的典型产物。Web应用程序漏洞特指由于开发者编码不慎、没有对用户的输入进行充分验证和过滤而引入的漏洞,它主要包括跨站脚本(XSS)、SQL 注入、远程文件包含(RFI)、跨站请求伪造(CSRF)、目录遍历等。 致力于提高Web应用程序安全性的开放社群OWASP(Open Web Applic
18、ation Security Project,开放Web应用程序安全项目)在2010年4月19日公布的OWASP十大互联网应用程序风险(OWASP Top 10 for 2010)依次是:A1: Injection注入攻击A2: Cross-Site Scripting (XSS)跨站脚本A3: Broken Authentication and Session Management失效的身份认证和会话管理A4: Insecure Direct Object References不安全的直接对象引用A5: Cross-Site Request Forgery (CSRF)跨站请求伪造A6: S
19、ecurity Misconfiguration安全配置错误A7: Insecure Cryptographic Storage不安全的加密存储A8: Failure to Restrict URL Access没有限制URL访问A9: Insufficient Transport Layer Protection传输层保护不足A10: Unvalidated Redirects and Forwards未验证的重定向和转发十大风险的名称有的来自于攻击的类型,有的来自于漏洞,而有的来自于所造成的影响。攻击者可以通过应用程序中许多不同的路径方法去危害你的业务或者企业组织。每种路径方法都代表了一种
20、风险。不同的路径方法,所利用的Web应用程序安全漏洞就有可能不同。如下图1-1就是利用不同Web应用程序安全漏洞产生风险的过程图: 图1- 1 利用不同Web应用程序安全漏洞产生风险过程图1.2.2 模糊测试技术模糊测试技术,又被称为Fuzzing,它是通过提供非预期的输入并监视异常结果来发现Web应用程序故障的方法。是一种广为使用的自动化的漏洞挖掘技术,它是一种特殊的动态测试方法。模糊测试技术可以被定义为通过提供非预期的输入并监视异常结果来发现软件故障的方法。模糊测试技术是近几年兴起的漏洞挖掘技术。最初用来测试操作系统及其上应用软件的健壮性,后来被应用于漏洞挖掘中。Fuzzing技术是一种高
21、度自动化的,高效的漏洞挖掘技术。Web应用程序自动化的模糊测试是模糊测试技术的延伸,是一种特殊形式的网络协议模糊测试,特别关注于遵循HTTP规范的包。是一种黑盒测试,在很大程度上是一种强制性的技术,把能够想到的所有的东西都抛给被测目标,然后监视结果。结合Web应用程序安全性测试的特点以及自动化的模糊测试的特点,会看到自动化的模糊测试技术在发掘Web应用程序上的方便性和有效性。事实证明自动化的模糊测试技术能够发掘Web应用程序中隐藏的用其他方法难以发掘的漏洞。1.2.3 研究现状、存在问题及应用领域研究现状:到目前为止,Web应用程序的模糊测试技术取得了一定的进展,但是这项技术仍然在初级阶段,大
22、部分工具仍然是相对较小的项目,由几个人组成的小组甚至一名程序员来维护,未来的模糊测试将会有许多革新和发展,模糊测试还会发展到新的阶段。这些年,模糊测试已经开始从学术研究向商业应用方向发展,有越来越多的开发人员开始接受模糊测试技术。使用模糊测试技术,研究人员已经开发了不少的应用于Web应用程序漏洞的挖掘的模糊器,例如有SPIKE代理,WebScarab,SPI模糊器,Codenomicon HTTP测试工具,beSTORMOLU等等,这些都是优秀的基于模糊测试技术的具有发掘Web应用程序和服务器漏洞功能的模糊器。存在的问题:但是这些工具大多是商业应用的测试工具,而本课文题在研究使用模糊测试技术发
23、掘Web应用程序和服务器漏洞时,所涉及的模糊器WebFuzz是一款免费开源的专门针对Web应用程序和服务器漏洞挖掘的工具。这款工具具有良好的可扩展性,它提供了一个可以而且应当被进一步创建的架构。其相关资料和源代码可以在网站www.fuzzing.org中获得。应用领域:Web应用程序和服务器的模糊测试器WebFuzz可应用于网站开发的安全测试和Web应用程序和服务器开发的安全测试。它用于发掘Web应用程序和服务器中的目录遍历漏洞,缓冲区溢出漏洞,SQL注入漏洞,XSS脚本漏洞等。1.3 研究任务本文的研究任务主要包括:Web应用程序跨站脚本分析、Web应用程序漏洞挖掘模糊测试技术研究、跨站脚本
24、重现研究、跨站脚本探索挖掘研究四个部分。研究任务表如下表1-1所示:表1-1研究任务表脚本漏洞分析WebFuzz技术研究脚本漏洞重现脚本漏洞探索脚本漏洞介绍WebFuzz介绍熟悉WebFuzz探索未知漏洞脚本漏洞触发原理WebFuzz原理重现漏洞对比不同的技术研究的技术路线如下图1-2: 图1- 2 拟采用的研究技术路线跨站脚本分析:首先学习跨站脚本定义,明确跨站脚本分类,分析跨站脚本触发原理。进而研究跨站脚本攻击向量的构造方法,以及变换形式。并在此基础上进一步理解和总结跨站脚本成因。Web模糊测试技术分析:首先学习模糊测试技术的基本原理知识,在此基础上研究本文提出的Web应用程序模糊器Web
25、Fuzzer。分析本模糊器的工作原理,掌握本模糊器的使用方法。跨站脚本重现研究:不断总结发掘跨站脚本的方法,更深理解其触发原理。不断掌握模糊器WebFuzzer的使用,构建发掘Web应用程序跨站脚本的发掘环境,并会利用WebFuzzer重现已知的漏洞。跨站脚本探索研究:不断总结Web应用程序跨站脚本的形成原理,掌握Web应用程序模糊器WebFuzzer发掘跨站脚洞的工作原理,总结和其他发掘工具相比时的优势。利用WebFuzzer探索发掘未知的跨站脚本。总结探索发现跨站脚本的过程,用合理的方法收集已发现的跨站脚本。1.4 论文结构本次论文的文章架构如下:第1章,前言部分,总体上介绍研究任务,说明
26、项目内容,介绍相关背景等;第2章,跨站脚本分析部分,本章深入分析跨站脚本成因及其他与跨站脚本有关的知识;第3章,Web模糊测试技术,本章深入探讨Web模糊测试技术的原理,提出功能需求分析、和框架设计,深入分析模糊器设计的核心函数算法;第4章,利用学到的知识对跨站脚本挖掘,这里用了源代码分析的方法和模糊测试的方法;第5章对全文进行总结。第2章 跨站脚本分析来自OWASP的2010年Web应用程序面临的十大安全风险报告显示:跨站脚排名第二。而在以往的报告中,跨站脚本则一直稳居第一。由此可见跨站脚本在Web应用程序中是很常见而且是危害很大的一类漏洞,本章重点介绍这一类Web应用程序漏洞。从跨站脚本概
27、述到成因,全面介绍跨站脚本。2.1 跨站脚本概述XSS的全称是Cross Site Scripting,意思是跨站脚本.这第一个单词是Cross,但因为CSS是层叠样式表的缩写(Cascading Style Sheets)的缩写,同时Cross发音和X相似,所以为了避免混淆用X来代替缩写成XSS。跨站点脚本(XSS)是一个典型的Web应用程序计算机安全漏洞。允许攻击者绕过客户端的安全机制,可以使恶意攻击者将客户端脚本注入到其他用户浏览的网页里。截止到2007年,赛门铁克公司所记录的安全记录中有80%为跨站脚本,它的影响范围可以从一个小小的滋扰到一个重大的安全风险。OWASP公布的2004年和
28、2007年十大网络安全漏洞中,跨站脚本都高居首位,最新公布的2010年十大安全风险也为第二位,跨站脚本一直以来都是最常见的安全漏洞。2.2 跨站脚本成因2.2.1 超文本标记语言a超文本标记语言概述要了解XSS的触发原理就先得从HTML(超文本标记语言)开始。HTML(超文本标记语言)是描述网页的一种语言。不是一种编程语言,而是一种标记语言,是由一套标记标签组成的,HTML使用标记标签来描述网页。HTML文档包含HTML标签和纯文本,是网页的文字形式。HTML文档由HTML元素定义, HTML元素是指从开始标签到结束标签的所有代码。HTML元素以开始标签开始以结束标签终止,元素内容是开始标签和
29、结束标签之间的内容。b超文本标记语言标签HTML标签标记HTML文档和HTML元素,浏览器通过这些标签来识别文档和元素的显示格式。由开始标签和结束标签组成,开始标签是被尖括号包围的元素名,结束标签是被尖括号包围的斜杠和元素名。某写HTML元素没有结束标签。下面简单介绍一下常用的HTML标签。HTML文档标签:HTML文档是从标签开始的,结束标签为。 与 之间的文本描述网页。HTML文档头标签:HTML文档头标签用于定义文档的头部。文档的头部描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会真正作为内容显示给读者。HTML标题
30、标签:HTML标题标签 元素可定义文档的标题。浏览器会以特殊的方式来使用标题,并且通常把它放置在浏览器窗口的标题栏或状态栏上。同样,当把文档加入用户的链接列表或者收藏夹或书签列表时,标题将成为该文档链接的默认名称。HTML的主体标签:HTML文档的主体是由标签进行定义的,和结束标签分别为。 与 之间的文本是可见的页面内容。网页中文章标题标签:网页中文章的标题是用标签 - 定义的。 定义最大的标题。 定义最小的标题。c超文本标记语言属性同时,HTML 标签可以拥有属性。属性提供了有关 HTML 元素的更多的信息。属性总是以名称/值对的形式出现。比如name=value属性总是在HTML元素的开始
31、标签中定义。下面三个是标签属性举例。链接标签的属性href指定链接地址:This is a link标题标签中的属性align指定标题的对齐方式。主体标签中的属性bgcolor指定文档的背景颜色。定义属性时要注意:始终为属性值加引号,属性值应该始终被包括在引号内。双引号是最常用的,不过使用单引号也没有问题。在某些个别的情况下,比如属性值本身就含有双引号,那么您必须使用单引号。d超文本标记语言事件HTML 事件可以触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript。在现代浏览器中都内置有大量的事件处理器。这些处理器会监视特定的条件或用户行为,例如鼠标单击或浏
32、览器窗口中完成加载某个图像。通过使用客户端的 JavaScript,可以将某些特定的事件处理器作为属性添加给特定的标签,并可以在事件发生时执行一个或多个 JavaScript 命令或函数。事件处理器的值是一个或一系列以分号隔开的 Javascript 表达式、方法和函数调用,并用引号引起来。当事件发生时,浏览器会执行这些代码。例如,当您把鼠标移动到一个超链接时,会启动一个JavaScript 函数。支持 JavaScript 的浏览器支持 标签中的一个特殊的 mouse over事件处理器 - 被称为 onmouseover 来完成这项工作:。2.2.2 JavaScriptaJavaScri
33、pt概述JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。JavaScript 由数行可执行计算机代码组成。JavaScript 通常被直接嵌入 HTML 页面。JavaScript 是一种解释性语言,这就是说,代码执行不进行预编译。bJavaScript功能JavaScript 为 HTML 设计师提供了一种编程工具。JavaScript 是一种只拥有极其简单的语法的脚本语言,可以将短小的代码片断放入HTML 页面当中。JavaScript 可以将动态的文本放
34、入 HTML 页面,可以将 JavaScript 设置为当某事件发生时才会被执行,例如页面载入完成或者当用户点击某个 HTML 元素时。JavaScript 可以读写 HTML 元素。JavaScript 可以读取及改变 HTML 元素的内容。JavaScript 可被用来验证数据,在数据被提交到服务器之前,JavaScript 可被用来验证这些数据。JavaScript 可被用来检测访问者的浏览器,JavaScript 可被用来检测访问者的浏览器,并根据所检测到的浏览器,为这个浏览器载入相应的页面。JavaScript 可被用来创建 cookies,JavaScript 可被用来存储和取回位
35、于访问者的计算机中的信息。cJavaScript标签HTML的标签用于把Javascript插入到HTML页面当中。如果需要把一段 JavaScript 插入 HTML 页面,需要使用 标签(同时使用 type 属性来定义脚本语言)。这样, 和 就可以告诉浏览器 JavaScript 从何处开始,到何处结束。dJavaScript放置位置JavaScript放置的位置。你可以在文档中放置任何数量的脚本,因此你既可以把脚本放置到 body,又可以放置到 head 部分。当页面载入时,会执行位于body部分的JavaScript;当被调用时,位于head部分的JavaScript才会被执行,也就是
36、将脚本内容或者成为函数写到head部分,在载入页面的时候会先将脚本内容载入,然后再在后面的执行过程中调用脚本内容,Body部分的脚本内容会在载入页面的时候就执行;还有一种是访问外部脚本,可以把 .js 文件放到网站目录中通常存放脚本的子目录中,这样更容易管理和维护。eJavaScript语句JavaScript语句。JavaScript 语句是发给浏览器的命令。这些命令的作用是告诉浏览器要做的事情。下面主要列举几种常用语句:声明(创建)JavaScript变量:在 JavaScript 中创建变量经常被称为“声明”变量。可以通过 var 语句来声明 JavaScript 变量。JavaScri
37、pt消息框:可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。警告框:警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。语法格式为:alert(文本)。确认框:确认框用于使用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。语法格式为:confirm(文本)。提示框:提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么
38、返回值为输入的值。如果用户点击取消,那么返回值为 null。语法格式为:prompt(文本,默认值)。 fJavaScript事件JavaScript中的事件。JavaScript 使有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说,可以在用户点击某按钮时产生一个 onClick 事件来触发某个函数。事件在 HTML 页面中定义。列举一些JavaScript事件如下:鼠标点击;页面或图像载入;鼠标悬浮于页面的某个热点之上;在表单中选取输入框;确认表单;键盘按键等。2.2.3 跨站脚本产生的原因
39、跨站脚本产生的原因,是Web应用程序过度信赖用户的输入,CGI程序没有对用户提交的变量中的HTML代码进行过滤和转换。CGI输入有两种形式,显示输入和隐式输入。其中显示输入明确要求用户输入数据,而隐式输入则本来并不要求用户输入数据,但是用户却可以通过输入数据来进行干涉。显示输入又可以分为两种,输入完成立刻输出结果;输入完成先存储在文本文件或数据库中,然后再输出结果,后者可能会让网站面目全非。从引起跨站脚本的触发原因分为以下两种。a闭合标签浏览的网页全部都是基于超文本标记语言HTML创建的HTML文档。XSS的原理也就是往HTML文档中注入脚本,HTML指定了脚本标记。在没有过滤字符的情况下,只
40、需要保持完整无错的脚本标记即可触发XSS,假如在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,可以构造闭合标记来构造完整无错的脚本标记。例如HTML文档中的一个超链接:IT168安全频道就可以构造闭合标记:alert(XSS);结果形成了alert(XSS);。这样就产生了跨站脚本。综上所述,测试闭和表单赋值所在的标记,形成完整无错的脚本标记可触发XSS。b 标签属性赋值有些时候是没有脚本标记的,这时可以利用其他标记,假如要在网页里显示一张图片,那么就要使用一个标记,示例如下:img标记并不是真正地把图片给加入到Html文档把两者合二为一,而是通过src属性赋值。那么浏览器的任务
41、就是解释这个img标记,访问src属性所赋的值中的URL地址并输出图片。浏览器不会检测src属性所赋的值,这时可以利用JavaScript脚本语言的一个URL伪协议,触发跨站脚本。URL伪协议说明符为”javascript:”,这种协议说明符加上任意的javascript代码,当浏览器装载这样的URL时,便会执行其中的代码。于是就得出了一个经典的XSS示例:构造过程如下:首先寻找到没有验证和过滤客户端输入的输入图片处,然后用记事本写下如下代码:,然后修改创建的文件的格式为可以上传的图片的格式,这样便有可能触发跨站脚本,如下图2-1: 图2- 1跨站脚本触发图当然并不是所有标记的属性都能用,标记
42、的属性在访问文件才触发的XSS,离开标记的属性还有事件能帮助触发XSS。只有达到某个条件才会引发事件,正巧img标记有一个可以利用的onerror()事件,当img标记内含有一个onerror()事件而正好图片没有正常输出便会触发这个事件,而事件中可以加入任意的脚本代码,其中的代码也会执行.现在又得到了另外一个经典的XSS示例:这种情况下触发漏洞的过程如下:首先在记事本文本中输入上面的代码,然后将文件名修改为可以上传的图片格式,这是在加载图片的时候,不能找到正确的图片URL,于是触发事件onerror,从而触发的弹框XSS漏洞。c 跨站脚本成因总结由此可见,触发一个XSS漏洞就是利用Web应用
43、程序中程序员的失误,通过客户端影响Web服务器的输出,即修改Web服务器传送给客户端的HTML,而要达到触发一个XSS跨站脚本的目的,就必须从用户的输入入手,将输入值插入到服务器返回给的HTML文档中,这个输入值是包含HTML语言或者JavaScript语言或者其他脚本语言的合法的值,这个输入值没有被GUI程序检验和过滤。构造出完整无错的脚本标记。构造的过程可能是:直接构造出完整无错的脚本标记,或者通过访问文件的标记属性和触发事件来构造。 需要补充一点的是,Web应用程序在开发过程中,是应该采用一定的安全策略的。那就是当JavaScript的使用者同时开启多个浏览器视窗时,在有些时候,网页里面
44、的片段程式码被允许从另一个网页取出,所以某些恶意网站可以用这个方法来尝试窃取机密信息。这应当是被禁止的,为了解决这个问题,浏览器采用了允许来自相同网域名称系统和使用相同协定的网页之间进行互动,而不允许不相同网域域名系统和使用不相同协定的网页之间进行互动,这样就使得恶意网站无法借由Javascript在另一个浏览器窃取机密资料。这就是使用“同源策略”保护受害者免受恶意的危害。然而有些网站不能正确实现同源策略或者说同源策略本身也存在弱点,攻击者就可以利用这些去发现可以巧妙的注入恶意指令码到其他网页的方法,从而可以得到更高的特权,窃取机密的网页内容、会谈的cookie、以及许多其他的物件。2.3跨站
45、脚本的分类上面一小节已经详细阐述了跨站脚本的成因,下面将阐述一下跨站脚本的分类。跨站脚本的实质是注入的问题,现在并没有一个单一的,标准的分类方法。但是许多专家将跨站脚本分为至少两大类:Non-persistent(非持久型)和Persistent(持久型)。2.3.1 Non-persistent(非持久型)这种跨站脚本又被称为反射型跨站脚本。如果Web客户端提供的数据立即被服务器端脚本所使用,生成并返回给用客户端结果页面,而服务器端脚本在使用这些数据之前没有正确的审查这些数据。就有可能导致客户端代码注入到返回的结果页面中。如Web客户端提供的HTTP查询参数或者提供的HTML表单未被正确的审核却被立即使用时。一个典型的例子是一个网站的搜索引擎:搜索一个字符串,搜索的字符串又被原封不动地重新显示在结果页中逐字说明是什么搜索。如果搜索引擎没有对搜索的字符串进行正确的审核,就有可能导致一个非持久型的跨站脚本。本文将重点研究此种类型的漏洞。 针对此类漏洞,攻击者可以构造具威胁性的攻击代码,并骗取受害用户点击生成的链接,从而危害到用户的安全。2.3.2 Persistent(持久型)持久型跨站脚本又被称为存储型跨站脚本