Web应用漏洞检测系统的设计与实现_第1页
Web应用漏洞检测系统的设计与实现_第2页
Web应用漏洞检测系统的设计与实现_第3页
Web应用漏洞检测系统的设计与实现_第4页
Web应用漏洞检测系统的设计与实现_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要随着互联网技术的迅猛发展,基于Web 的应用程序不断增多,广泛应用于生活、工作等领域, Web 应用程序具有使用简单、开发方便和共享方便等优点。Web 应用程序往往是对互联网开放的,用户只需要通过浏览器就可以访问到目标站点,所以,如果目标站点存在一定的安全漏洞,就很容易被攻击者所利用。Web 漏洞往往会造成巨大的危害:机密信息被窃取、目标服务器被控制等。造成Web 攻击事件的根本原因是Web 应用程序存在漏洞,要减缓甚至阻止攻击的事件的发生,应在 Web 应用程序投入使用之前就发掘其存在的漏洞,尽早修复Web应用程序的漏洞。针对 Web 应用程序的漏洞问题,本文的主要目标是设计并实现一个使

2、用简单、功能强大、性能良好的Web 应用漏洞检测工具。该工具能够检测出包括SQL 注入和 XSS 漏洞在内的常见 Web 漏洞,误报率、漏报率较低,具有较高的检测效率和正确率,并且能够生成扫描结果报告。首先,本文分析了国内外的研究现状,对现有的Web 应用漏洞检测工具进行了分析。研究了 Web 应用的相关技术,主要包括HTTP 协议和网络爬虫技术。分析了SQL 注入漏洞和XSS 漏洞的原理和分类,并总结了它们的攻击技巧。在XSS 漏洞检测过程中,先用合法字符串作为检测脚本进行探测,再根据其结果选择用攻击性的检测脚本进行进一步的测试,能够有效提高检测效率。在以上的知识基础上,本文的重点工作是对W

3、eb 应用漏洞检测系统进行了详细的需求分析和设计,把系统划分为几个功能模块,编写代码实现了本文的Web 应用漏洞检测系统,详细分析了系统的具体实现原理和过程。最后对系统进行了功能测试和性能测试,测试结果表明该系统的功能和性能都基本达到了预期的要求,能够有效的帮助用户发现漏洞。关键词:web 安全;漏洞检测;SQL 注入; XSSABSTRACTWith the rapid development of Internet technology, Web-based applications are widely used in life, work and so on. Web-based ap

4、plications are simple to use, easy to develop and share, so it is very popular. Web applications are open to the internet user which makes us only use a browser to access to the target web. So, if there are some vulnerabilities in the target site, it is easy to be exploited by attackers. Vulnerabili

5、ties often cause great harm, for example, confidential information is stolen, web servers are under control by victims and so on. The main reason why webs are attacked is that there are some bugs in web applications. So, in order to slow down or prevent the occurrence of attack, we should find the b

6、ugs in web applications before they are put into use and repair the bugs.The main object of this paper is to design and implement a simple to use, powerful, good performance of Web application vulnerability detection tool. The tool can detect common Web vulnerabilities including SQL injection and XS

7、S vulnerabilities.What smore, the tool has a low rate of false positives, high detection efficiency and accuracy, and can generate the scan results report.First of all, this paper analyzed the current research results and the existing Web application vulnerability detection tools. The paper did the

8、research on some knowledge about web application, including HTTP protocol and web crawler technology. What s more, the paper analyzed the principles, classification and attack skills about SQL injection and XSS vulnerabilities. In the process of XSS vulnerability detection, we firstly used the detec

9、tion script probed with legal string, and then used the aggressive detection scripts for further test according to previous result. As a result, it can effectively improve the detection efficiency.Based on above knowledge, the main point of paper was to analyzeand designe the web application detecti

10、on system detaily, dividing the system into several functional modules. After that, I implemented the system through coding, and described the specific implementation theory and processes of the system. Finally, I tested the system including function and efficiency, and the resulte showed that the W

11、eb application vulnerabilities detection system achieved expected target which could help users find vunlnerablities effectively.KEYWORDS : Web Security; Vulnerabilities Detection; SQL Injection; XSS北京交通大学硕士专业学位论文录目录摘要 IABSTRACT II1 绪论 11.1 研究背景11.2 研究意义31.3 国内外研究现状41.4 研究内容51.5 论文结构62 WEB 应用相关技术 72

12、.1 HTTP 协议 72.2 网络爬虫92.2.1 网络爬虫的原理 92.2.2 爬虫的爬行策略 102.3 SQL 注入漏洞 112.3.1 SQL 注入的原理 112.3.2 SQL 注入的分类 122.3.3 SQL 注入的攻击技巧 152.4 XSS漏洞 172.4.1 XSS 漏洞的原理 172.4.2 XSS 漏洞的分类 172.4.3 XSS 漏洞的攻击技巧 202.5 PYTHON 概述 222.6 本章小节223 系统需求分析与设计233.1 系统总体需求分析233.2 功能需求分析243.3 性能需求分析273.4 系统总体架构设计273.5 系统功能模块设计293.5.

13、1 配置文件模块 293.5.2 调度模块 293.5.3 网络爬虫模块 303.5.4 SQL 注入模块 323.5.5 XSS 模块 343.5.6 报告生成模块 363.6 本章小节374 系统的实现384.1 系统主界面 384.2 配置文件模块的实现 384.3 网络爬虫模块的实现 394.3.1 URL 提取 404.3.2 表单提取 434.4 SQL 注入模块的实现 444.4.1 测试脚本库 444.4.2 SQL 注入模块的实现过程 474.5 XSS 模块的实现 514.5.1 测试脚本库 514.5.2 XSS 模块的实现过程 524.6 报告生成模块的实现 544.7

14、 本章小节 565 系统测试 575.1 系统测试环境 575.2 系统功能测试 575.3 系统性能测试 605.4 系统测试结论 615.5 本章小节 616 总结与展望 626.1 总结 626.2 展望 62参考文献 64北京交通大学硕士专业学位论文目录独创性声明66学位论文数据集67北京交通大学硕士专业学位论文绪论1 绪论1.1 研究背景进入二十一世纪以来,随着计算机技术的迅猛发展,我国在网络建设方面取得了令人瞩目的成就,基于Web 的应用程序在不断增多,应用于日常生活、工作等各个领域,如:网上商城、办公系统、网上银行、微博等。Web 应用程序使得信息共享变得更加简单,将各种信息汇集

15、到一起,无形地把世界的各个角落连接在一起。通过互联网,用户可以根据自己的需求轻易地获得海量的新闻消息、资料等,同时也可以随时随地地分享自己的资源、消息。与传统的C/S 架构的应用程序相比较,基于B/S 架构的 Web应用程序使用户的操作变得更加简单、方便,用户不需要安装特定的客户端程序,所有操作都在浏览器上完成。用户只需要点击相应的按钮,浏览器就会向服务器发送HTTP 请求,服务器端接收到请求后会对其进行处理,并将处理后的结果发送回给客户端的用户。基于Web 的应用使得用户不需要安装过多的软件,降低了对用户电脑的要求,而且交互性更强,深受用户的喜欢。同时,开发者维护应用程序也变得更加方便、成本

16、更低,升级程序的时候只需要在服务器端更新程序,而不需要升级客户端的应用程序。Web 应用程序极大地丰富了人们的生活方式,也给社会带来了很大的价值。但是, Web 应用程序也带来了不少安全问题,由于其开放性,使得其更加容易受到黑客的攻击,并且传统的防护设备对其没有防护效果。Web 应用受到攻击会造成很多的危害,比如:用户的个人信息被泄露,网上银行的钱被非法盗取,网站的网页内容被篡改,服务器瘫痪无法提供正常的服务等。互联网和新闻媒体时常会报道关于Web 应用程序的安全攻击事件,给企业和用户造成了巨大的损失。2011年年底, CSDN 中文社区的数据库被黑客窃取并公布在互联网,里面包含大量用户的账号

17、、密码等个人信息,随后,人人网、开心网等社交网站的用户信息也被泄露,不法分子可以利用这些信息来从事诈骗等不法行为,严重危害用户的财产安全和隐私安全。2014年年底, 超过 10万条的12306火车票网站的用户数据被泄露,因为这些数据包括身份证、电话号码等敏感信息,如果被不法分子利用,造成的危害可想而知。根据分析,12306网站的信息泄露是由数据库撞库造成的,黑客利用已知的用户和密码信息来尝试登陆其他的网站,因为很多的用户在不同的站点使用相同的账号、密码。另外,索尼游戏和索尼影业在2011 年和 2014 年分别遭受黑客的攻击,造成了公司的巨大经济损失。由于黑客能从中谋取暴力,使得攻击事件时常发

18、生。Web 应用程序遭受攻击的根本原因是Web 应用的源代码存在漏洞或者服务器端配置不正确,一方面是开发人员缺乏安全意识、技术和经验等,另一方面是Web应用程序通过80 端口提供服务的,传统的防火墙无法阻止黑客的攻击,因为黑客也是通过合法的80 端口进行攻击的。常见的Web 应用漏洞包括SQL 注入、 XSS漏洞、上传漏洞、敏感信息泄露、逻辑漏洞等,根据全球顶尖的Web 应用安全研究组织OWASP 发布的最新一期的报告显示,排名前十的漏洞为:(1) 注入漏洞注入攻击又分几种,最常见的注入攻击有SQL 注入,其能直接导致目标站点的数据被窃取,攻击威力十分大。另外,还包括XML 注入、 LDAP

19、注入以及系统命令注入等。造成注入攻击的根本原因是程序没有对用户输入的数据进行安全检查和过滤,使得服务器执行了用户输入的恶意命令。(2) 失效的身份验证和会话管理如果 Web 应用程序的身份验证机制或者会话管理的程序设计不当,会使攻击者可以绕过目标程序的身份认证机制,从而攻击者可以在不需要知道其用户的密码情况下登录他们的账户,比如:如果用户的cookies设计不当,使得伪造其他用户的cookies成为可能,从而绕过登录验证机制。(3) XSS 漏洞XSS 漏洞是一种客户端漏洞,其攻击对象主要是客户端用户。XSS 攻击是指在页面中插入恶意的脚本代码,通常是 JavaScript代码, 当用户访问包

20、含有攻击代码的页面时就会触发其中恶意代码。XSS 漏洞主要被用于盗取用户的会话认证消息 cookies、网页挂马等。(4) 不安全的直接对象引用不安全的直接对象引用是指没有对目录、文件做任何保护或者访问控制,导致攻击者可以直接访问未授权的数据。(5) 安全配置错误安全的配置错误主要是由没有正确配置服务器造成的,比如:列目录的漏洞就是一个例子,很多时候默认配置是不安全的。(6) 敏感信息泄露敏感信息泄露的漏洞主要是指Web 应用程序没有正确保护用户的敏感数据,如用户的密码、个人信息等。比如一些粗心的程序员会在登录页面的注释内容中写着管理员的账号和密码。(7) 功能级访问控制缺失功能级访问控制缺失

21、是指没有正确地做好访问控制,比如有的页面只有管理员登录后才能操作,但由于没有做相应的限制,用户在不需要登录的情况下就可以访问到这个页面并能进行相应的操作。(8) CSRF 漏洞跨站请求伪造漏洞( CSRF 漏洞) 是指攻击者可以利用已授权用户的浏览器给目标站点发送HTTP 请求,因为应用程序不含有不可预测的因子,导致攻击者伪造各种操作的请求成为可能。(9) 使用含有已知漏洞的组件为了重复利用一些Web应用程序的功能,把他们开发成Web组件, 比如: Web开发框架,函数库文件等,当使用存在漏洞的组件时就可能遭受攻击。(10) 未验证的重定向和转发有些情况下,Web 应用程序会把用户重定向其他页

22、面,如果没有对跳转页面进行验证或者验证不正确,攻击者可以利用这个漏洞来将用户重定向到挂马的网站或者钓鱼网站。Web 应用的安全问题是一个迫切的问题。根据国家互联网应急中心发布的 2014 年我国互联网网络安全态势报告数据显示,我国的网络安全形势不容乐观,和2013 年相比,2014 年在 CNCERT 上通报的漏洞事件增长了3 倍,还有很多未被纰漏的漏洞。我国的互联网市场和网名数量在高速增长,截止2014 年 12月底,网站数量达360 多万个,互联网服务商达1000 多家。在这个信息化迅速发展的时代,应该足够重视网络安全问题。1.2 研究意义在斯诺登事件发生之后,我国也从国家层面上高度重视网

23、络安全的问题,并在 2014年成立了中央网络安全和信息化领导小组。网络安全不仅关系到国计民生,还与国家安全密切相关,涉及到国家政治、军事和经济各个方面,甚至影响到国家的安全。随着计算机的广泛应用,网络安全的重要性尤为突出。面对日益严峻的Web 安全问题,大家也开始逐渐重视安全问题,为了提高Web应用程序的安全性,很多个人和企业开始给服务器部署一些针对Web 层面的防火墙, 也就Waf, 能够从一定程度上防御攻击事件的发生,但还是存在被攻击的可能性,因为很多情况下黑客可以绕过Waf。要彻底避免Web 应用程序的漏洞,最理想的情况是开发一个没有漏洞的Web 应用程序,但对于大部分的开发者来说,这是

24、很难实现的。最可行的办法是在目标程序上线投入使用之前,尽可能早的发现其存在的漏洞,便于开发者能够及时的修复漏洞。所以,开发一个Web 应用漏洞检测系统是很有意义的事情。Web 应用漏洞检测系统通过主动扫描目标Web 应用程序来发现其存在的漏洞,检测的基本原理是模拟黑客攻击的过程,向服务器发送包含特定测试脚本的HTTP请求,然后通过分析响应包的信息来判断其是否存在漏洞。要求Web 应用漏洞检测系统能够发现常见的Web 漏洞,本文以SQL 注入、 XSS 漏洞为主要研究对象,漏洞检测完毕后能够生成扫描报告,为开发者和运维人员提供参考。为了能够准确可靠地检测出目标站点的漏洞,需要对各种Web 漏洞的

25、原理有较深的理解。所以,本文将在研究Web 应用的漏洞的前提下,开发一个可靠的Web 应用漏洞检测系统,本课题有较大的研究意义。1.3 国内外研究现状随着 Web 应用漏洞导致的攻击事件越来越多,逐渐被大家重视,不少公司和组织投入到Web 漏洞扫描器开发中,有商业的,也有免费并开源的。通常情况下,比较出名的扫描器都能检测出常见的Web应用漏洞,包括 SQL 注入漏洞、XSS漏洞、列目录等,但不同的扫描器都有各自的特点和差异,主要表现在扫描速度、漏报率、误报率、功能强大程度方面。在国外,对Web 漏洞检测工具的研究比较早,首先对它们进行分析。(1) AWVS( Acunetix Web Vuln

26、erability Scanner)AWVS 是一款商业性质的Web 应用程序漏洞检测工具,功能比较强大,能够检测出常见的Web应用漏洞,包括SQL 注入漏洞、XSS漏洞、CSRF漏洞等,能够生成扫描报告,另外,它也包括一些模糊测试的模块。但该工具是商业化的,普通用户是没法使用的,并且它的扫描速率比较慢。(2) IBM Rational AppScanAppScan 是由 IBM 公司开发的漏洞检测工具,也是属于商业性质的。该工具的特点是能够检测出缓冲区溢出(buffer overflow)及最新的Flash/Flex 应用漏洞等。 AppScan 的缺点是占用内存大,误报率相对较高。(3)

27、NessusNessus是目前使用人数最多的漏洞扫描工具之一,它有多个版本,包括免费版、商业版等,免费版的能够满足大部分普通用户。Nessus漏洞扫描器的漏洞库很庞大, 并且实时更新,能检测出大部分的漏洞。Nessus是基于B/S模式的扫描系统,操作界面美观,能够生成详细的扫描报告,并且能够给出漏洞的详细情况和修复意见。(4) w3afw3af是世界上著名的安全公司Rapid7的 Web安全主管Andres riancho负责的一个开源扫项目,可以用于扫描Web应用程序的漏洞。w3af 是由 Python编写的,项目包括130多个插件,可以用于检测SQL 注入、文件包含、XSS 等漏洞。用户可

28、以根据需求添加相应的插件,但对于初学者来说可能比较麻烦一些,配置相对较复杂。(5) NiktoNikto 是一款开源的Web应用程序漏洞扫描器,由Chris Sullo 等人开发,开发所用的语言是Perl,只有安装Perl 编译环境才能运行。该工具包含1200多种服务器版本和200 多种特定服务器问题。但是该软件更新频率比较慢,无法检测出最新的漏洞。由此可见,不同的扫描器都有各自的优缺点。一般而言,商业性质的扫描器具有庞大的漏洞库,漏洞检测率相对较高,能提供详细的扫描报告,功能更加强大,但是源码是不公开的,并且价格昂贵。开源的扫描器代码是公开的,并且是免费的,用户根据需求开发必要的插件,可扩展

29、性好,但是包含的漏洞库少,扫描准确率相对较低。在国内,对Web 应用的漏洞的研究起步较晚,所以相应的漏洞检测工具也相对较少。国内比较著名的Web 漏洞扫描工具主要有绿盟的极光、安恒的明鉴、启明星辰的天镜,这三款产品都是商业性质的。绿盟的极光综合运用了包括NSIP在内的多种领先的技术,能够高效、准确地发现目标站点存在的安全漏洞,并采用风险评估模型将风险量化,提供专业的解决方案;启明的天境是能够全面地扫描各种 Web 应用的漏洞,能够给出预防措施和修复建议,有效审核风险控制策略;安恒的明鉴最大的特点是不仅具有强大的漏洞扫描功能,还提供了强大的渗透测试和安全审计功能,并且,系统的误报率和漏报率等各项

30、关键指标均达到国际领先水平。1.4 研究内容针对现有Web 应用比较严峻的安全形势,本文的主要目标是设计并实现一个使用简单、功能强大、性能良好的Web 应用漏洞检测工具。该工具能够检测出包括 SQL 注入和 XSS 漏洞在内的常见Web漏洞,误报率、漏报率较低,具有较高的检测效率和正确率,并且能够生成扫描结果报告。本文的主要研究内容如下:(1) 研究了 HTTP 协议等常见的Web技术。(2) 研究了包括SQL 注入、 XSS 漏洞等常见的Web应用漏洞,分析了漏洞的 原理、攻击技巧等内容。(3) 研究了网络爬虫技术,分析了网络爬虫的原理等内容。(4) 研究了 Web应用漏洞的检测技术,设计并

31、实现了Web应用漏洞检测系统,并通过实验验证了该工具的有效性。1.5 论文结构第一章:绪论。介绍了本文的研究背景、研究意义和研究内容,并分析了国内外研究现状。第二章: Web 应用相关技术。本章介绍了Web 应用相关技术,包括HTTP 协议和网络爬虫技术,并详细分析了SQL 注入漏洞和XSS 漏洞的原理、分类以及攻击技巧等内容。第三章:系统需求分析与设计。本章对系统进行了需求分析和设计,重点介绍了系统的功能需求和性能需求,并且详细设计了各个功能模块。第四章:系统的实现。详细描述了各个功能模块的实现过程。第五章:系统的测试。对系统进行了测试,主要包括系统的功能测试以及性能测试,并通过实验验证了系

32、统的有效性。第六章:总结和展望。对论文的研究内容进行了总结,分析了其优缺点,并提出了将来的工作。9北京交通大学硕士专业学位论文Web 应用相关技术2 Web 应用相关技术本章节将介绍一些Web 应用相关的技术,包括HTTP 协议和网络爬虫技术,介绍用来开发本文系统的开发语言Python, 重点对 SQL 注入漏洞和XSS漏洞进行详细的分析。这些技术知识和原理都是开发Web 应用漏洞检测系统的前提,也是必须的。2.1 HTTP 协议本文所研究的Web 应用漏洞检测系统是基于HTTP 协议的,爬虫模块和漏洞检测模块都是基于HTTP 协议实现的。漏洞检测过程是构造并发送带有一定特征的 HTTP 请求

33、,然后分析服务器发送回来的响应包的内容来判断是否存在漏洞,所以深入研究HTTP 协议是很有必要的。HTTP 协议(Hypertext Transfer Protocol)是访问Web 应用程序的通信协议。最早的时候,HTTP 协议只是应用于单纯地获取静态资源,随着 Web技术的发展,HTTP 协议还能用于发送、删除等操作。HTTP 协议是使用TCP 协议作为传输机制,工作在应用层,它是无状态、无连接的协议,其默认端口为80 端口。 HTTP 协议由两部分组成:请求和响应,其工作模型如图2-1 所示。图 2-1 HTTP 协议模型Figure 2-1 HTTP protocol model(1)

34、 HTTP 请求HTTP 请求通常由三部分组成:请求行、请求头以及请求实体。以下是一个登POST /Manage/Login.aspx HTTP/1.1Host: User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0Iceweasel/31.5.0Accept: textml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, de

35、flateReferer: http:/example/Manage/Login.aspxCookie: ASP.NET_SessionId=0kl5oszdeofldgqpwxhlbhpx Connection: keep-aliveContent-Type: application/x-www-form-urlencodedContent-Length: 815name=test&password =passwd&LoginButton=login其中第一行为请求行,POST代表该请求为POST请求, “ /Manage/Login.aspx”代表目录,“ HTTP/1.1

36、”表示HTTP 协议的版本;最后一行是请求实体,即向服务端传输的参数;中间部分则是HTTP 请求头内容,请求头与请求实体之间用空行(两个CRLF)隔开。HTTP 请求的方法有多种,包括GET请求、POST请求、Head请求、Trace请求、 PUT请求、 OPTIONS 请求等, 其中 GET请求和 POST请求是最常用的方法,GET 请求一般用于获取服务器端的资源,而POST 请求则主要用于向服务器端传送数据,安全性更强。(2) HTTP 响应HTTP 响应主要包括三部分:状态行、响应头、响应实体。以下是一个HTTP响应信息:HTTP/1.1 200 OKDate: Fri, 15 May

37、2015 12:45:59 GMTServer: Microsoft-IIS/7.0X-Powered-By: ASP.NETCache-Control: privateContent-Type: text/html; charset=utf-8Content-Length: 36286<!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Transitional/EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns

38、="/1999/xhtml"><head><title>响应信息中的第一行为状态行:“ HTTP/1.1”表示 HTTP 协议; “ 200”表示响应状态码;“ OK”表示响应成功。状态码以下到空行为止是响应头信息:Data 表示响应时间,Server表示 Web服务器等等。空行以下部分为响应实体,即显示在浏览器中的内容。HTTP 响应信息必须的第一行必须是状态码,说明请求的结果。根据响应码的第一位数字,可以将状态码分为5 类:1XX:提供信息。2XX:请求被成功响应3XX:客户端的请求被重定向其他资源。4XX:

39、客户端的请求包含某种错误5XX:服务器执行请求时出现错误。2.2 网络爬虫网络爬虫在互联网中的应用十分广泛,主要的目的是从互联网中获取或收集自己想要的信息,网络爬虫是一个应用程序或者脚本,开发语言可以是C、 Java、Python 等。由于网络爬虫能够从互联网中自动抓取网页,并提取有用的信息,这对于互联网发达的今天,是很有用途的,并且已经广泛应用于各个领域中,最常见的就是百度搜索引擎,它的资料都是通过爬虫程序在互联中抓取并取相关的信息。在 Web 应用漏洞检测系统也必须用到网络爬虫技术,下文将详细地分析网络爬虫的原理和爬行策略。2.2.1 网络爬虫的原理网络爬虫又称为网络机器人,是一个自动抓取

40、网页的应用程序,是网络搜索引擎的重要组成部分,程序会按照一定的规则抓取满足条件的信息,百度、 搜狗、谷歌等搜索引擎主要就依赖于爬虫。网络爬虫的基本原理为:选取一些初始链接URL 作为爬虫队列,依次访问这些页面, 把从这些页面中获取的新链接URL 放入到待爬虫队列中,重复这个过程,直到满足特定的条件为止。网络爬虫的功能非常强大,主要是从互联网中获取特定的信息,具有广泛的用途,除了搜索引擎外,一些商品价格比对网、招聘网等站点主要就是通过网络爬虫实现的。网络爬虫的基本流程如图2-2 所示。图 2-2 网络爬虫的基本流程Figure 2-2 The Basic Process of Web Crawl

41、er结束2.2.2 爬虫的爬行策略网络爬虫的策略分为三种,即广度优先策略、深度优先策略和最佳优先策略。下面对他们做详细的介绍。(1) 广度优先爬行策略广度优先策略也称为宽度优先策略,首先从初始队列中选择一个URL 作为候选 URL,访问候选URL,访问并获取该URL 页面中新的RUL,并从新的URL 中选取一个URL 作为候选URL, 重复该过程,直到处理完该线路的所有URL 为止。然后再选取与初始URL 队列中相邻但是未被访问过的URL 作为候选URL,重复上述的步骤,直到处理完所有的初始URL。广度优先策略的优点是能够遍历整个站点的页面,但缺点是有可能会沿着一条线路一直爬行下去,因为现在的

42、Web 站点错综复杂,可能会发生意想不到的问题。(2) 宽度优先爬行策略宽度优先遍历策略是指首先从初始队列中选择一个URL 作为候选URL, 访问并获取新的URL 作为新的URL,然后选择初始队列中的未被访问的URL 作为下一个候选URL,将获得的新的URL 添加到新的URL 队列中。等处理完初始队列中所有 URL 之后,再处理新的URL 队列。即处理完初始队列中的所有URL 后,才会处理下一层新获取的URL 队列。重复上述的过程,直到爬虫层数达到设定的层数为止。宽度优先策略的优点实现起来比较,缺点是可能会爬取到很多没用的网页,降低了网络爬虫的效率。这种策略比较适合综合性搜索引擎,因为覆盖范围

43、广。(3) 最佳优先爬行策略最佳优先策略是前面两种爬虫策略和算法的结合,从初始URL 中获得新的URL 后,不会把它们都加入都爬取队列中,会根据特定的算法选择满足特定条件的 URL 加入到新的队列中,比如可以根据是否与主题相关来的算法来判断URL是否满足条件。重复这个过程,直到满足条件为止。这种爬行策略的优点是爬行的页面相关性很高,缺点是算法实现起来比较复杂,爬行的效果完全取决于算法的优劣,网页处理算法可能会错误地处理一些与主题相关URL。2.3 SQL 注入漏洞在过去的十几年里,SQL 注入漏洞被广泛地利用。国内外很多公司的网站的都出现过SQL 注入漏洞,导致很多重要的信息被窃取。例如: 2

44、008 美国的多个公司的内部系统存在SQL 注入漏洞,黑客窃取了上百万的信用卡号,还搭建非法网站出售这些个人信息,被不法分子利用后将造成严重的后果。SQL 注入漏洞的造成危害还是非常严重的,需要高度重视。而且,随着技术的发展,有不少了开发出了一些成熟的SQL 注入漏洞利用工具,即使你对SQL 注入漏洞没有很深的理解,只要会用工具也可以发动攻击。虽然,近些年大家逐渐开始重视对SQL 注入漏洞,也采取了一些防护措施,但是仍有很多网站存在SQL 注入漏洞。2.3.1 SQL 注入的原理SQL 注入是指在Web 交互页面中写入恶意SQL 命令语句,由于服务器没有验证用户输入的数据是否合法,导致数据库服

45、务器执行这些SQL 语句。 SQL 注入漏洞一般发生在页面请求的查询字符串和可以提交表单内容的地方,比如:登录页面,如果登录表单存在SQL 注入漏洞,则攻击者不需要知道用户的密码就可以登录成功。下面通过一个例子来详细说明SQL 注入的原理。比如:一个登录页面判断用户是否为何合法用户的关键代码为:int count= ( select count(*) from users where username='$username' and password='$password) ' ;if (count > 0) echo 用户合法“”;elseecho “用

46、户非法 ” ;即当 count值大于 1 的时候就认为该用户输入的用户名和密码是正确的,其中$username和 $password分别是用户输入的用户名和密码。此时,如果攻击者输入用户名为admin' or 1=1 or 'a'='a,密码则随便输入,这里为a,这时候后台的SQL语句为:select count(*) from users where username='admin' or 1=1 or 'a'='a' and password='a'因为 1=1 和 'a'=&#

47、39;a'恒为真,根据and和or的优先级,可以计算出where条件后门的逻辑语句恒为真,所以count的数量肯定大于0, 程序会认定该用户是合法的,允许这个用户登录。由此可见,用户在不知道用户名和密码的情况下也可以登录目标站点,这种注入方式也叫做万能密码。除了利用万能密码外,也可以利用SQL 语句的注释符来进行注入,例如:通过登陆框的提示信息可以判断目标站点是否存在一个用户,假如攻击者知道存在一个用户admin,但是不知道它的密码。这时候攻击者可以输入用户名admin'-,密码可以随便输。这时候后台的SQL 语句为:select count(*) from users whe

48、re username='admin'- and password='a'其中“ -”为注释符,其后面的语句不起作用, ,所以这种情况只要知道用户名,不知道密码也可以成功登录目标站点。2.3.2 SQL 注入的分类根据注入方式的不同,可以将 SQL 注入分为以下几类:报错注入,布尔盲注,时间盲注,联合查询注入。报错注入和布尔注入是最常见的两种注入方式,下文将详细分析这四种注入方式。(1) 报错注入报错注入是指当数据库服务器发现执行的SQL 语句存在错误的时候,会将具体的错误原因返回给页面。很多时候,攻击者故意输入非法的数据是服务器报错,从该错误页面中获取想要的信

49、息,以便进一步实施攻击。比如:图2-3 就是 SQLSever服务器返回的一个错误页面,显示了发生报错的原因。图 2-3 报错注入Figure 2-3 Error-based Injection从该页面中可以看到数据库服务器的版本信息,通过构造不同的注入语句可以获得很多有用的信息。(2) 布尔盲注布尔盲注是通过构造不同的语句来观察页面变化的情况。很多情况下,即使服务器端发现SQL 语句存在错误,但也不会将具体的错误信息返回给用户。比如:某个新闻页面的URL 为:句来判断它是否存在SQL 注入漏洞。首先, 构造 and 1=1, 访问看页面是否响应正常;然后构造 and 1=2,访问看页面是否响

50、应正常。如果第一个页面返回正常,第二页面返回不正常就说明该页面存在SQL 注入漏洞,因为 1=1 为永真,而1=2 为永假。因次,可以根据这种方式来判断目标是否有注入漏洞或者获取数据库中的信息。如果想猜测数据库中是否存在某个表格,需要构造以下注入语句: and (select count(*) from table)>1如果页面响应正常,说明(select count(*) from table)>1 成立,数据库中存在表table,反之则不存在。(3) 时间盲注时间盲注是在注入语句中添加一段延长时间的代码,如果页面的响应延迟了预期的时间,说明存在SQL 注入漏洞。下面介绍不同数据

51、库的时间延迟技术。MSSQL Server中提供了WAITFOR DELAY 函数, 利用这个函数可以达到延迟的作用,通过下面的注入语句可以判断是否存在延迟注入: WAITFOR DELAY '00:00:05'访问以上链接,如果页面延迟了5 秒就说明存在SQL 注入漏洞。同样在 MySQL 中也有类似的函数,sleep函数和benchmark函数。 Sleep函数类似以上的WAITFOR DELAY 函数, benchmark函数的原型为:benchmark(count,expression)这个函数可以让数据库重复执行expression的语句,次数为count,通过重复执

52、行一个SQL 语句来达到延迟时间的效果。(4) 联合查询注入联合查询是指允许将两个SQL 语句的执行结果并到一起,通过union 来连接前后两个select语句。 使用 union 必须满足两个条件,union 前后的两个select语句必须具有相同的字段数,并且对应的字段类型相同或者兼容。下面结合实例来分析 Union 注入的过程。目标站点的链接为:1) 确定字段数一般的数据库都允许使用order by+数字来对查询的结果进行排序,其中数字代表第几列,如果页面响应正常,说明存在该列,如果页面响应不正常说明不存在该列。因此,可以通过添加order by后跟数字来判断列数,依次对数字加1,直到响

53、应页面出现异常。注入形式为: order by n。其中 n 为数字。当n=5 的时候页面返回正常,而当n=6 的时候页面返回不正常,可以确定select语句中的字段数为5。2) 确定回显字段使用 union 语句确定字段的类型和回显字段,注入语句的形式为:http:/ Id=1 and 1=2 union select 1,2,3,4,5这样构造的目的是为了确定回显字段,union 前面的语句恒为假,因为 and 1=2恒为假。其中1,2,3,4,5都是数字,属于整数型,所以需要依次替换将1,2,3,4,5替换为字符串、时间等类型,直到页面返回正常,就可以确定对应字段的类型以及回显字段。正常

54、回显的页面如图2-4 所示,根据返回的页面就可以确定2,3,4字段会显示在返回的页面中的位置以及类型。图 2-4 联合注入一Figure 2-4 Union Query-based-13) 获取内容这时候可以将想要获取的信息通过回显页面来获取,比如想要获得目标页面数据的名字可以构造如下语句:http:/ id=1 and 1=2 union select 1,2, db_name(), 4,5其中db_name()为获取数据库名字的系统函数。访问以上页面得到的结果如图所示图 2-5 联合注入二Figure 2-5 Union Query-based-2从图 2-5 可知,当前数据库的名字为Ms_SqlInject。获取数据库名字后,可以根据数据库中的系统函数sysobjects来依次获取数据库中的其他内容,包括表、字段以及字段内容。2.3.3 SQL 注入的攻击技巧随着开发人员和运维人员安全意识的提高,SQL 注入攻击已经没有像以前那样容易了,开发人员可能在代码层面或者服务器端安装waf 来防御攻击。但是,由于开发人员的能力有限或者疏忽,还是有绕过的可能性,包括绕过waf 的防护。一般常见的过滤规则都是基于特征匹配的方法,即过滤过滤关键字。经过研究和分析,对SQL 注入的攻击技巧做如下总结:(1) 大小写混写之前,有一些开发人员写的过滤规则只是单纯的利用黑名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论