Web应用安全-漏洞扫描器设计与实现

摘 要

随着Web2.0、社交网络、微博等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上。Web应用的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用Web应用程序的漏洞得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害[1]。

针对上述问题,本文在分析了Web应用安全漏洞的基本原理及其产生原因的基础上,介绍了漏洞扫描方法及现有的漏洞扫描器扫描关键技术,针对现有Web应用安全漏洞扫描工具的不足,提出了一种高效的基于优化爬虫的Web应用漏洞扫描机制。基于本文提出的漏洞扫描机制,为典型的Web漏洞XSS漏洞及SQL注入漏洞设计了扫描方法,并实现了SQL注入漏洞和XSS漏洞的扫描。设计实现了一款基于SAAS模式的可用性高,可扩展性高,性能良好的Web应用安全漏洞扫描器。本文主要工作如下:

1.分析各种不同的 Web 应用程序漏洞的特性以及 Web 应用漏洞的扫描技术。

尤其详细剖析了漏洞出现次数最多的 SQL 注入漏洞,XSS 漏洞,信息泄漏漏洞,包括产生原因,攻击方式,检测方法和防御方法等等。

  1. 研究网络爬虫技术,设计了一种基于广度优先策略的优化网络爬虫算法,使得它它不仅能够抓取网页,还能对网页进行解析,并且有效去重。运用正则表达式的方法,提取出网站的所有的可输入域,其中还要对网址进行 URL 标准格式化,URL 过滤,URL参数变换,增强了系统的性能。

  2. 设计出 Web 应用漏洞扫描器;实现了对 SQL 注入漏洞,XSS 漏洞和目录遍历漏洞的扫描功能,采用漏洞信息库,作为

基于Web应用安全漏洞扫描器的扫描结果,表明该扫描方法能够有效的扫描SQL注入和XSS漏洞,同时也验证了本文设计的Web应用漏洞扫描机制的有效性和可行性。

关键词:Web应用安全,安全漏洞,漏洞扫描,SQL注入,XSS漏洞

Abstract

With the birth of a series of new Internet products such as Web2.0, social networks, and Weibo, Internet applications based on the Web environment have become more and more extensive, and various applications in the process of enterprise informatization have been set up on the Web platform. The rapid development of Web applications has also caused hackers to pay close attention. The following is the highlight of Web security threats. Hackers use Web application vulnerabilities to gain control of Web servers, falsify Web content, and steal important internal data. The more serious is the implantation of malicious code on web pages that infringe website visitors.

Web application penetration testing technology is an extremely effective active defense technology developed under the security environment at home and abroad in recent years. Through penetration testing, Web security vulnerabilities can be discovered as early as possible and operators can be alerted to prevent them from being repaired.The Web application security vulnerability scanner is an important tool in the Web application penetration testing process. It can effectively assist the tester through automation or a combination of manual and automated methods to reduce the workload of the tester. Web application vulnerability scanners complement intrusion detection systems and firewalls, which together form the security defenses of Web systems. The design of Web application vulnerability scanner can help people to conduct self-check on the website system, find problems and prevent hackers from intruding. It can also be used as a tool for penetration testing with professional security personnel to save labor costs. Therefore, the study of vulnerability scanning technology is extremely important.

This paper elaborates the basic principles and causes of Web application security vulnerabilities, introduces vulnerability detection methods and existing key scanner detection technologies, and proposes a solution to the weaknesses of existing Web application security vulnerability detection tools. An efficient web application vulnerability detection mechanism based on optimized crawler and feature recognition. Based on the vulnerability detection mechanism proposed in this paper, a detection method is designed for typical Web vulnerability XSS vulnerability and SQL injection vulnerability, and the detection of SQL injection vulnerability and XSS vulnerability is implemented. Design and implement a vulnerability scanner based on SAAS model with high availability, high scalability and good performance for Web application security.

The detection result based on Web application security vulnerability scanner shows that this detection method can effectively detect SQL injection and XSS vulnerabilities. It also verifies the validity and feasibility of the Web application vulnerability detection mechanism proposed in this paper.

Keyword: Web Application Security,Security Vulnerabilitiy, Vulnerability Scan, SQL Injection, XSS Vulnerability

表格索引

表 2.1 OWASP Top 107

表 2.2 扫描器三大指标与准确率对比表11

表 3.1 常见HTTP请求方法24

表 3.2 常见HTTP状态码24

表 3.3 常见字符集及定义方式26

表 4.1 本文设计漏洞扫描器与其他两款扫描器扫描结果对比表38

插图索引

图 2.1 网络爬虫流程图6

图 3.1 Web应用安全漏洞扫描器系统架构图14

图 3.2 Web应用安全漏洞扫描器功能架构图15

图 3.3 优化网络爬虫流程图17

图 3.4 SQL注入漏洞扫描流程图18

图 3.5 XSS漏洞扫描流程图20

图 3.6 任务调度流程图21

图 3.7 TCP-Connect扫描截图22

图 3.8 TCP-SYN扫描截图23

图 3.9 UDP扫描截图23

图 3.10 爬虫模块类图25

图 3.11 SQL注入漏洞扫描类图27

图 3.12 XSS漏洞扫描类图29

图 3.13 任务调度模块类图30

图 4.1 Web应用安全漏洞扫描器部署图33

图 4.2 SQL注入漏洞测试环境34

图 4.3 XSS漏洞测试环境34

图 4.4 扫描结果35

图 4.5 漏洞分布情况展示36

图 4.6 添加新任务36

图 4.7 扫描队列37

图 4.8 登录界面37

图 4.9 漏洞报告38


目 录

摘 要I

AbstractIII

表格索引V

插图索引VII

第一章 绪论1

1.1 选题背景及意义1

1.2 国内外现状分析2

1.3 论文工作内容3

1.4 论文组织结构3

第二章 Web应用安全漏洞扫描技术概述5

2.1 网络爬虫与Web应用程序基础5

2.1.1 基本概念5

2.1.2 爬取策略5

2.1.3 爬虫在漏洞扫描中的作用6

2.1.4 HTTP 协议模型7

2.1.5 Web 应用体系结构7

2.2 安全漏洞8

2.2.1 基本概念8

2.2.2 漏洞类型9

2.2.3 漏洞检测技术12

2.2.4 Web 应用漏洞产生的原因14

2.2.5 Web 应用漏洞的分布15

2.2.6 Web 应用漏洞的风险评估15

2.3 国内外漏洞扫描器研究分析16

2.3.1 分析目的16

2.3.2 影响准确率的三个因素16

2.3.3 对比总结17

2.4 Web 应用漏洞分析及其检测方法18

2.4.1 SQL 注入漏洞18

2.4.2 XSS 漏洞19

2.4.3 目录遍历漏洞22

2.5 网络爬虫在扫描器中的应用23

2.5.1 聚焦爬虫概念23

2.5.2 聚焦爬虫技术分析23

2.6 本章小结24

第三章 Web应用安全漏洞扫描器分析设计与实现25

3.1 Web应用安全漏洞扫描器需求分析25

3.1.1 功能需求25

3.1.2 非功能需求27

3.2 Web应用安全漏洞扫描器系统应用架构设计28

3.3 Web应用安全漏洞扫描器系统功能设计29

3.3.1 网络爬虫模块的优化及设计29

3.3.2 SQL注入扫描模块的设计32

3.3.3 XSS漏洞扫描模块的设计33

3.3.4 任务调度模块的设计35

3.3.5 可用性检测模块的设计35

3.3.6 插件机制的设计39

3.3.6 数据库的设计41

3.4 Web应用安全漏洞扫描器系统功能实现42

3.4.1 爬虫模块的实现42

3.4.2 SQL注入漏洞扫描的实现45

3.4.3 XSS漏洞扫描的实现47

3.3.4 任务调度模块的实现48

3.3.5 可用性检测模块的实现50

3.5 本章小结50

第四章 Web应用安全漏洞扫描器测试及分析51

4.1 测试环境51

4.1.1 扫描器部署环境51

4.1.2 漏洞测试环境51

4.2 测试过程53

4.2.1 功能测试53

4.2.2 非功能测试55

4.3 测试结果分析56

4.4 本章小结56

第五章 结束语59

5.1 论文工作总结59

5.2 后续工作展望59

致 谢61

参考文献63

第一章 绪论

近年来,Web应用程序因其特有的优点在数量和重要性方面都得到了快速发展,给人们的生活和工作各方面都带来了极大的便利,但是同时Web应用程序也因其自身特点而引起了攻击者的强烈关注,Web应用安全漏洞的数量和应用也逐渐增大,安全威胁日益凸显。

1.1 选题背景及意义

Web 应用程序(Web Application)是指任意基于Web 运行,同时用户交互页面停留在 Web 浏览器中的应用程序,由于 Web 应用程序以其便捷,美观和功能强大的特点广泛地博得了用户的青睐。在 Web1.0 时代,网站通过一种单向的信息发布方式和用户打交道,首先它会把所有资源存放到服务器上,然后通过 Web 应用程序或其他网络通信渠道发布,用户会通过 Web 应用程序获取相应的资源和信息。然而在 2004 年以后,Web2.0 应用的问世悄然改变了这种单向的信息传递方式,用户不仅可以浏览 Web 页面的内容更可以向服务器提交信息修改网页的内容,这样这些加强发布者和用户交互性的特性让用户可以成为网页内容的创造者。这些新技术提供给用户电子商务、博客、社交网络服务、即时通信、搜索等服务,极大地丰富了人们的生活与工作[4-5]。

信息共享与保证安全往往是一对矛盾,在一个自由的网络环境中,大量的流动信息为一些不法之徒提供了攻击目标。而且由于形式多样性、终端分布广、互联开放的计算机网络为攻击者提供了便利,其中大量攻击者利用 Web 应用程序的漏洞的恶意攻击,给运营商和用户带来很大的威胁和损失[6]。因此为保障 Web应用程序安全及时发现漏洞并修补漏洞成为一项很重要的事情。Web 漏洞扫描技术是模仿攻击者的行为去扫描Web应用程序的是否安全。它可以准确地发现Web应用程序中潜在的漏洞,而这也对于保障网络安全也越来越重要。

由于 Web 应用程序的安全问题越来越突出,如何严谨的评价安全的 Web应用程序,并且加强 Web 应用程序的管理有了更大的需求。入侵者可以利用广泛潜在的漏洞入侵 Web 应用系统,破坏网络安全环境。而通过安全评估可以使人们更充分的了解漏洞所带来的危害,将风险降到最低。Web 漏洞扫描技术是站在恶意攻击者的角度去审视系统的安全性,能将其中潜在的风险扼杀在摇篮中,因此是一种比较有效的主动防御技术。通过对 Web 漏洞的形成和攻击原理的研究,可以早日定位 Web 应用程序中存在的各种漏洞。在对目标站点进行扫描前,需要先设置目标站点的 URL 以及各种运行时参数,而后启动扫描器,一旦发现某些Web页面包含特定的漏洞,扫描器会将该漏洞的详细信息保存下来,并呈现在报表中,最后自动形成对目标站点的扫描报告[7]。这样可以让网站管理员和网站开发人员通过扫描特定的站点和相关 Web 网页后知晓自己 Web 页面的潜在威胁。能够尽早帮助开发者发现问题,在网站发布前,就将所扫描到的漏洞全部修复,这样可以大大减少由于 Web 应用程序漏洞而造成的损失和破坏。显然,对 Web 漏洞扫描器的研究具有重要的理论意义和实用价值。

1.2 国内外现状分析

当前,世界各国信息化都处在快速发展的阶段,信息技术的应用促进了全球资源的优化配置和发展模式的创新,互联网对政治、经济、社会和文化的影响更加深刻,信息化渗透到国民生活的各个领域,围绕信息获取、利用和控制的国际竞争日趋激烈,保障信息安全成为各国的重要议题[8]。

国外政府高度重视对漏洞资源的管控,通过建立完善的国家漏洞管理体系,将漏洞资源纳入国家管控机制。2006年,美国政府在ICAT Metabase(http://icat.nist.org)的基础上建立了美国国家漏洞库(National Vulnerability Database,NVD),由国土安全部(Department of Homeland Security,DHS)研究部署并提供建设资金,由美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)负责技术开发和运维管理。2015年5月,美国商务部工业与安全局公布了“瓦森纳协定”的一份补充协定,把黑客技术放入全球武器贸易条约出口限制的范围内,限制零日漏洞及其相关产品流出美国。

中国政府也同样高度重视网络和信息安全问题,重视对信息安全漏洞的管控。2007年,中国信息安全测评中心负责建设运维国家级漏洞资源管理平台“国家信息安全漏洞库”(China National Vulnerability Database of Information Security,CNNVD)。2009年10月18日,国家信息安全漏洞库网站正式上线运行,对外提供漏洞分析、通报服务。经过多年发展建设,CNNVD通过社会提交、协作共享、网络搜集以及技术扫描等方式,已积累信息技术产品漏洞8万余条,信息系统相关漏洞4万余条,相关补丁和修复措施2万余条,初步形成了信息安全漏洞的资源汇聚和处置管理能力。

根据CNNVD统计,截至2015年12月31日,CNNVD收录漏洞总量已达80300个,其中2015年新增漏洞7754个,与2014年漏洞新增的8623个相比有所下降,降幅为10.08%。从漏洞类型来看,2015年缓冲区溢出类的漏洞占比最大,达到14.03%。从危害级别来看,2015年新增危急漏洞608个、高危漏洞1782个、中危漏洞4588个、低危漏洞776个,其中6659个漏洞已发布修复补丁,整体修复率为85.88%,四种危害级别漏洞对应修复率分别为91.28%、92.48%、82.52%以及86.34%。

为应对层出不穷的漏洞事件,Web 应用安全问题逐渐引起了主要组织的关注。全球开源组织 OWASP 积极搜集目前 Web 应用最常见的攻击事件,成立“Web 应用十大安全隐患”项目,对各类攻击类型进行概率统计,以提升企业机构的安全意识。CNCERT/CC(国家计算机网络应急技术处理协调中心)针对安全服务和技术支持汇总发布各项互联网权威信息。另外许多国际标准组织也在应对互联网威胁做出相应的防范措施。其中W3C(WWW 联盟)和IETF(Internet Engineering Task Force 互联网工程任务组)推出的 XML 数字签名、签名规范。另外 W3C 提出 SOAP 消息加密签名方案,对预防信息泄露起到了一定的作用。

许多黑客和安全厂商也陆续推出面向不同漏洞的安全扫描工具:Nessus、Nmap、WebScarab、Acunetix Wvs(Web Vul Scanner)、W3af(Web Application Attack And Audit Framework)、APPScan、WebInspect 等。其中多为商业软件如 Wvs 、AppScan、WebInspect 等,无开放的源码,且昂贵费用,一般中小型企业无法承担。

1.3 论文工作内容

本文主要研究基于B/S架构的Web应用安全漏洞扫描器的设计与实现,分析与研究Web应用安全漏洞扫描器及其关键技术,设计并实现一个可用性高,可扩展性高,性能良好的Web应用安全漏洞扫描器。在整个过程中主要完成以下工作:

  1. 分析Web应用安全漏洞扫描器的业务需求。在分析项目建设需求的基础上,分析了系统功能与性能需求。

  2. 分析各种不同的Web应用安全漏洞的特性以及Web应用安全漏洞的扫描技术。尤其详细剖析漏洞出现次数最多的SQL注入漏洞,XSS漏洞 ,包括产生原因,攻击方式,扫描方法和防御方法等。

  3. 研究网络爬虫技术,设计一种基于广度优先策略的优化网络爬虫算法,能够抓取网页,并进行有效去重,再对网页进行解析,以期增强爬虫的性能。

  4. 设计Web应用安全漏洞扫描器系统的架构和功能模块。在需求分析的基础上,设计了系统应用架构,并进行模块化分解。

  5. 漏洞扫描使用事件驱动的方式,根据爆发的新型漏洞,不停充实漏洞信息库,做为匹配扫描的基础,增强了系统的可扩展性。

  6. 使用Python语言实现Web应用安全漏洞扫描器的各个模块,实现对SQL注入、XSS漏洞的扫描功能。

  7. 设计UI交互界面,使用户可直接通过浏览器登录使用,增强系统的可用性,UI界面可显示漏洞扫描报告及漏洞细节等内容。

  8. 对Web应用安全漏洞扫描器以特有的漏洞平台作为基准测试样本,进行测试验证。

1.4 论文组织结构

本文分六章,论文的结构安排如下:

第一章:绪论。这一部分首先通过选题背景表明了Web应用漏洞扫描工具研究的必要性,其次通过对国内外研究现状的分析得出现有Web应用漏洞扫描工具存在的不足,然后得出本文的研究目的与内容,最后给出论文的组织结构。

第二章:Web应用安全漏洞扫描技术概述。列举并简要描述了Web应用体系结构及其对应安全威胁,对Web应用安全漏洞扫描器开发过程中涉及到的网络爬虫、漏洞理论和相关技术进行概述,其中包括网络爬虫技术、SQL注入漏洞、XSS漏洞的原理、危害及漏洞扫描过程中使用的关键技术等。

第三章:Web应用安全漏洞扫描器的分析、设计与实现。对Web应用安全漏洞扫描器进行需求分析,分析对扫描器的功能需求、非功能性需求进行分析;提出了一个基于优化爬虫策略的Web应用漏洞扫描模型,综合运用现有的Web应用漏洞扫描技术,把各个模块很好地集成到此漏洞扫描模型中。对典型的Web应用安全漏洞(SQL注入、XSS漏洞)进行深入研究,针对现有Web漏洞扫描方法的不足,提出了针对SQL注入与XSS漏洞的扫描方法。基于此漏洞扫描模型,针对漏洞及其扫描技术更新快的特点,设计了一个插件式的漏洞扫描系统,并实现SQL注入、XSS漏洞的自动化扫描,最后与现有的扫描工具迸行对比分析,证明该扫描模型与扫描系统的可行性与高效性。

第四章:Web应用安全漏洞扫描器的测试及分析。阐述系统运行和部署环境,漏洞测试环境并介绍系统测试过程,针对测试结果进行分析给出结论。

第五章:结束语。对本论文进行总结与分析,并指出本文设计的漏洞扫描系统存在的不足与下一步的研究方向。

第二章 Web应用安全漏洞扫描技术概述

本章是对Web应用安全漏洞扫描相关技术的概述。主要包括网络爬虫、安全漏洞、漏洞扫描器的相关介绍。本章从网络爬虫出发,介绍了网络爬虫的原理及策略及Web应用漏洞的原理、成因及危害和防护等,并对Web应用安全漏洞扫描关键技术进行概述。

2.1 网络爬虫与Web应用程序基础

2.1.1 基本概念

网络爬虫是搜索引擎的重要组成部分,它会按照一定的规则从万维网上自动提取信息。爬虫会从某些精心挑选的种子URL开始对网页进行爬取,将从种子网页中获取到的URL添加到待爬取URL队列中,然后从待爬取URL队列中顺序取出URL,重复上述过程,直到待爬取队列为空或者满足停止条件才结束[9]。

2.1.2 爬取策略

  • 广度优先遍历策略 广度优先又称为宽度优先,是一种设计和实现相对简单的算法,它的基本思想为了覆盖尽量多的页面,在完成当前页面的遍历后,才根据等待队列的出队进行下一个页面的遍历,相当于树的层次遍历。广度优先对属于一种盲目搜寻法,它会没有选择性地抓取很多没有用的链接,导致爬虫的效率不是很高。为了覆盖大部分网页一些搜索引擎会采取宽度优先策略。

  • 深度优先遍历策略 深度优先是从起始页面开始,沿着一条路径一直跟踪下去,直到向前再也没有没被访问过的页面就往回退,回退时发现有未被访问到的相邻页面,便将该页面作为新的起始页面,重复以上的过程,直到所有页面都被访问过为止。它的优点是能挖掘整个 Web 站点或嵌套的所有资源,产生的不利结果可能是过程中过深的深度影响抓取命中率和效率,也容易陷入一条路径再也出不来。所以如今大都不使用深度优先策略。

  • 最佳优先遍历策略 最佳优先策略是指根据自己的需求制定出特定的算法,然后按照此算法基础上进行爬虫,所以大体上是广度优先策略的优化策略。最佳优先对初始链接解析后,不是把该网页所有的链接都放等待队列中,而是根据此前制定的网页分析算法解析链接,预测该链接是否是自己想要的,并将符合要求的链接放入到等待队列中,然后循环这一过程,直到满足停止条件结束。这种策略能够很好的过滤对自己“无用的”链接,相对提高爬虫的效率,但也可能忽略掉很多相关链接。 因此制定高效的网页分析算法对爬虫的结果起着至关重要的作用。 2.1.3 爬虫在漏洞扫描中的作用 网络爬虫是 Web 安全漏洞扫描工具的核心组成部分,漏洞扫描工具通过网络爬虫模块来搜集目标站点的 URL 树,从中可以分析得到后续各个攻击模块的漏洞检测点,所以网络爬虫搜集到的站点 URL 的完整性,直接影响到漏洞扫描工具的检测覆盖率。Web 安全漏洞扫描工具中的网络爬虫工作原理是基于优化的广度优先策略对目标站点网页进行抓取 [11-12]。站点的 URL构成一棵 URL 树,网络爬虫中的 URL 过滤模块,对抓取过程中的 URL 按如下策略进行过滤:站外URL、非首地址 URL 子树的 URL、重复的 URL、同类型重复出现的 URL。通过照上述策略进行 URL 过滤后,可以在保证抓取覆盖率基本不变的情况下,极大的减少 HTTP 请求个数,能够大幅度提高系统的扫描效率。同时限定初始化 URL子树的抓取策略,可以方便对大型站点进行拆分分析,提高工作效率[10]。网络爬虫的工作流程,如图2.1所示:

添加图片注释,不超过 140 字(可选)

图 2.1 网络爬虫流程图 2.1.4 HTTP 协议模型 HTTP协议是用于客户端和Web服务器之间的请求和响应的通信协议。当前协议版本是HTTP 1.1。HTTP协议在网络系统协议中的应用层协议中,主要由HTTP请求组成。和HTTP响应。它是典型的B / S模型(客户端服务器模型).HTTP是无状态协议.HTTP协议总是发起客户端的请求,服务器在处理请求后返回响应,服务器只能被动地接受请求。

  1. 首先,用户输入URL,浏览器解析URL,提取所用协议的版本,URL的域名以及获取目标的路径,可能还有一些参数。

2)浏览器使用在第一步中解析的信息构造HTTP请求,并将请求发送到服务器。

3)服务器收到请求后,会处理请求,也可能会重定向。服务器在处理请求后生成响应。

4)服务器将响应作为HTML文档发送到浏览器。浏览器解析HTTP响应头以确定返回代码是否成功返回所需的网页,并且浏览器呈现HTML文档。

最早的WWW服务包含静态文件,包括HTML页面,音频,图像,文档等。服务器正在等待客户端的请求。当收到请求时,服务器处理请求,找到用户请求的静态文件,并将文件发送到客户端。今天的Web服务器主要提供动态生成的内容。动态内容由服务器上的脚本生成。Web应用程序处理用户提交的各种输入,然后根据用户的输入生成动态内容,然后将内容返回给用户。用户在访问服务器生成的动态内容时经常提交各种自定义参数.HTTP通过以下方式提交数据具有查询字符串和POST方法的URL。漏洞扫描主要是使用各种漏洞原则来构建可以检测漏洞的HTTP请求。

2.1.5 Web 应用体系结构

本文研究的Web应用漏洞扫描器用于评测Web应用的安全性,并且本扫描器也是以Web应用的形式存在,所以有必须要先了解一下Web应用的相关知识。Web应用通常就是我们所说的网站,通常包含文字、图片,视频、音频,CSS文件,Javascript文件等静态文件,还包括一些根据用户不同的请求动态生成的不同的动态页面。搜索引擎就是一个典型的Web用,它根据用户提交的关键字动态生成不同的页面。一个常见的Web应用程序都是基于模型-视图-控制器(MVC)设计,通常由表示层,应用层,数据层组成,如图2-1 所示。

添加图片注释,不超过 140 字(可选)

图2.2 常见的Web应用架构

表示层:表示层直接与用户进行交互,获取用户的输入,验证输入的合法性,并传递给处在服务器端的应用层,应用层将处理的结果返回给表示层,客户端浏览器以HTML的形式显示处理的结果。

应用层:应用层通常也被成为业务层,它是表示层和数据层的桥梁,位于Web服务器端,他处理用户提交上来的请求,控制将用户的请求发送给每一层的业务逻辑,另外还调用数据层的接口,获取数据库的数据,产生HTTP的响应。

数据层:数据层Web应用程序与数据库的交互,连接和访问数据库,通过SQL语句向用户提交数据处理请求,查询,更新,删除,修改相关数据,并将数据处理结果返回给Web应用服务器,再由Web应用服务器返回给客户端。

2.2 安全漏洞

2.2.1 基本概念

关于漏洞(Vulnerability)的概念目前还没有统一的解释。在 RFC28281 对漏洞的有如下定义:A flaw or weakness in a system's design, implementation, or operation and management that could be exploited to violate the system’s security policy.即攻击者可以利用安全漏洞突破系统的安全机制继而可以访问到未经授权的数据[13]。

漏洞通常指软件设计和实现中的缺陷。漏洞通常分为系统层漏洞和应用层漏洞。前者主要指系统软件和通信协议中的漏洞。系统软件具有操作系统,数据库服务器和Web服务器.Web应用程序漏洞通常被认为是由各种编程语言(PHP,JSP,Python等)开发的Web应用程序/ Web服务中的安全漏洞。如果这些发现安全漏洞,它们可能被利用来攻击Web应用程序,篡改网页信息,窃取数据库信息,甚至可能授权访问服务器。通常包括SQL注入漏洞,XSS漏洞,信息泄露漏洞,跨站点请求漏洞,命令注入漏洞等。

本文所研究的主要是Web应用程序漏洞,通常是指网站程序上的漏洞,其Web应用程序的漏洞主要表现如下:1)系统存在安全方面的脆弱性;2)非法用户得以获得访问权;3)合法用户未经授权提高访问权限;4)系统易受来自各方面的攻击。

2.2.2 漏洞类型

Web应用程序漏洞通常分为两种类型:客户端漏洞和服务器端漏洞。例如,SQL注入攻击是对数据库的攻击。它们出现在Web应用程序的服务器端,是服务器端漏洞。XSS攻击通常基于javascript脚本的存在形式,通常发生在浏览器端并且是客户端漏洞。根据漏洞的应用点和使用的检测方法,漏洞可以命名为不同的类型,但是没有标准的统一漏洞分类方法。为了研究最重要项目确定的十种应用漏洞,详细阐述了一些重要的漏洞及其漏洞特征。

A1-注入

注入漏洞,例如SQL注入。当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生这些漏洞。发送恶意数据的攻击者可能会欺骗解释器执行未安排的命令或在未正确授权时访问数据。

A2-失效的身份认证和会话管理

与身份验证和会话管理相关的管理器功能通常无法正确实施,这会导致攻击者破坏密码,密钥,会话令牌或其他漏洞以冒充其他用户。

A3-跨站脚本(XSS)

当应用程序接收到不受信任的数据并将其发送到Web浏览器而没有正确的验证和转义时,这将导致跨站点脚本攻击(XSS),允许攻击者在受害者的浏览器上执行脚本,劫持用户会话,从而危及站点,并将用户重定向到恶意站点。

A4-不安全的直接对象引用

当开发人员公开对内部实现对象(例如文件,目录或数据库配置键)的引用时,会生成不安全的直接对象引用。在没有访问控制检测或其他保护的情况下,攻击者操纵这些引用以访问未经授权的数。

A5-安全配置错误

良好的安全性要求应用程序,框架,应用程序服务器,Web服务器,数据库服务器的安全配置。由于许多设置的默认值不安全,因此必须实现和维护这些设置。

A6-敏感信息泄漏

许多Web应用程序无法正确保护敏感数据,例如信息卡和凭据。攻击者可能窃取或篡改这些受到弱保护的数据,以防止信用卡欺诈和身份盗用。敏感信息需要额外的保护,例如传输过程中的存储或加密。

A7-访问控制缺失

大多数Web应用程序在UI中看到该功能之前验证对功能级别的访问。但是,当访问每个功能时,应用程序需要在服务器端执行相同的访问控制检查。如果请求未经验证,则攻击者可以欺骗请求在未经适当授权的情况下访问该功能。

A8-跨站请求伪造

跨站点请求伪造攻击强制登录用户成为浏览器,向弱势Web应用程序发送虚假HTTP请求(包括用户的会话cookie和其他身份验证信息)。这允许攻击者强制用户的浏览器向易受攻击的应用程序发送请求,该应用程序认为该应用程序是来自用户的合法请求。

A9-使用含有已知漏洞的组件

组件,比如:库文件,框架和其他软件模块,几乎总是以全部的权限运行。如果利用易受攻击的组件,此类攻击可能导致更严重的数据丢失或服务器接管。使用具有已知漏洞的组件的应用程序可能会破坏应用程序并可能发生一系列可能的攻击和影响。

A10-未验证的重定向和转发

Web应用程序通常会将用户重定向并转发到其他网站,并使用不受信任的数据来确定目标页面。如果未经过正确验证,攻击者可以将受害者重定向到网络钓鱼或恶意网站,或使用转发来访问未经授权的页面。

著名的开源项目组织OWASP(Open Web Application Security Project,开放式Web应用程序安全项目),它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。OWASP的成员包括全世界公司、教育机构和专业人员等,该组织致为于Web应用安全研究,包括规范Web安全的方法论、发布安全文档和指导性手册。OWASP最著名的是被广泛采纳的OWASP Top 10(10项最严重的Web应用程序安全风险)。2017年版本中,10项最严重的Web应用程序安全风险如表2.1所示:

表 2.1 OWASP Top 10

A1

注入

A2

失效的身份认证和会话管理

A3

XSS(跨站脚本)

A4

失效的访问控制

A5

安全配置错误

A6

敏感信息泄露

A7

攻击检测与防范不足

A8

跨站请求伪造

A9

使用含有已知漏洞的组件

A10

未受保护的APIs

在以上10大类型Web应用程序安全风险中,我们重点关注Web应用程序安全漏洞,如SQL注入、XSS漏洞。其基本原理概述如下。

  • SQL注入

SQL 注入攻击源于英文“SQL Injection Attack”,所谓 SQL 注入攻击,就是利用 SQL注入技术来实施的网络攻击。SQL是一种结构化查询语言,是用于操作数据库的命令集。它是一种功能齐全的数据库语言。所谓的注入是将命令插入到表单的输入域名或页面请求的查询字符串中。由于服务器没有严格验证其有效性,服务器最终将执行恶意命令。目前,应用程序的十大攻击方法位居榜首。

原理:SQL注入是指通过把SQL命令插入到Web交互页面(例如表单递交或页面请求或输入域名)的查询字符串,以达到欺骗服务器执行恶意的SQL命令,它的应用违背了“数据与代码分离原则“,它有两个条件:一是用户能够控制数据的输入;而是代码拼凑了用户输入的数据,把数据当作代码执行[14]。

开发人员在系统开发过程中通常会引入注入漏洞。因为开发人员没有专业的安全编程培训,缺乏安全相关的知识和开发经验,导致编写代码时考虑不充分,没有严格的用户验证 -提交数据并直接构造数据库查询语句,从而引入注入漏洞。不同于网络级攻击,注入攻击利用应用程序的开放端口,防火墙等设备无法检测到,因此具有较高的隐藏特性。如果管理员不检查分析数据库日志,基本上不会发现注入攻击。

其分类如下:

1)绕过Web应用的用户验证

在这类攻击中,攻击者在用户输入区输入数据信息,这些数据信息将会用于动态构造SQL査询语句中的where条件部分。

2)盲注攻击

攻击者通过输入注入信息然后提交到服务器来检测Web应用是否存在SQL注入漏洞,当提交的信息动态组装成一个SQL语句时,如果是一个不合理的语句,服务器向客户端返回一个错误代码,攻击者可以通过反复探测然后在返回数据中获得有效信息,甚至可以修改数据库内包括身份认证信息等信息。

3)使用UNION联合查询

攻击者可以使用这种方式从数据库的表中获得额外的数据信息,例如:在用户名中键入类似于"UNION SELECT <注入语句>"的输入信息后,则运行时自动组装 SQL 査询语句Query="select * from users where id= " UNION select * where account = 10 and password="";正常的 SQL 语句由于 id 和 password 均为空的,所以返回的数据也是空的,但此时由于加入了 UNION 方法进行注入,数据库服务器会从表 users 中返回 account= 10时的所有值[15]。

  • XSS漏洞

跨站脚本攻击,英文全名Cross Site Scripting,为了与网页中的层叠样式表(Cascading Style Sheets, CSS) 区分,故人们就在安全领域叫做XSS。XSS英文全称为跨站脚本攻击,它指的是恶意攻击者在页面中插入恶意代码或脚本。当用户浏览网页时,将执行页面中嵌入的代码以实现攻击者的特殊目的。攻击者可以通过攻击执行许多恶意操作,例如窃取,传播邮件间谍病毒,更改应用程序帐户设置,由于攻击功能强大,场景复杂,因此被列为应用安全领域的头号敌人。

XSS攻击根据效果的不同可以分为以下几类:

(1)反射型XSS

反射型,也称为“非持久性”,简单地“反映”用户输入到浏览器的数据。因此,只有诱使用户点击恶意链接才能成功攻击。

(2)存储型

存储类型,通常也称为“持久”,“存储”用户输入的数据到服务器,这是非常稳定的。

(3)DOM Based XSS

DOM Based XSS是通过修改页面的节点形成的,从效果上来说应该属于反射型。由于是由发现的安全专家专门提出的类型,处于历史原因的考虑,就将其单独划分出来。

原理:XSS攻击,通常是指黑客通过“HTML注入”篡改了页面,插入了恶意的脚本,从而在用户浏览网页时控制用户浏览器的一种攻击。攻击者首先确认有风险的注入点,然后把精心构造的恶意数据发送到服务器,用户向服务器发送请求,然后经由浏览器解释在用户端执行,这样便会产生危害[16]。

分类如下:

1)反射性XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。

2)存储性XSS

存储性XSS会把用户输入的数据“存储”在服务器段。这种XSS具有很强的稳定性。

3)DOM Based XSS

实际上这种类型的XSS并非按照“数据是否保存在服务器端”来划分。它是通过修改页面的DOM节点形成的 XSS,所以称之为DOM Based XSS。

2.2.3 漏洞检测技术

漏洞检测技术分为很多种,只有将几种检测技术结合起来,才可以在效率和质量中得到平衡[17]。漏洞扫描是通过模拟黑客的攻击方法来发现目标的安全漏洞。通常,网络漏洞扫描系统由三部分组成。

1.发送数据包机制

漏洞扫描是主动检测漏洞的行为。它需要根据漏洞的签名构建数据包并将其发送到检测目标。

2.接收数据包机制

通常,目标响应的数据包是漏洞评估的原始数据。快速准备接收数据包是漏洞扫描的基本保证要素。

漏洞签名数据库是漏洞扫描中最重要的部分。发送机制需要根据特征码发送探测数据包,收到数据包后,还需要根据特征码进行判断。是网络漏洞扫描器应该有一个漏洞库,包括每个漏洞的签名。网络漏洞扫描基本上是网络数据包的操作,所以检测数据包的有效性和收到后判断的准确性响应数据包可以降低误报率。

一般,漏洞扫描分为三个阶段:

(1)发现目标网络或主机。

(2)收集目标信息,包括服务器的类型及版本等。

(3)分析收到的数据信息,确定系统是否存在安全漏洞。

根据分类标准,漏洞扫描技术可以有不同的分类:根据扫描方法可分为主动扫描和被动扫描;它可以通过扫描对象分为基于主机的扫描和基于网络的扫描;扫描策略用于将点数分为逐个检测扫描和规则驱动扫描。

a)主动扫描和被动扫描

主动扫描是通过向目标或主机网络发送特殊数据包并收集响应包来完成的,其优点在于能够快速准确地获取信息,其缺点是难以关闭扫描路径并且易于查找,并且难以执行主动扫描通过防火墙是相当高的。

b) 基于主机的扫描和基于网络的扫描

从内部用户的角度检测操作系统中的漏洞是基于主机的扫描,主要用于检测用户配置中的漏洞。基于主机的漏洞扫描程序可以通过安装服务访问所有文件和进程来扫描更多漏洞或目标系统上的代理。优点是它可以直接获取目标主机的底层细节;缺点是只有在目标主机受到控制时才能实施漏洞扫描。

从外部攻击者的角度扫描到目标网络或主机是基于网络的扫描,其中主要用户在网络协议或服务中查找漏洞。基于网络的扫描能够及时获得网络信息。它通过向目标服务器发送构建的网络数据包来确定是否存在特定漏洞。它的优点是价格低,易于集中管理和维护;缺点是它无法通过防火墙,并且检测到的漏洞不够全面。

通过监听网络数据包完成被动扫描。与主动扫描相比,检测被动扫描基本上是不可能的,由于被动扫描不需要发送网络数据包,因此不受防火墙的影响。主要缺点是扫描速度快速度慢,准确性差。

c) 逐一探测扫描和规则驱动扫描

探测检测是通过调用插件检测程序来检测漏洞的存在。检测程序有两个来源:(1)使用安全站点发布的漏洞检测程序;(2)改进漏洞签名结构发送数据包。原理是模拟黑客的入侵过程,但在一定程度上限制,以防止目标主机的侵权。扫描检测一个一个是基于每个漏洞的个体特征,因此扫描的准确性相对较高;缺点是难以控制检测程度。

探测检测是通过调用插件检测程序来检测漏洞的存在。检测程序有两个来源:(1)使用安全站点发布的漏洞检测程序;(2)改进漏洞签名结构发送数据包。原理是模拟黑客的入侵过程,但在一定程度上限制,以防止目标主机的侵权。扫描检测一个一个是基于每个漏洞的个体特征,因此扫描的准确性相对较高;缺点是难以控制检测程度。

  • 人工分析 针对被分析的目标,手工构造特殊的输入变量,查看输出结果从而获得漏洞的分析技术。它多适用于程序中含有人机交互界面,其中 Web 漏洞检测多试用这种方法。

  • Fuzzing 技术 Fuzzing 技术是自动注入缺陷的测试技术,它使用被测目标程序的必要数据的输入,查看程序是否正常为标志,判断程序是否有潜在的危险。它一般以边界值、文件头尾构造基本的输入条件。

  • 静态分析技术 这主要是对系统的源代码进行分析,属于白盒测试技术。它包括上下文搜索、静态字符串搜索等。在理论上可以探测出系统的漏洞,但是随着不断扩大的词典将造成误报率搞。检测的结果集大的局限。

  • 动态分析技术 它是通过使用调试器工具来进行动态分析的,需要在调试器中运行程序,查看程序的运行状态以发现漏洞,通过构造特殊数据分析数据流发现漏洞。 2.2.4 Web 应用漏洞产生的原因 Web 应用程序中的漏洞主要是由于下列几个原因:

  1. 输入验证错误:由于相当多的程序员缺乏良好的安全意识,他们在编写Web应用程序时经常使用用户输入的数据作为可信数据,并且不严格审查用户的输入数据。这使得许多Web应用程序包含潜在的安全漏洞。攻击者可以提交敏感的XML响应消息或攻击脚本,以获取基于HTTP响应的敏感信息甚至操纵后端数据库.Web应用程序开发测试人员没有提供输入安全过滤机制。这些错误可能导致SQL注入漏洞和XSS漏洞,信息泄漏和其他问题。我相信用户提交的输入,无需输入验证,是导致Web应用程序漏洞的最大原因。

  2. 授权错误: Web应用程序的访问控制机制不足,不具有访问权限的用户被授予权限,访问控制机制用于提高非管理员的权限。

  3. 异常处理错误: Web应用程序通常需要异常处理。如果异常处理不谨慎,默认情况下给出的信息通常会泄漏服务器信息,例如服务器,数据库的版本号和其他配置信息。

  4. 配置错误:管理员没有很好地配置各种软件,没有升级易受攻击的软件,没有修补,配置选项不正确。

  5. 代码错误:程序员未正确使用接口或使用包含逻辑漏洞的有缺陷的功能,接口或应用程序。

2.2.5 Web 应用漏洞的分布

Web 应用漏洞多种多样,但是他们多占的比例不同,威胁程度不一样,有些

添加图片注释,不超过 140 字(可选)

图2.3 web应用漏洞分布图

漏洞更常见,漏洞更危险。Web应用程序漏洞的具体分布如图2-3所示。

由于注入漏洞,XSS漏洞和传递遍历漏洞是最易受攻击的数量和最具威胁的漏洞类型,如图2-4所示,这三个漏洞也是它用于扫描。本节详细介绍了典型的漏洞SQL注入漏洞,XSS漏洞,目录遍历漏洞的原理以及如何检测它。

2.2.6 Web 应用漏洞的风险评估

应用程序中的漏洞可以以不同方式触发。每种触发方法都代表一种风险。导致这些漏洞的风险是不同的,并且由于没有损害而造成的损害完全破坏整个企业。为了评估这些漏洞带来的风险,需要结合许多其他因素来确定它们的影响,主要是攻击方法,漏洞数量,安全检测,技术影响和业务影响。表2-1显示了每个因素的风险级别。只有当这些因素协同工作时,我们才能全面评估Web应用程序面临的风险。漏洞越常见,检测漏洞越困难,业务越脆弱,攻击越简单,风险越高。

表2.2 漏洞风险评估因素

威胁

攻击方式

漏洞普遍性

漏洞可检测性

技术影响

业务影响

应用描述

容易

容易

广泛

严重

业务描述

平均

平均

常见

中等

困难

困难

少见

2.3 国内外漏洞扫描器研究分析

2.3.1 分析目的

在2.2节中,我们已经了解到Web安全风险所带来的诸多问题,Web漏洞扫描器正因其扫描漏洞的简便快捷而得到了广泛的使用。越来越多的企业使用商业Web漏洞扫描器定期扫描公司网站,及时修补漏洞,以防范安全风险。国内外的幵源社区中也经常有人发布各种版本的开源漏洞扫描器。然而,不同的扫描器在检测性能方面也存在一定的差异。本文中,我首先从影响扫描器准确率的三个方面对国内外的6种主流扫描器进行了比较分析。从而得出对准确率影响最大的因素,对其进行研究改进[18]。

2.3.2 影响准确率的三个因素

影响漏洞扫描器准确率的三个因素分别为输入参数覆盖率、爬取能力、认证覆盖率。

  • 输入参数覆盖率 输入参数覆盖率是指在浏览器和服务器之间传输复杂输入的时候,应用程序所支持的子协议和传输方式。如果扫描器不能支持应用程序传输所使用的子协议的话,那它肯定不能用给定的参数来检测到漏洞。根据62款国际上流行的商业和开源扫描器对于输入参数覆盖率的比较结果[19],可以得知,Web应用扫描器对于输入参数覆盖率的支持通常包含如下四个方面: HTTP Query String Parameters (GET):输入参数通过 URL 发送。 HTTP Body Parameters (POSTO:输入参数通过 HTTP body 发送。 HTTP Cookie Parameters:输入参数通过 HTTP cookie 发送。 HTTP Headers: HTTP提交应用程序使用的头。

  • 爬取能力 爬取能力是扫描器获取页面的能力。如果扫描器的攻击引擎比较差的话,它也许会遗漏一个漏洞,但是如果它的爬取引擎比较差的话,那它就不可能获取到页面,也必然不可能得到该页面中存在的漏洞了。我采用WIVET来对扫描器的爬取能力进行评估。WIVET是用来分析Web链接爬取能力的一种工具,它可以自动的爬取到各种应用类型,比如 Html、Ajax、Flash、Applet、Silverlight. WSDL、REST。大致步骤如下[20],WIVET中含有54个测试案例,将WIVET部署到服务器上,然后分别用扫描器对其进行扫描,最终会根据测试案例的通过率生成一个结果报表。从结果报表中,我们可以很清晰的看出各扫描器爬取能力的异同。

  • 认证覆盖率 未经认证的漏洞扫描器只能获取到系统的基本信息,包括操作系统、开放的网络端口、端口所监听的服务等。然而,如果可以提供认证扫描功能的话,扫描器就可以登陆到即将扫描的系统,并且获取到该应用的详细信息,比如配置参数、安全补丁等。认证后的扫描器所获取的信息更加全面,并且误报率更低。通过调研,本文中我们选取了 16种扫描器通常具备的认证能力进行了对比。这些认证项大致包括:Custom Cookie、Custom Header、BASIC、DIGEST、NTLM、Kerberos、FORM、PROXY、GZIP、SSL、Logout Detection、Logout Exclusion 等。其中 Custom Cookie 和 Custom Header 是指在测试中所使用的 cookie 和 header; BASIC,DIGEST, NTLM, Kerberos和FORM是相应的认证方法;PROXY代表了输出协议支持;GZIP,DEFLATE表示相应的压缩支持;SSL指SSUTLS加密支持;CERT指的是客户端认证;Logout Detection表示对自动检测无效会话的支持。经过统计,分别得出各扫描器的认证覆盖率,以进一步分析。 2.3.3 对比总结 表2-2中,我将上一节提到的影响扫描器准确率的三个特性的具体指标罗列出来,并将这三个指标与扫描器准确率进行了对比。从表中,我们可以直观的了解到这三个特性如何影响扫描器的准确率。可以发现,其实扫描器准确率的变化趋势和扫描器的爬取能力的变化趋势是很相似的。当然,扫描器的准确率和输入参数覆盖率以及认证能力也是有一定联系的。正如上一节所说,认证覆盖率越高,扫描器获取的信息会更加的全面,误报率也会降低。而输入参数覆盖率的高低也会对准确率造成一定的影响。 表 2.2 扫描器三大指标与准确率对比表

排名

扫描器

输入参数覆盖率

爬取能力

认证覆盖率

扫描器准确率

1

WVS

100%

91%

94%

92.8%

2

Nessus

100%

84%

100%

78.9%

3

Appscan

100%

83%

94%

78.4%

4

JSKY

50%

53%

75%

57.4%

5

RSASWEB

50%

61%

38%

51.5%

6

MatriXay

50%

43%

25%

36.1%

2.4 Web 应用漏洞分析及其检测方法 2.4.1 SQL 注入漏洞 (1)SQL 漏洞概述 几乎每个Web应用程序都使用数据库来保存各种操作所需的信息.SQL注入是应用程序和数据库层之间发生的安全漏洞。在Web程序代码中,用户提交的参数不会直接过滤到SQL语句,导致参数中的特殊字符打破SQL语句的原始逻辑。该漏洞可被利用来执行任意SQL语句。这些注入的SQL语句将由数据库服务器作为普通SQL指令运行,这可能导致偏离用户的意图,这可能导致数据库信息泄露。在严重的情况下,数据库服务器的管理员可能被盗。权限。当攻击者获得管理权限时,他可以随意操纵数据库和系统。 (2)SQL 漏洞的检测方式 Web漏洞的使用是多样化的。普通的消防HTTP / HTTPS是完全开放的。传统的IDS不起作用。可以通过构造GET或POST请求来检测SQL注入漏洞。在某些情况下,可以通过blind检测。考虑以下SQL语句:从t_user中选择*其中username = $ username和password = $ passwd。类似的查询通常用于Web应用程序以验证用户。如果查询返回一个值,凭证的用户名存在于数据库中,用户可以登录系统。否则它将访问拒绝。输入字段的值通常以用户的形式从Web表单获取。假设我们插入以下的用户名和密码值是:$username = '100' or '100' = '100,$passwd = 100' or '100' = '100。于是SQL 查询语句变成了:select * from user where username='100'or '100' = '100' and password='100' or '100' ='100'。构造GET请求,并发送到服务器,假设向服务器http://www.example.com提交HTTP请求,那么我们构造的GET请求就是http://www.example.com/index.php? username=100 or'100='100&passwd =100'or'100=' 100。经过简单分析,我们注意到因为条件是真的(或100=100),该查询返回一个值(或一组值)。这样,系统在不知道用户名和密码情况下也验证了该用户。这就说明存在着数字型的SQL漏洞。 除了这个数字SQL漏洞之外,您还可以使用UNION运算符伪造查询。为了让测试人员有意参与伪造查询,我们在SQL注入中使用UNION运算符来获取原始查询。这些假查询的结果被添加到原始查询的结果中,并且测试者可以获得其他格式的字段值。例如,服务器执行的查询如下:select name,email,age from users where id=$id。设置id值:$id1 union all select creditcardnumber 1 1,,from creditcartable 。得到以下查询:select name,email,age from users where id=$id=1 union all select creditcardnumber,1,1 from creditcartable。这将和所有信用卡用户一起加入原始查询结果中。绕开使用 DISTINCT 关键词的查询必须使用关键字ALL。另外,我们注意到除了信用卡帐户外,我们还选择了其他两个值。这两个值也是必要的。因为为了避免语法错误,这两个查询必须具有相同数量的参数。通过添加Union查询,我们查询了数据库中的敏感信息,表明存在SQL注入漏洞。 (3)SQL 注入漏洞的防御措施 SQL注入漏洞可能导致攻击者直接探测数据库,因此他们可以直接操纵数据库中的数据,导致非常有害,轻微泄漏的数据,然后失去系统的管理员权限。因此,非常有必要加强预防。其中主要的防御措施有:

  1. . 输入检查,SQL注入漏洞主要来自用户的输入,所以检查所有用户输入,包括长度,类型,或根据业务需要定义一些规则,不仅在客户端检查,还要在服务器端检查,拒绝userInvalid数据条目。

  2. .字符过滤,数据库中,有些字符有着特殊的含义,比如单引号,%,”\”,通配符等等,必须对这些特殊字符进行过滤,以防用户提交特殊字符改变原有应用程序的逻辑。

3).预编译

SQL语句通常用于代码中以动态组合SQL语句,因此容易出现问题。有些语言提供了一个安全的,强类型的参数化查询API,可以正确处理用户输入。或者,可以使用不受SQL注入影响的对象关系映射。对象关系映射解决了面向对象和关系之间不匹配的问题。数据库,可以自动将程序中的对象自动化到关系数据库,避免直接使用SQL语句。

4). 存储过程,存储过程可以通过参数类型判断来阻止SQL注入。

5). 正确的数据库配置,根据不同数据库的特点,确保数据库的良好配置可以降低SQL注入的风险。

2.4.2 XSS 漏洞

(1)XSS 漏洞概述

跨站点脚本是Web应用程序的安全漏洞。它通常是指使用特殊方法通过利用Web开发中留下的安全漏洞将恶意Javascript代码注入到Web页面中。用户无意中加载并执行攻击者构建的恶意javascript代码。当攻击成功时,攻击者可能会收到(但不限于)更高的权限,例如执行以下操作:挂马,网络钓鱼,获取私人网络内容劫持用户网络行为,窃取会话和cookie等。大量网站遭到XSS漏洞攻击或发现此类漏洞,如Twitter,Facebook,My Space,新浪微博和百度贴吧。近年来从云运漏洞平台披露的信息表明,XSS攻击非常普遍,非常有害。

(2)XSS 漏洞分类

XSS 漏洞有三类:反射型XSS(也叫非持久型XSS 漏洞)、存储型XSS 和DOM型 XSS。

a. 反射型XSS

这个漏洞的注入过程就像一次反射,故称之为反射型 XSS,以下举例说明 http://www.foo.com/xss/reflect1.php 的代码如下:

<?php

echo $_GET[‘x’];

?>

输入 x的值未经过任何过滤就直接输出,可以提交:

http://www.foo.com/xss/reflect1.php?x=<script>alert(“xss”)</script>

服务端解析时,echo 就会完整的输出<script>alert(“xss”)</script>到响应体中,然后浏览器解析执行出发javascript恶意脚本。

b. 存储型XSS

存储XSS已经成为一种永久性的XSS,它更有害。它与反射XSS漏洞的不同之处在于它提交的XSS代码存储在服务器中,但它存储在数据库或文件系统中。当其他用户请求带有这个注入的XSS代码的网页时,它将下载并且执行它。最典型的例子是留言板XSS。用户将包含XSS代码的消息提交给数据库。当目标用户查看留言板时,将从数据库中查询并显示这些消息的内容。浏览器找到XSS代码并将其视为更好的HTML和javascript代码解析和执行,因此触发了XSS攻击。存储XSS攻击非常隐蔽,通过手动查询很难找到。此时,自动Web应用程序漏洞扫描程序非常有用。

c. DOM型XSS

DOM XSS与Reflective XSS和Storage XSS之间的区别在于DOS XSS XSS代码不需要直接参与服务器的分析响应.XSS触发器依赖于浏览器端的DOM分析。举例如下:

<script>

eval(location.hash.substr(1);

</script>

这就是一个DOM XSS 漏洞,触发方式为提交请求

Http://www.foo.com/xssme.html#alert(1)

这个url#后面的内容不会被发送到服务端,仅仅是在客户段被接受并解析执行。在 javascript 中有很多这种输入点可以注入恶意脚本。

(3)XSS 漏洞检测方式

检测XSS漏洞的基本方法是使用以下特殊攻击字符串作为输入数据,获取查询字符串的URL和网页中表单的输入字段信息,构造HTTP请求,将信息发送到服务器,并且服务器将aRespond返回给响应。如果响应中存在注入字符串,则表示存在XSS漏洞。如果提交了帖子请求,则需要再次将请求发送到表单中action属性的值。如果返回的响应包含注入字符串,则表示存在XSS漏洞。

值得注意的是,对于具有多个输入字段的表单,您可以为注入检测选择多个不同的测试字符串,这也可以识别网页中的哪个输入点具有XSS漏洞。如果服务器应用程序对输入数据执行一些简单的过滤,您还可以通过多种方式对测试字符串进行编码,例如URL编码,HTML实体编码,大小写转换等。

(4)XSS 漏洞的防范措施

跨站点脚本攻击更加微妙,更难以抵御其他网络攻击,并且没有一刀切的解决方案。在用户和Web应用程序之间的交互过程中会产生XSS漏洞,Web应用程序本身和客户端用户。主要关注的是Web应用程序的编程,但用户的良好习惯也可以避免XSS攻击。所以我们分两个方面入手防御跨站脚本攻击,程序开发者在编程过程中要进行输入验证,用户在浏览时网页时也应采取相应安全措施,程序开发过程中应该采取的措施:

  1. .过滤用户提交数据中的代码 这种方法的实施过程比较复杂,不仅仅需要考虑<script>…</script>标签,各种可能的 XSS 攻击载体都要考虑进来。这种方法风险很大。如果过滤不合适,可能会导致XSS攻击并过滤掉非法部分的数据。无法将所有非法输入过滤到黑名单中。最好只接受合法数据。

  2. .对用户输入的数据或基于用户输入数据而生成的输出数据进行编码。 一般来说,编码是一种非常简单有效的防范XSS脚本的方法,因为它不需要区分合法和非法字符。缺点是所有不受信任的数据编码都浪费系统资源,这可能会影响Web服务器的性能。

  3. .对表单输入域输入字符的长度进行限制 对于一些可能收到攻击的表单输入域,可以限制其输入字符的长度

  4. .禁止上传Flash文件 使用Flash文件很难防止跨站点脚本攻击。如果您不确定上传的Flash文件是否安全,则只是禁止用户上传Flash文件以完全阻止Flash跨站点攻击。

  5. .检查

Cookie信息许多Web应用程序使用cookie来管理通信状态并存储与用户相关的信息。开发人员必须在将cookie信息插入HTML文档之前对其进行严格检查和过滤。

用户的应对措施:

  1. . 小心点击不受信任的链接,只需点击一些可信赖的连接。有关网站,有时XSS攻击会在您打开电子邮件,阅读留言板,打开附件和阅读论坛时无意中发生。

  2. . 提高浏览器的安全级别,即使您将浏览器更新到最新版本,将浏览器的安全级别设置为高,并禁用一些不需要运行的脚本。

  3. .同时要在不同的Web应用程序中使用不同的用户名和密码。

2.4.3 目录遍历漏洞

(1)目录遍历漏洞概述

目录遍历漏洞是指用户可以访问某些受限访问目录并在服务器根目录之外执行命令。目录遍历漏洞是一种信息泄露漏洞,有时也称为包含漏洞的非授权文件。目录遍历漏洞的主要原因是程序没有过滤用户提交的非法输入,验证用户的合法输入,这样黑客就可以通过URL遍历用户的文件系统获取一些敏感信息。下面举个例子说明:

譬如有链接为:http://www.example.com/getfile.php?test=dervul.html。

浏览器根据此URL向动态页面getfile.php发送HTTP请求到Web服务器,并查询字符串参数test,其值为dervul.html。Web服务器收到浏览器的请求后,将在服务器端进行处理。getfile.php脚本文件将从服务器的文件系统发送到客户端的浏览器,这是一个恶意用户.getfile.php脚本的参数,可以从文件系统获取敏感文件并编译以下URL:http://example.com/getfile.php?test=../../../../../etc/password。那么,这就能够从文件系统中获取 password 文件并返回给用户。用户可以知道服务器的所有用户名和密码。如果使用MD5加密密码,也可以通过彩虹表找到用户的密码。服务器的信息被泄露。

(2)目录遍历漏洞检测方法

目录遍历漏洞检测使用基于黑盒子的方法。首先,应该清楚与路径遍历漏洞相关的所有明显的配置方面。应彻底测试文件上载和下载的所有功能。然后为上传的参数添加一些常用文件信息。这些文件信息通常无处不在。提交HTTP请求,然后检查响应中是否有任何文件信息。如果包含,则表示存在目录遍历漏洞。

3)目录遍历漏洞的防范措施

防止目录遍历的最有效方法是控制服务器上的文件和目录权限,避免将用户提交的数据传递到任何文件系统API。大多数目录或文件权限未正确配置,并且Web应用程序读取文件主要取决于系统本身的API。在参数传递的过程中,如果没有严格的控制,就会有超出的功率。出现。在这种情况下,Web应用程序可以采取以下防御措施,最好是组合使用。

  1. . 处理用户提交的文件名时,应用程序必须检查文件名是否包含路径遍历序列(使用反斜杠或斜杠)或空字节。不要尝试对文件名执行任何清理直接停止处理请求。

  2. . Web服务器中的所有文件都放在Web的根目录中,并且将忽略任何已回溯的额外请求。

  3. . 应用程序仅访问允许的文件类型,建立访问白名单,并拒绝访问其他文件类型的任何请求。

2.5 网络爬虫在扫描器中的应用

Web爬虫,也称为Web蜘蛛或Web机器人,是Internet上自动下载WWW服务网页的程序。传统的Web爬虫从种子URL开始,获取种子URL的页面,然后不断提取新的从当前网页到要爬网的队列的URL,并停止下载网页,直到满足系统的某个条件。

随着Web安全领域的发展,安全工作者越来越多地使用Web爬虫技术来利用Web应用程序中的漏洞,这极大地促进了安全行业.XSS(跨站点脚本)漏洞和SQL注入漏洞,信息泄露漏洞占了一个大量的Web应用程序漏洞,所有这些漏洞都可以通过改进的Web爬虫自动扫描.Web爬虫技术在Web应用程序漏洞扫描程序中的应用可以增强系统的自动化并提高系统的效率。

2.5.1 聚焦爬虫概念

专注于Web爬虫(也称为主题爬虫)与传统的Web爬虫不同。聚焦爬虫不关心它们是否可以完全覆盖网站的所有页面。相反,关注特定主题或数据。例如,本文中实现的聚焦网络爬虫只提取网页中存在的输入点,以及它对不相关的静态文件等进行URL过滤。焦点网络爬虫由三部分组成(1)爬行目标的描述或定义(2)网页分析算法(3)URL的搜索策略。

2.5.2 聚焦爬虫技术分析

关注Web爬网程序主要关注三个问题:爬网抓取网页目标描述,分析抓取爬网网页的算法以及选择网页搜索策略。抓取目标描述定义了抓取工具需要注意的主题。网页分析算法是网络爬虫爬行行为的关键。

  1. 抓取目标描述 漏洞扫描程序查找页面的输入点,包括要查询的字符串和表单,因此爬网程序爬网目标是重点关注的爬网网页的输入点。这决定了网页的分析算法。

  2. 网页分析算法 网络分析算法可以基于网络拓扑,基于网络内容,基于用户访问分为三类。此漏洞扫描程序使用的网页分析算法是基于网页内容的算法。它主要解析网页内容,通过正则表达式提取所有URL,标准化不合格的URL。丢弃URL,过滤异地链接等URL。也可以解析URL查询字符串以获取有关主机的信息。

  3. 网页遍历算法

Web爬虫爬行的遍历算法主要分为深度优先遍历算法,广度优先遍历算法和最佳优先遍历算法。

1)深度优先遍历算法.Depth-first遍历从初始种子URL开始,任意选择要提取的URL,然后提取页面中的所有URL,并随意选择一个然后提取,以便在URL之后对URL进行爬网直到URL被跟踪。所有现有的URL都被处理,然后跳转到初始URL的下一页。这种爬行策略的优点是它使爬虫设计变得简单,但它会导致低值的过度爬行值较低的页面,可能导致爬虫陷入问题。

2)广度优先遍历算法。广度优先遍历算法是指从初始种子开始获取的过程,并且在获取当前级别的所有URL之后,输入下一级别URL的爬行。此策略是主要用于专注于爬虫。它认为页面越接近原始种子URL,与主题相关的概率就越大,并且它可以覆盖尽可能多的与主题相关的页面。

3)最优先的遍历算法。最优先的遍历策略根据一定的规则分析网页的特征,预测被抓取的网页与目标网页之间的相似性,或主题相关性,然后筛选出最佳评估的链接或者用于抓取的一批链接。它的核心思想是仅抓取被网络分析算法评估为“有价值”的网页。但是,这种遍历策略可能会导致在抓取过程中忽略一定数量的相关网页因此,它是一种局部最优爬行算法。在许多实际应用中,有必要改进应用的细节,以提高捕获的准确性,掌握最佳的局部优势。

此漏洞扫描程序的爬虫只对网站的输入点感兴趣,并且可以捕获主页的输入点,因此适合使用广度优先遍历算法来实现网站爬虫。

综上,我们认为,影响扫描器准确率的最重要的因素是扫描器的爬取能力,兼顾认证能力。因此,在文章接下来的部分,我将着重对扫描器的爬取算法进行研究,并提出改进的方法,同时扩展扫描器的认证覆盖率,以此来提高扫描器的准确率。

2.6 本章小结

本章首先对扫描器的爬虫技术进行了探讨,包括现有页面爬取策略及其优缺点,重点描述了分布式爬虫及其常见模型;其次对Web应用程序安全风险及主要的Web应用安全漏洞进行了介绍,其中重点阐述了SQL注入漏洞和XSS漏洞的产生原因、攻击方式及防御方式等;最后从输入参数覆盖率、爬取能力、认证覆盖率三个方面对国内外的漏洞扫描器进行比较分析,用实际数据得出对扫描器扫描效率影响最大的因素是扫描器的爬取能力和对身份认证的支持。总体来说,本章的内容为下一章设计Web应用安全漏洞扫描器奠定了基础。

第三章 Web应用安全漏洞扫描器分析设计与实现

本章首先对Web应用安全漏洞扫描器系统的需求进行分析,以便后续系统设计工作的展开。本系统是为用户提供一个方便使用、漏洞定位准确、检测效率高效的Web应用安全漏洞检测工具;其次是根据需求分析,对扫描器的整体架构与功能模块的进行设计与实现。Web应用安全漏洞扫描器设计是基于对上章所述的主要技术和需求分析的基础上,研究Web应用安全漏洞扫描器如何实现所需功能和性能。扫描器设计的过程包括系统架构设计、功能模块设计。扫描器实现的过程是按照模块功能采用相对应的技术和编码实现。

3.1 Web应用安全漏洞扫描器需求分析

目前,互联网产业迅猛发展,中国域名的网站就已经突破290万,但是除了一些大型互联网公司的网站得到了有效的安全保护之外,大部分的小网站都存在一些漏洞,很容易遭受攻击。尤其是受到SQL注入攻击,XSS攻击,这也是目前受到攻击次数最多的两类漏洞。因为Web 应用程序的设计有着很多种技术方案, 比如 Java 平台,ASP.NET平台,PHP/Python平台,为了实现扫描的通用性,本漏洞扫描器采用黑盒测试的技术对目标网络网络进行安全性测试,它可以忽略网络平台的特性,不审查网页的源码就能发掘多个平台的 Web 应用漏洞。

由本文2.2节可知,Web应用漏洞类型非常多,其中SQL注入漏洞,XSS漏洞的漏洞数所占比例比较高,比较有代表性,SQL注入漏洞属于服务器端漏洞,XSS属于客户端漏洞。由于精力有限,无法实现对所有的漏洞的扫描,本漏洞扫描器将实现对这两大类漏洞的扫描。最重要的是,本漏洞扫描器设计了一种可扩展机制使得新的Web应用漏洞可以很好的以插件的形式增添进本漏洞扫描器中。

针对Web应用安全日益严峻的形势,分析各种Web应用漏洞的原理,建立Web应用漏洞扫描模型,利用渗透测试技术对Web应用进行安全测试,并通过分析结果对网络进行挖掘。安全测试。应用程序中存在一个漏洞。实现基于B / S,用户友好,可执行,系统执行,自动化的Web应用程序漏洞扫描程序。

3.1.1 功能需求

为了实现一个能自动化扫描 SQL 注入漏洞,XSS 漏洞的扫描器,首先必须对扫描目标进行解析,网络爬虫能够从远程以 HTTP 请求的方式获取服务器端 Web 应用的信息,然后通过解析程序提取出可输入点(包含带查询字 符串的网址和表单),将之存入到数据库或文件中。接着对这些可输入点以轮询的方式发送测试字符串到扫描目标,根据 HTTP 响应获取反馈信息,判断是否具有漏洞,最后生成漏洞分析报告。

目前,互联网产业发展迅速。中国域名网站已超过290万。但是,除了一些大型互联网公司网站的有效安全保护外,大多数小网站都存在漏洞,易受攻击。特别是受到SQL注入攻击和XSS攻击。这也是受到攻击最多的两类漏洞。因为Web应用程序设计有各种技术解决方案,如Java平台,ASP.NET平台,PHP / Python平台,以实现扫描的普遍性这个漏洞扫描器使用黑盒测试技术来保护目标网络网络。测试时,它可以忽略网络平台的特性,可以在不查看网页源代码的情况下探索多个平台的Web应用漏洞。实现漏洞扫描仪具有重要的现实意义。

为了实现可以自动扫描SQL注入漏洞,XSS漏洞和目录遍历漏洞的扫描程序,必须首先解析扫描目标。Web爬虫可以从远程HTTP请求获取服务器端Web应用程序的信息,然后通过解析程序。提取输入点(包括带有查询字符串的URL和表单)并将其保存到数据库或文件中。然后为这些输入点以轮询方式将测试字符串发送到扫描目标,根据HTTP响应获取反馈信息,确定是否存在漏洞,最后生成漏洞分析报告。

基于以上分析,系统采用模块化设计思想,分为三大模块:网络爬虫模块,漏洞扫描模块和报告生成模块。漏洞扫描模块包含每个漏洞的扫描插件。

1)网络爬虫模块

通过对整个目标Web应用程序站点的广度优先遍历,获取每个网页的HTML源代码,并对网页的HTML源代码进行有效的标签分析,并在其中存在标签类型和标签数据。可以成为安全测试目标的页面同时被提取。该信息存储在数据库中,供后续漏洞扫描模块执行目标安全测试。特定HTTP请求的发送由线程池完成。它同时执行并且非常有效。它可以在解析其他页面时解析一些页面。爬虫模块的性能和准确性是漏洞扫描模块的基础。只有使爬虫模块强大而强大,我们才能确保整个扫描仪的效率和全面性。漏洞扫描的准确性,可以降低误报率。

2)漏洞扫描模块

渗透测试多年来一直是网络安全的常用测试技术,通常被称为黑盒测试。渗透测试远程检测正在运行的应用程序并发现安全漏洞而不了解内部应用程序本身。集中渗透测试(即,尝试利用先前测试中发现的已知漏洞检测方法,可用于检测特定的安全漏洞,例如SQL注入漏洞,XSS漏洞以及部署在网站源代码中的文件。上载漏洞等。对Web应用程序发出的请求是HTTP请求。Web应用程序处理完请求后,它将返回HTTP响应。根据响应的内容,我们确定是否存在响应漏洞。例如,当检测到XSS漏洞时,我们会查找包含\\ u003c的HTTP响应脚本\\ u003ealert('XSS')\\ u003c / script \\ u003e字符串(如果有)表示该URL包含XSS漏洞,如果没有,它表明没有XSS漏洞。漏洞分析模块使用正则表达式来实现比普通字符串查找更高的效率。

3)报告生成模块

在收到渗透率测试的结果后,您需要分析结果以确定是否存在漏洞,某种类型的漏洞,测试漏洞需要多长时间,并仔细分析攻击结果然后生成格式。可读报告。使系统管理员可以轻松了解Web应用程序面临的风险。根据漏洞分析扫描结果,生成可读的HTML文档。由于漏洞扫描的结果以XML文档的形式存储,因此最终通过解析XML文档生成XML文档,所包含的信息包括漏洞信息,漏洞数量,漏洞问题URL,漏洞预防措施,如果这些漏洞被修复等,HTML报告可以很好地满足目标受众对自己网站漏洞的理解。

基于上面的分析,系统采用模块化的设计思想主要分为三个大模块,网络爬虫模块, 漏洞扫描模块,任务调度模块。

漏洞扫描功能模块:该功能模块包含了各个漏洞的扫描插件。主要功能首要是实现对Web应用漏洞如典型的SQL注入漏洞、XSS漏洞进行检测,找出Web应用程序的脆弱性。

网络爬虫功能模块:该功能模块是为了实现待检测URL的网页爬取,从中可以分析得到后续各个攻击模块的漏洞检测点,以便对Web应用程序进行全面的检测。

任务调度功能模块:本系统还实现了对检测任务的调度功能,该功能可实现任务调度,根据用户配置信息进行自动化分配调度,提升检测效率。

另外,系统还实现了端口扫描、站点信息获取的功能,实现对Web应用程序的可用性检测。

3.1.2 非功能需求

  • 自动化扫描 漏洞扫描器的网络爬虫抓取目标网络的数据,构建 HTTP 请求,分析 HTTP 响应,漏洞扫描,生成报告功能都是在后台完成,自动化的对目标网络进行安全性测试,用户只要提交网址和用户选项之后就不需要再进行控制和操作。

  • 易用性 本系统的开发应该要便于用户使用,实现基于B/S架构的Web应用安全漏洞扫描器,用户只需要通过浏览器端添加扫描任务,就可以开启漏洞自动化扫描,并可通过仪表盘查看扫描结果,扫描结果包含漏洞类型、漏洞定位、影响参数等内容。

  • 可扩展性

随着Web应用的不断发展,实际Web应用程序环境中存在的Web应用安全漏洞的类型很多,本系统只是针对其中两种主流漏洞进行检测,为了方便在后续新型安全漏洞爆发时,系统检测功能的添加,系统的设计应具备可扩展性。在后续添加漏洞检测功能的时候,只需要将检测功能以插件形式添加到漏洞检测模块便可使用,避免改动系统的其它模块。

3.2 Web应用安全漏洞扫描器系统应用架构设计

Web应用安全漏洞扫描器是基于B/S架构,使用Web管理方式,用户使用浏览器通过SSL加密通道和系统进行交互,方便用户管理。系统采用模块化设计,整个系统可分为:用交互层、数据库、调度层和检测引擎四层架构体系。而交互层可以拆分为UI展示层和数据处理层两部分,整个系统的系统架构图如图3.1所示。

添加图片注释,不超过 140 字(可选)

图 3.1 Web应用安全漏洞扫描器系统架构图

交互层:主要分为UI展示层和数据处理层2部分,其中UI展示层直接与用户进行交互,数据处理层对用户来说是透明的。

UI展示层主要是与用户交互,用户操作请求通过该层向后端传递,并且接收后端传递数据,通过绘制图表、扫描报告等方式展现给用户。

数据处理层主要是接收用户前端传递数据进行各类逻辑处理,并且操作数据库进行存储、查询、修改、删除等操作。

数据层:主要包括存储用户资料、检测数据、配置的数据库等,以及一些系统配置文件。

集群调度层:负责调度检测引擎对用户下达的任务进行自动化检测,并且在检测结束后处理检测结果汇总至数据层。

检测引擎层:主要分为检测能力和数据挖掘两部分。监测能力主要是针对不同检测内容的插件库。对常见的代码层漏洞如SQL注入、XSS漏洞等具备强大的监测能力,并可通过插件进行漏洞扫描性能扩展。数据挖掘则是能过优化网络爬虫的方式,挖掘网页数据,寻找监测点。

3.3 Web应用安全漏洞扫描器系统功能设计

Web应用安全漏洞扫描器系统采用模块化设计,整个系统功能可分为:基础数据挖掘模块、监测能力模块、集群调度模块、UI交互界面。功能设计架构图如图3.2所示。

添加图片注释,不超过 140 字(可选)

图 3.2 Web应用安全漏洞扫描器功能架构图

主要功能模块设计包括网络爬虫模块、漏洞检测模块(包括SQL注入漏洞、XSS漏洞及可扩展的其他漏洞插件)、任务调度模块、可用性检测模块等。

同时为了满足本文3.1所述的非功能需求,设计了友好的UI交互界面,方便用户下达任务和查看漏洞扫描结果。以及可扩展的插件式漏洞库。如上图3.2所示。

3.3.1 网络爬虫模块的优化及设计

在2.1节中,我们对漏洞检测系统中的网络爬虫技术进行了研究,对比其在搜索引擎中应该侧重的目标以及爬虫策略进行了详细介绍。

如图2.1所示的一般网络爬虫的工作流程,爬虫首先获取到一个初始URL链接,然后从该链接URL开始网站信息爬取并解析该URL对应的网页内容,通过网页解析找出该页面所包含的所有URL链接,将这些新的URL链接放入链接队列,直到此页面没有剩余URL链接,然后提取已经爬取到URL链接进行下一次爬取,重复以上步骤,直到爬虫爬取完所有网页或达到爬取深度预设值。传统的网络爬虫会依次遍历网站的所有页面,对每个页面都会调用爬虫爬取其链接URL及指向内容。这样会导致爬取大量重复无用的链接,而且有可能进入死循环,爬虫效率极其低下,而一个快速的爬虫是一个高效漏洞扫描器的基础。本文从下几个方面对网络爬虫进行优化:

  1. 针对效率低下以及可能进入死循环的问题进行优化。为了提高网络爬虫网页爬取的速率,我们使用多线程来处理网页抓取过程中的传输过程。由2.1节,我们知道网页抓取策略包含有深度优先策略、广度优先策略和最佳优先策略等,由于在多线程处理过程中无法确定哪个线程处理的任务先完成,所这种环境下采取广度优先策略更适合。而且相比较之下,使用广度优先策略进行网站爬取时更容易控制爬取的深度。可以采用一个公共数据队列来控制链接URL被访问的先后顺序,保证上一层次的URL链接先于下一层,确保网络爬虫按照深度优先顺序进行网站爬取,而不会进入死循环。

  2. 针对可能爬取重复无用链接的问题进行优化。在对链接URL进行重复无用的判断的时候,不止要考虑到完全重复的URL,还要考虑到满足URL重写规则的链接以及参数重复的链接,送些URL链接在进行漏洞检测的时候都属于重复无用的链接。之所对参数重复的链接不进行网页信息爬取,是因为对于参数重复链接URL对应的网页结构一般不会有变化,也不会导致新的Web应用漏洞,所以对于这种类型的链接,只需要抓取一个作为代表就可了。

优化后的网络爬虫设计如下:

添加图片注释,不超过 140 字(可选)

图 3.3 优化网络爬虫流程图

根据上文提出的爬虫优化策略,对传统网络爬虫进行优化,优化后的爬虫流程图如图3.3所示。

1)判断链接队列urls中是否存在未被检测的新链接(待测目标网站的根URL放入其中),若存在,则进入下一步,否则网络爬虫结束;

2)通过对urls队列查重、通过url标准、url伪协议判断规则进行url链接判重,若重复,则直接丢弃,返回第一步,否则,将其加入urls_uniq队列中并进入下一步;

3)对该链接url进行页面请求,若该链接有效,请求成功,那么对其进行进行页面解析,否则返回第一步;

4)通过页面解析之后判断是否存在新链接,若是,则将其加入链接队列,否则,返回第一步。

3.3.2 SQL注入扫描模块的设计

SQL注入漏洞扫描模块的目标是能够通过远程访问的方式对目标网站进行SQL注入漏涧的检查,发现其中有漏洞的页面;在检测结果证实目标网站存在漏洞时,在不危害到网站安全性和可用性的前提下,获取漏洞验证结果,证明其危害性[21]。SQL注入漏洞扫描流程如图3.4所示。

添加图片注释,不超过 140 字(可选)

图 3.4 SQL注入漏洞扫描流程图

SQL注入检测模块向爬虫传递的参数插入测试代码,尝试根据页面响应判断注入是否存在或者继续尝试其他的测试代码。

当确认SQL注入存在时则进入下一步验证阶段,否则当所有payload测试完毕后退出检测。

根据目标数据库类型使用不同的攻击Payload获取目标网站的数据库信息,例如数据库名称、表结构、数据库用户名及密码信息,对于某些权限较大的数据库用户(例如:root、sa、sys用户)甚至能执行提权后执行任意命令。

SQL注入普通模式是基于盲注检测的页面相似度算法,对有漏洞的参数进行检测的,具体流程说明:

检测开始,检测模块会先对页面请求2次,判断页面是否有动态变化部分。若有动态变化,则会设置基准HTML(影响后续检测对比算法)。

检测参数是否动态可变,尝试输入其他值,查看页面响应判断参数是否可变。若参数不可变则直接退出检测。

尝试注入特殊符号使数据库报错,根据后台规则依照报错信息对数据库类型/版本进行识别。若识别成功,则根据数据库版本加载特定payload,可提高检测效率。

尝试多种payload进行匹配,例如:

整数型:and 1=1及and 1=2

字符串型:and 'a'='a及and 'a'='b

搜索型:%' and 'a'='a' and '%'='

以上为示例,非实际测试代码。

若匹配均不成功,则根据用户配置选择是否使用专家模式进行扫描。匹配成功则开始进行逻辑判断检测。

首先进行逻辑为真的请求判断(and 1=1),将响应页面与原页面进行对比,若对比结果不同则直接结束检测。

而后进行逻辑为假的请求判断(and 1=2),将响应页面与原页面进行对比,若对比结果相同则直接结束检测。

再一次进行逻辑为真的请求判断(增加检测准确度),将响应页面与原页面进行对比,若对比结果不同则直接结束检测。

确认漏洞存在后会根据用户配置加载获取数据库信息模块,对漏洞进行验证利用,尝试获取数据库敏感信息。

所有请求在遇到网络超时情况下会重复发送至多3次,若仍未结果则直结束检测。

3.3.3 XSS漏洞扫描模块的设计

XSS漏洞扫描模块是一个远程检测模块,只能从远程的WEB访问中检测和发现WEB应用中可能存在的XSS漏洞。为此,该模块设计成接收网页爬虫提取的页面注入点信息,生成测试向量,通过URL进行远程WEB访问,实施XSS攻击,在所有可能的数据点加入测试代码,接收服务器响应页面,从服务器的响应中分析是否存在XSS漏洞,最后输出XSS漏洞检测报告[22]。如图3.5所示,一个完整的XSS漏洞检测流程是:

添加图片注释,不超过 140 字(可选)

图 3.5 XSS漏洞扫描流程图

检测流程:

目标URL,如:http://www.test.com/t.php?news=china&id=1,参数为news=china&id=1,根据参数生成随机的定位字符串(字母组合),最终为news=chinaazxsdb& id=1adwsdss;

发送GET/POST或Headers请求,得到页面资源(HTML内容);

如果页面请求错误,则重新针对特定参数进行定位;

定位随机串在页面资源的DOM结构位置,比如在<script></script>内、在<input>标签属性内等;

根据定位到的位置生成特定的攻击代码,提高攻击的准确度,并能减少不相关的攻击请求;

根据特定的攻击代码再次生成“XSS攻击载体”;

发送GET/POST或Headers请求,得到XSS攻击后的页面资源(HTML内容);

XSS分析引擎判断是否存在攻击代码,存在则认为有XSS漏洞;

如果不存在,则判断是否需要变形攻击代码,再次生成“XSS攻击载体”。

3.3.4 任务调度模块的设计

扫描器系统能够根据用户在UI界面中设置的配置信息自动对目标网站进行检测,同时根据检测站点和优先级进行任务队列分配和自动化站点监测和任务状态处理。流程设计如图3.6所示。

添加图片注释,不超过 140 字(可选)

图 3.6 任务调度流程图

用户通过UI下达一个添加一个检测任务,即向数据库添加一个virtual_group。

前台程序经过处理生成多个group对应不同的监测模块,并存入数据库。

任务分发进程taskd轮询数据库,并从SQLite数据库中获取group信息。根据这些group的预约检测时间、检测优先级及检测周期判断目标网站任务此时是否需要调度,达到检测周期后会生成task(单次检测任务实例),并拆分成site(单个站点检测实例)存入Redis队列之中。

任务接收进程jobd定期从Redis中获取site,创建Worker子进程,并根据任务的开启的检测模块、爬虫爬行深度等配置信息,调度相应的检测模块进行扫描。

3.3.5 可用性检测模块的设计

  • 端口扫描

端口扫描可以探测出目标主机开放的端口,现在越来越多的 Web 站点更改了默认的 80 端口,使得对 Web 站点入侵的难度进一步加大,端口扫描技术在发现可能的 Web 端口 中起了较大的作用。

端口是就像是一条通信管道,当然也有可能会成为黑客的入侵通道。在 TCP/IP 参考 模型中,其中传输层用 16 位端口号来标识某个端口,并且端口号只具有本地意义,不 同的主机、服务器均可使用相同的端口。熟知一些常用端口号,在安全测试以及安全防 御过程中极其重要,在针对 Web 站点的攻击过程中,Web 站点安全性可能较好,但是由 于服务器开启了其它不必要的服务或端口,黑客可能会以此为突破点进行渗透,在安全 检查时要关闭无关端口或服务。

使用端口扫描技术,在扫描端口的过程中可能会发现目标系统更多有价值的信息, 利用这些信息可进一步推断出目标系统可能存在的安全风险,并及时进行修补。常见的端口扫描技术有 TCP Connect 扫描、TCP SYN 扫描、UDP 扫描等。

  1. TCP Connect 扫描 TCP Connect 扫描是建立在三次握手基础之上的。三次握手是指客户端首先会发送SYN 数据包给服务器端,然后服务器端返回 SYN 和 ACK 数据包,最后客户端再发送 ACK 数据包,与此同时客户端可以发送数据到服务器端。TCP Connect 扫描探测过程是在三 次握手的第二个阶段,当服务器端返回 SYN 和 ACK 数据包时,即可判断端口是开放的, 如果未返回 SYN 和 ACK 数据包,则此端口有可能是关闭的。在 Nmap 扫描工具中,可以 通过添加-sT 的选项来进行 TCP Connect 扫描。利用 TCP Connect 扫描方式某站点,扫描截图如图3.7所示:

添加图片注释,不超过 140 字(可选)

图 3.7 TCP-Connect扫描截图 TCP Connect 扫描最大的优点就是扫描准确,但是会在目标系统日志里留下大量扫描记录,容易被管理员发现,扫描过程也容易会被防火墙、入侵检查系统等安全设备阻断。

  1. TCP SYN 扫描 TCP SYN 扫描不使用完整的 TCP 连接,没有完整的三次握手。TCP SYN 扫描又称半连接扫描,扫描过程如下:首先客服端会向目标主机的某个端口发送 SYN 数据包,当服务 器端收到后,会向客服端发送 SYN 和 ACK 数据包,这时客户端不发送 ACK 应答数据包而 是发送 RET 连接重置数据包。如果端口未开启,目标主机直接返回 RST 连接重置数据包 结束会话。由于没有完成三次握手的过程,客户端与服务器端无法建立正常的 TCP 连接。 在 Nmap 扫描工具中,可以通过添加-sS 的选项来进行 TCP SYN 扫描,利用 TCP SYN 扫描 方式扫描某站点,扫描截图如图3.8所示:

添加图片注释,不超过 140 字(可选)

图 3.8 TCP-SYN扫描截图 TCP SYN 扫描的优点在于扫描要比 TCP Connect()扫描隐蔽,可能逃脱安全设备的阻断,发现更多隐蔽端口信息。

  1. UDP 扫描

UDP 扫描通常与 ICMP 协议相结合进行,它发送没有携带任何数据的 UDP 数据包到服务器端,如果服务器端返回 ICMP 端口不可达时,则表示目标端口是关闭的;如果某服 务响应一个 UDP 报文,则表明该端口是开放的。在 Nmap 扫描工具中,可以通过添加-sU 的选项来进行 UDP 扫描,利用 UDP 扫描方式扫描某站点,扫描截图如图3.9所示:

添加图片注释,不超过 140 字(可选)

图 3.9 UDP扫描截图

  • 性能监控 客户端浏览器通过 HTTP 请求来向 Web 服务器请求访问资源,HTTP 请求通常是由三部分组成,分别是请求行、请求头、请求内容。常见的 HTTP 请求方法如表3.1所示: 表 3.1 常见HTTP请求方法

方法

说明

GET方法

请求页面并返回消息

POST方法

提交表单数据

HEAD方法

获取页面请求头

OPTIONS方法

查询可以使用的方法

PUT方法

修改内容,属于危险方法

DELETE方法

删除内容,属于危险方法

服务器端在处理完发送过来的消息后会进行响应,HTTP 响应消息也是由三部分组成,分别是状态码、消息头、返回内容,常见的 HTTP 状态码下表 3.2所示。 表 3.2 常见HTTP状态码

状态码

说明

200

请求成功

202

需进一步处理

301

永久移动

302

临时移动

400

请求包含错误

401

未授权访问

403

禁止访问

404

页面未找到

500

服务器内部错误

502

网关错误

可用性检测模块通过HTTP(S)请求、域名解析、Ping等方式分析响应时间,及时发现出现链路异常、访问延迟、解析错误等情况,判断Web应用的可用性状况。 3.3.6 插件机制的设计 有许多类型的Web应用程序漏洞。为了确保各种新的Web应用程序漏洞可以集成到系统中,系统有一些可扩展性设计。考虑到每个漏洞的扫描原理具有相同的实现过程,如图3.6所示。等效于客户端发送和接收HTTP消息时,所使用的测试脚本对于不同的扫描漏洞模块是不同的,并且根据漏洞的特征,结果会有所不同。 图3.6 通用漏洞攻击测试流程图 具体过程是构造HTTP请求,发送HTTP请求消息,接受HTTP响应消息,分析响应,并保存结果。为了抽象这个攻击过程,你可以使用类继承机制来规定每个接口的接口。扫描模块,以便所有扫描模块类继承自父类。每个扫描模块之间的类关系如图3.7所示。 这种强制约束机制增强了扫描程序的可伸缩性。漏洞扫描程序还采用动态编程语言实现,根据用户的需要动态加载所需的插件。只要这些新的漏洞扫描插件根据以下内容编写插件即可。在父类的接口中,它们被放入插件库中。如果用户选择某个漏洞扫描,漏洞扫描程序将自动扫描插件库并动态将漏洞的扫描插件加载到扫描中。 图3.7 攻击模块类继承图 每个漏洞都有两种攻击:提交get请求并提交post请求,分别是攻击GET()和攻击POST()接口的责任。如果有新的漏洞,可以直接编写漏洞扫描插件根据规范,继承Attack类并实现attatck GET()和攻击POST()接口,然后将文件添加到插件库.XSSAtack类实现扫描XSS漏洞,SQLAttack类实现SQL漏洞检测,并且DIRAttack类实现扫描目录遍历漏洞。 3.3.6 数据库的设计 数据库位于系统的数据层,为结果数据提供统一管理,如用户,漏洞描述信息和Web爬虫爬行。数据库系统可以比文件系统更好地管理数据性能。我的SQL目前在Internet上。最流行的开源数据库,可以很好地连接后端程序,Linux,apache,Pyhon / PHP构成了Internet上最流行的架构LAMP。系统可以使用数据库添加,删除,更改,检查,排序和统计数据。数据库中只有三个表,用于存储URL的表t_url和网页中的字符串参数,表描述表t_漏洞的漏洞描述和管理用户的表t_users。 (1)用户表,表名定义为t_user,该表记录用户的登录验证信息,包括用户名、密码、权限、创建时间,具体如表3.1 所示。 表3-1t_user表的字段

列名

类型

是否为空

默认值

主键

描述

Id

Int(11)

自增字段

Name

VARCHAR(32)

用户名

Password

VARCHAR(32)

用户名密码

Type

VARCHAR(32)

用户类型

Time

Date

用户创建时间

(2)漏洞描述,表名定义为t_vulnerability,该表记录漏洞的名称,类型,描述,优先级,发现这个漏洞的数量,解决这个漏洞的方法法等等信息,具体如表3.2所示。 表 3-2 t_vulnerability 表的字段

列名

类型

是否为空

默认值

主键

描述

Id

Text

漏洞类型

Name

Text

漏洞名称

desription

Text

漏洞描述

priority

Text

漏洞优先级

Num

Int(11)

漏洞数量

Solution

Text

漏洞防御解决方案

2)网络爬虫的结果网址记录,表名定义为t_url,该表记录网址,提交网址的方法是 GET还是POST方法,网址后面的查询字符串参数,具体如表3-3所示。 表 3-3 t_url 表的字段

列名

类型

是否为空

默认值

主键

描述

Id

Int(11)

自增字段

url

Text

网址

method

Text

请求方法

Type

Text

网址类型

attack_str

Text

测试字符串

3.4 Web应用安全漏洞扫描器系统功能实现 3.4.1 爬虫模块的实现 爬虫模块的实现,使用的编程开发语言为Python,爬虫模块的类关系如图3.10所示。

添加图片注释,不超过 140 字(可选)

图 3.10 爬虫模块类图 本模块主要应用以下四个核心技术:

  • urllib 本模块利用Python中的urllib库获取网页内容,以便html及PhantomJS Render进行解析。urllib是Python自带的一个抓取网页信息一个接口,它最主要的方法是 urlopen(),是基于python的open()方法的。下面是主要说明: urllib.urlopen('网址'):这里传入urlopen()的参数有特别说要求,要遵循一些网络协议,比如 http,ftp,也就是说,在网址的开头必须要有http://这样的说明。故可使用url.lower().startswitch()函数来进行标准url的判断。 例如:url.lower().startswith("http://") or url.startswith("https://")。 read方法的是获取相对应的网址的网页内容。 例如:data=urllib.urlopen('http://www.baidu.com').read()。

  • urlparse 通过 Python 所带的 urlparse 模块,其中的 urlparse 方法可以将 URl 分解,并返回元组 (scheme, netloc, path, parameters, query, fragment),这样可以判断 netloc 剔除不同域名的 url。 例如: result=urlparse.urlparse(http://localhost/core/ui/templates/login.html)ParseResult=(scheme=’http’,netloc=’localhost’,path=’core/ui/templates/login.html’,parameters=’’, query=’’, fragment=’’)

  • PhantomJS Render 传统网络爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的,而进行人工分析后台请求,手动去摸索JS渲染的一些结果,是不现实的,所以,我们需要有一些好用的工具来帮助我们像浏览器一样渲染JS处理的页面。PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。 本文主要使用PhantomJS Render的Web server模块的两个对象,request和response。主要说明如下: request: method:http请求的方法,get、post等 url: 包含http请求URL和get请求的query string(如果有的话) httpVersion:当前采用的http协议的版本 headers:所有http请求头部信息,以键值对的形式提供 post:请求主体,仅对post和put方法的请求有效 postRaw:如果Content-type为 'application/x-www-form-urlencoded'(表单上传的默认值)时,post的原始信息会暂存在此属性中。 response: headers:以键值对的形式保存所有的HTTP请求头部的信息,在第一次调用 write()方法前一定要设置。 setHeader(name, value):设置或添加特定的头部信息 header(name):获取特定的头部信息 statusCode:设置HTTP状态码 setEncoding(encoding): 标明传给 write()的数据需要转换成什么格式,默认为UTF-8。如果数据为二进制字符串,则设置为“binary” write(data):向response中发送数据块,可以多次调用 writeHead(statusCode, headers):向response中发送响应头部。 statusCode是一个3位数字,表示HTTP状态码(如404)。后一个参数代码响应头部 close():关闭HTTP连接 closeGracefully():功能与 close()一样,不过更安全可靠,它能保证响应头部先发送,并自动在响应最后加上 response.write("")

  • 正则匹配技术[23]

本模块使用的匹配技术主要是正则表达式技术,它是一种可以用于模式匹配和替换的强有力的工具,可以用它来提取符合要求的 URL。如表3.3所示是一些最常见的字符集及其定义的方式。

表 3.3 常见字符集及定义方式

^

行首匹配

?

0或1个

*

0或多个

+

1或多个

\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,'\n' 匹配一个换行符,'\\' 匹配 "\",而 "\(" 则匹配 "("

$

匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位

.

除 "\n" 之外的任何单个字符,要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式

\s

空白符 制表符

\S

非空白符

\w

匹配包括下划线的任何单词字符,等价于 [A-Z a-z 0-9_]

\W

匹配任何非单词字符,等价于 [^A-Z a-z 0-9_]

()

提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串,(\s*)表示连续空格的字符串

[]

定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号

{}

一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s{1,3}表示匹配一到三个空格

3.4.2 SQL注入漏洞扫描的实现

SQL注入漏洞扫描模块的实现,使用的编程开发语言为Python,SQL注入漏洞扫描模块的类图如图3.11所示。

添加图片注释,不超过 140 字(可选)

图 3.11 SQL注入漏洞扫描类图

SQL注入漏洞检测的原理,通过构造SQL注入检测变量,实现对目标网站上是否存在SQL注入漏洞的检测。要完成对于一个网站的漏洞检测任务,涉及下两个关键技术;

  1. 注入代码动态生成技术。根据SQL注入攻击的各种可能的语法变形方式化及程序员可能的对用户输入数据的过滤处理方式,我们需要精、构造多个SQL注入漏涧检测单元;

  2. 注入代码的响应分析技术。主要分析注入代码出现的位置,根据注入代码出现的位置,确定注入代码是否可形成攻击能力。前面我们介绍到,有经验的程序员或者数据库管理人员会利用一个通用错误界面来代替数据库错误,因此SQL注入漏桐检测单元包含多条精也、构造的请求数据,利用这些请求数据向服务器发送请求,接收服务器的应答信息,然后利用一个交叉验证函数对返回的多个应答信息进行比较分析,W此来判断服务器是否存在SQL注入漏洞。

因此SQL注入漏洞扫描模块可以分为两个子模块:SQL注入漏洞扫描单元构造子模块和SQL注入漏洞检测子模块,下面分别介绍下两个子模块的主要原理与实现。

  1. 单元构造子模块 针对不同的输入参数,构造不同的漏洞扫描单元。 整形参数 当输入的参数是整形的时候,如 ID、年龄、个数等,若是查询操作,可以猜测 SQL 语句大致如下: Select * from table where 字段名=输入的值 例如有 http://www.example.com/test.php?id=1 那么构造三个请求的步骤如下: http://www.example.com/test.php?id=1’,将这个请求提交到服务器,会生成SQL 查询语句 select * from table where id=1’,那么 test.php 会出现运行异常,因为语句中出现了不该出现的单引号分隔符。 http://www.example.com/test.php?id=1 and 1=1,页面运行正常,而且运行结果与http://www.example.com/test.php?id=1 一致。 http://www.example.com/test.php?id=1 and 1=2 , 运 行 出 现 异 常 或 者 和http://www.example.com/test.php?id=1 运行结果不一致。 如果以上三个步骤全部满足,则说明一定存在 SQL 注入漏洞。 字符型参数 当输入的字符串是字符串类型时,SQL 语句可能如下: Select * from table where 字段名=‘输入的值’ 例如有 http://www.example.com/test.php?name=username,那么构造三个请求的步骤如下: http://www.example.com/test.php?name=username’,这个请求提交到服务器, 会生成 SQL 查询语句 select * from table where id=1’,那么 test.php 会出现运行 异常,因为语句中出现了不该出现的单引号分隔符。 http://www.example.com/test.php?name=username’ and name=’name’,页面运行正常,而且运行结果与 http://www.example.com/test.php?name=name 一致。 http://www.example.com/test.php? name=username and name=norname,运行结果出现 异常或者和 http://www.example.com/test.php? name=usernameand 运行结果相 比较不一致。 如果以上三个步骤全部满足,则说明一定存在 SQL 注入漏洞。

  2. 漏洞检测子模块

在利用检测单元进行检测时,检测单元里面的SQL注入语句将一一添加在正常的访问语句后面,然后发送到服务器并接受返回值。将构造出的请求提交给服务器并对结果进行分析,如果服务器返回“500”错误,且 SQL注入漏洞检测模块,可满足多种数据库的检测,如MySQL、PostgreSQL、Microsoft SQL Server、Microsoft Access、Oracle、IBM DB2、SQLite、Sybase等。

如果HTTP响应状态码是200,那么还要继续判断这个页面是否与正常返回的 页面一致,所以继续发送一个正常的请求,运用哈希算法比较正常返回的页面与 发送攻击字符串的页面内容是否一致,如果一致则说明不存在 SQL 注入漏洞漏洞, 如果不一致,则说明数据库的信息存在,存在 SQL 注入漏洞。

3.4.3 XSS漏洞扫描的实现

XSS漏洞扫描模块的实现,使用的编程开发语言为Python,XSS漏洞扫描模块的类图如图3.12所示。

添加图片注释,不超过 140 字(可选)

图 3.12 XSS漏洞扫描类图

XSS漏洞检测子系统主要是发现一个页面是否存在XSS漏洞,主要完成功能如下:

1)根据爬虫猎取的表单参数,定位到要处理的表单;

2)生成各种不同的payload测试代码,为了考虑提高测试的准确性和高效性,还需要采取一些了网页编码混淆技术,例如改变大小写字母,URL 编码,base64 编码,增加分隔符,单引号,双引号等,将测试代码进行混淆编码。

3)将生成各种不同的测试代码进行注入并提交,举一个例子说明如何构造能够扫描 XSS 漏洞的URL请求,譬如有一个 GET 请求,它的URL 是 http://www.example.com/xss.php?file=article我们采用字符串”<script>alert('XSS')</script>”作为测试代码,那么构造请求 URL 就为 http://www.example.com/xss.php?file=<script>alert('XSS')</script>。如果有一个 post 请求,则将每一个输入域的值换成测试字符串,注意所有输入域的测试字符串不能一样,这样找不出那个输入域可能会有漏洞。findXSS 里面封装了构建请求和发送请求。

4)分析添加XSS代码后的响应页面,以确定是否成功注入测试代码,将构造出的 HTTP请求提交给服务器后,服务器处理请求返回一个 HTTP 响 应。首先对 HTTP 响应头进行分析,如果 HTTP 响应状态码是“500”错误,那么 很有可能存在XSS 漏洞;如果 HTTP 响应状态吗是“200”,那么具体情况还得具体分析。HTTP 响应状态码是“200”,说明服务端可以顺利地处理 HTTP 请求,并且产生响应返回。对于这样的页面,要检测很多种响应的测试字符串的形式,服务器端很可能对用户的输入进行了转义。检测的方法就是判断提交的测试字符串的各种形式是否在页面中存在,如果存在则说明 XSS 漏洞,还可以再次对服务器发出正常请求,并且正常请求的响应和构造出来的请求的响应进行哈希值计算。如果哈希值一致则说明不存在 XSS 漏洞,否则存在 XSS 漏洞。

3.3.4 任务调度模块的实现

根据本文3.3.4节对任务调度模块的设计,任务调度模块共有如下功能:

1)维护了用户下达的漏洞扫描任务的所有信息,比如扫描任务的名称、起止时间 、 所用扫描策略以及漏洞扫描报告等;

2)提供了将用户下达的漏洞扫描任务切分成合适的粒度的子扫描任务的方法 ,这些子扫描任务将被分配给漏洞扫描器执行,这一切分动作对用户透明;

3)维护了子扫描任务的所有相关信息,为调度系统的其他模块提供了操作子扫描任务的接口;

4)提供接口供用户端操作总扫描任务,比如对漏洞扫描任务的增删改查等。

任务调度模块的类图如图3.13所示。

添加图片注释,不超过 140 字(可选)

图 3.13 任务调度模块类图

  • 扫描任务的分类 在本文3.3.4节已经介绍过,一个漏洞扫描任务分为两类,一类是用户直接操作的漏洞扫描任务Task;另一类是漏洞扫描器执行的任务SubTask; 其中Task根据完成进度分为两类: 已完成的总扫描任务; 未完成的总扫描任务。 SubTask根据是否被分配及扫描进度分为三类: 已完成的子扫描任务; 已分配未完成的子扫描任务; 未分配未完成的子扫描任务。

  • 各类属性介绍 下面给出本模块中三三个实现类TaskManager、Task 和SubTask 的属性介绍3。TaskManager 类中维护了两个列表: List<Task> completedTasks: 所有已完成总扫描任务的集合。 List<Task> uncompletedTasks: 所有未完成总扫描任务的集合。Task 中维护了的信息为: List<SubTask > unDispatchedTaskList :未分配子扫描任务列表 List<SubTask> beingTackledTaskList: 正在执行子扫表任务列表 List<SubTask> completedTaskList :已完成子扫描任务列表 String taskID: 任务ID String taskName: 任务名称 String targetFrom: 任务起始 IPStringtargetTo: 任务终止 IP double status: 任务执行进度 booleanhigher: 若为真,则代表较高优先级的漏洞扫描任务 SubTask 中记录了子扫描任务的具体信息: String taskID: 任务ID String taskName: 任务名称 String targetFrom: 任务起始 IPString targetTo: 任务终止 IPdouble status: 任务执行进度 double isRunning: 该任务是否正在执行 Scannerscanner: 当前执行该扫描任务的漏洞扫描器实例

  • SubTask 状态迁移 当某个子扫描任务被实例化之后,处于未分配状态,并等待被调度模块分配给某个漏洞扫描器执行。被某个漏洞扫描器执行的子扫描任务在初始分配时处于“已分配、未完成”状态。需要说明的是,处于这个状态的子扫描任务只是被分配给了某个漏洞扫描器执行,这个漏洞扫描器内部同样有一套自身的调度机制,也就是说, 处于该状态的子扫描任务只是能够被漏洞扫描器进行调度执行,而不能保证时刻处于被执行状态。这个任务具体的状态有4种,分别为: 等待调度状态、正被执行状态、暂停状态和已完成状态。“已分配、未完成”状态的两个后继状态分别是“已完成”状态和终止状态。当某个漏洞扫描任务在漏洞扫描器中成功执行完成之后,将转移到“已完成”状态。 3.3.5 可用性检测模块的实现 可用性检测模块的实现,主要借助已有的端口扫描和站点可用性探测工具,将其脚本集成到本文所述的安全漏洞扫描器中,实现站点信息获取及站点可用性检测的功能。 3.5 本章小结 本章针对传统的对网站的每个URL进行每种漏洞类型的遍历检测这种效率低下、耗时过长的漏洞检测机制,提出了基于优化爬虫策略的漏洞扫描器架构。网络爬虫在链接判重和遍历策略两个方面进行优化,避免了大量重复无用的爬虫链接,并提高了爬虫的效率;结合改进的网络爬虫技术、SQL注入漏洞检测方法、XSS注入漏洞检测方法,介绍了 Web 应用安全漏洞扫描器各部分的详细设计与实现。 本章分析了Web应用程序漏洞扫描程序的要求,并给出了系统的设计目标和所需的功能模块。包括漏洞扫描程序体系结构的整体描述。漏洞扫描程序包括网络爬网程序模块,漏洞扫描模块,用户界面模块和报告生成模块。漏洞扫描模块需要检测多个漏洞。SQL注入漏洞检测,XSS漏洞检测,目录遍历漏洞检测。详细描述了每个功能模块的设计。 第四章 Web应用安全漏洞扫描器测试及分析 Web应用安全漏洞扫描器测试是在真实运行环境中,采用测试用例测试扫描器所定义的功能和质量属性是否满足要求。测试的内容包括测试环境、测试用例、测试过程和测试结果分析等。 4.1 测试环境 4.1.1 扫描器部署环境 Web应用安全漏洞扫描器测试部署环境基于ubuntu系统,采用Python语言进行开发。其物理分布和网络环境如图4.1部署图所示。

添加图片注释,不超过 140 字(可选)

图 4.1 Web应用安全漏洞扫描器部署图 Web应用安全漏洞扫描器部署方式简单,只需将扫描器接入到用户网络并确保扫描器与被检测目标间网络可达,在使用过程中,用户通过浏览器访问扫描器即可下达扫描指令和查看扫描结果。 4.1.2 漏洞测试环境 为了验证本扫描器是否满足本文的测试目的,本文选取了公司内部自己搭建的Web应用安全漏洞测试环境-Evn,作为Web应用程序扫描器的评估工具。Evn是一个包含Web应用程序漏洞的平台,目的是帮助测试Web应用漏洞扫描器的功能、质量和准确性。Evn收集了很多独特的包含漏洞的Web页面,用于测试Web应用程序扫描器的多种特性。 由于本文主要研究的是SQL注入和XSS漏洞,所以将Evn部署在系统中后,对数据库中的漏洞数目进行了一些调整。现有的漏洞数目为:SQL注入漏洞24个cases; XSS 漏洞13个 cases。 Evn测试环境截图如下图4.2、4.3所示:

添加图片注释,不超过 140 字(可选)

图 4.2 SQL注入漏洞测试环境

添加图片注释,不超过 140 字(可选)

图 4.3 XSS漏洞测试环境 4.2 测试过程 4.2.1 功能测试

  • 爬虫功能、SQL注入及XSS漏洞检测功能、可用性检测功能测试 通过搭建的漏洞测试环境Evn,进行网络爬虫、SQL注入漏洞及XSS漏洞检测、可用性检测的功能测试。其测试结果如图4.4所示。

添加图片注释,不超过 140 字(可选)

图 4.4 扫描结果 由于扫描器的自动化检测功能,对于用户来说是透明的,我们可通过扫描结果来判断功能是否实现。 从图4.4可以看出,本文设计的Web应用安全漏洞扫描器,扫描出SQL注入漏洞19个,XSS漏洞10个。同时记录扫描时间为4min53s。 通过UI交互界面的仪表盘,用户可直观看出漏洞扫描结果,如图4.5所示。

添加图片注释,不超过 140 字(可选)

图 4.5 漏洞分布情况展示

  • 任务调度功能

登录进入后,添加新任务,界面如图4.6所示。

添加图片注释,不超过 140 字(可选)

图 4.6 添加新任务

添加XSS漏洞及SQL注入漏洞的扫描任务,查看扫描队列,界面如图4.7所示。

添加图片注释,不超过 140 字(可选)

图 4.7 扫描队列

4.2.2 非功能测试

Web应用安全漏洞扫描器是基于B/S架构设计实现的,通过友好的UI交互界面,可直接登录使用,登录界面如图4.8所示。

添加图片注释,不超过 140 字(可选)

图 4.8 登录界面

扫描完成后,会生成漏洞报告,界面截图如图4.9所示。

添加图片注释,不超过 140 字(可选)

图 4.9 漏洞报告

4.3 测试结果分析

上一节主要列出的是基于优化爬虫策略的漏洞扫描器扫描结果。为了证明其性能的改进,还需对其扫描结果与其他扫描器的扫描情况进行比较。我们主要从两个方面进行比较:一个是扫描器的扫描速率;另一个是扫描器对漏洞扫描的覆盖率。

表 4.1 本文设计漏洞扫描器与其他两款扫描器扫描结果对比表

指标项/扫描器

本文设计漏洞扫描器

WVS

AppScan

扫描时间

4min53s

8min24s

10min5s

SQL注入漏洞数(个)

19

12

8

XSS漏洞数(个)

10

7

6

表4.1中,我将本文设计的Web应用安全漏洞扫描器与其他两款扫描器扫描结果进行对比,验证了本方设计 的Web应用安全漏洞扫描器在扫描速率及漏洞覆盖率方面性能更优。

4.4 本章小结

本章的主要工作是完成Web应用安全漏洞扫描器的功能性及非功能性测试,在介绍系统部署环境、漏洞测试环境的基础上,使用本文设计实现的Web应用安全漏洞扫描器对主流的Web应用安全漏洞XSS漏洞及SQL注入漏洞进行测试,并选取了两款业内常用的Web应用安全漏洞扫描器来进行对比测试,验证系统的可用性,高效性和结果全面性。

本章介绍了 Web应用漏洞扫描器各个模块的具体实现过程,首先介绍了扫描器

的用户界面模块,然后介绍了网络爬虫模块的实现过程,包括提取所有 URL,URL

标准格式化,URL过滤,URL参数变换等过程。它能提高漏洞扫描器的性能,接着

介绍了三个典型的web应用漏洞的扫描模块的实现。最后介绍了如何生成一份格

式良好的安全漏洞报告。

第五章 结束语

本章是本人对论文工作的总结。在给出论文工作结论的基础上,分条目介绍论文主要完成的工作,并对Web应用安全漏洞扫描器进行客观评价和分析,提出后续改进的建议。

5.1 论文工作总结

随着互联网技术的不断发展, 安全漏洞的攻击也愈演愈烈,大量的针对于网络设备或者服务器的攻击开始逐渐转移到Web应用上来,Web应用安全渐渐成为了一种主要的网络安全问题。与此同时,网络安全技术也在快速成熟,用户的安全意识也在不断增强。越来越多的用户特别是企业用户开始使用漏洞扫描器给系统进行安全扫描。商业版、家庭版及开源的漏洞扫描器层出不穷。因此,如何提高Web应用漏洞扫描程序的扫描速率及扫描覆盖率成为了一个热门的课题,对Web漏洞扫描器进行分析和改进也具有很大的现实意义。

本文设计并实现了Web应用安全漏洞扫描器,以优化爬虫技术作为切入点,主要从以下几个方面进行研究:

1、对目前的Web应用安全状况进行了全面的分析,确定对Web漏洞扫描器的研究具有重要的理论意义和实用价值。

2、详细介绍了网络爬虫的基本概念、爬取策略及其在漏洞扫描中的作用;同时对漏洞的基本概念、产生原因、漏洞类型、漏洞检测技术等进行详细的阐述,特别是SQL注入漏洞和XSS漏洞。

3、通过对国内外漏洞扫描器三个方面的量化对比,总结出为提升扫描器效率而亟需改进的地方。

4、设计了优化爬虫策略,SQL注入和XSS漏洞的检测机制,在此基础上设计并实现了基于插件式扩展的Web应用安全漏洞扫描器。

5、通过对所设计的Web应用安全漏洞扫描器性能的测试对比,证明了扫描器的可用性、高效性及扫描结果的全面性。

5.2 后续工作展望

 

参考文献

[1] 王伟军, 孙晶. Web2. 0 的研究与应用综述[J]. 情报科学, 2008, 25(12): 1907-1913.

[2]赵鑫,朱东来,杨宏. 高效移动互联网网站安全监测方法研究与实现[A]. 中国通信学会无线及移动通信委员会.2013全国无线及移动通信学术大会论文集(上)[C].中国通信学会无线及移动通信委员会:,2013:3.

[3]王璇. 基于网络漏洞的扫描器的研究与应用[D].吉林大学,2012.

[4]丁妮. Web应用安全研究[D].南京信息工程大学,2007.

[5]刘明明. Web应用漏洞扫描器的设计与实现[D].电子科技大学,2014.

[6]杨兴春, 牟剑平. 政府门户网站安全现状, 原因及其对策研究[J]. 网络安全技术与应用,2010 (9): 32-34.

[7]尹虹. Web 应用程序漏洞主动扫描器的研究与实现[D]. 国防科技大学, 2005.

[8]付堂欢. 基于网络的web应用漏洞扫描系统的分析与设计[D].北京邮电大学,2013.

[9]孙群,漆正东.Web聊天室探测系统的网页获取和改进研究[J].计算机光盘软件与应用,2012, 3: 118.

[10]张烨青. Web应用安全漏洞扫描器爬虫技术的改进与实现[D].北京邮电大学,2014.

[11] 俞小怡,常艳,许捍卫.Web 应用中的攻击防御技术的研究与实现[J].计算机安全,2008(6):47-51.

[12] 赵亭,陆余良等.基于表单爬虫的 Web 漏洞探测[J].计算机工程,2008,34(9):186-188,215.

[13]黄从韬. 面向Web服务安全的漏洞扫描器的设计与实现[D].中南大学,2012.

[14]郭俸明. 漏洞扫描工具原理与实现[D].中国地质大学(北京),2008.

[15]尹虹. Web应用程序漏洞主动扫描器的研究与实现[D].国防科学技术大学,2005.

[16]闫美凤. 策略驱动的可扩展网络漏洞扫描研究[D].太原理工大学,2006.

[17]蒋宇. 面向 Web 安全的漏洞检测系统的研究与实现 [D]. 吉林大学, 2011.

[18]陈涛.基于网络的漏洞扫描器设计与实现[J].电脑知识与技术,2008(11):235-236.

[19]刘欣萍.企业网络信息安全问题及策略[J].电子商务,2013,2: 024.

[20]杨新英. 基于网络爬虫的Web应用程序漏洞扫描器的研究与实现[D].电子科技大学,2010.

[21]刘莉. 网络漏洞扫描器的设计与实现[D].西安电子科技大学,2007.

[22]李鹏,杨献荣,许丽华.网络漏洞扫描器的设计与实现[J].计算机工程,2003(08):116-117+142.

[23]胡军伟, 秦奕青, 张伟. 正则表达式在 Web 信息抽取中的应用[J]. 北京信息科技大学学报: 自然科学版, 2012, 26(6): 86-89.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504073.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞工具】小米路由器任意文件读取漏洞python图形化框架利用工具(poc|exp)

there is no tomorrow 工具利用 漏洞扫描 漏洞利用 poc 本文工具、源码获取 因本工具涉及到源码分享&#xff0c;如有需求&#xff0c;请私聊圈主 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用…

【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件

Logstash 过滤 Filter 插件 数据从源传输到存储库的过程中&#xff0c;Logstash 过滤器能够解析各个事件&#xff0c;识别已命名的字段以构建结构&#xff0c; 并将它们转换成通用格式&#xff0c;以便进行更强大的分析和实现商业价值。 Logstash 能够动态地转换和解析数据&a…

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…

用OpenCV实现UVC视频分屏

分屏 OpencvUVC代码验证后话 用OpenCV实现UVC摄像头的视频分屏。 Opencv opencv里有很多视频图像的处理功能。 UVC Usb 视频类&#xff0c;免驱动的。视频流格式有MJPG和YUY2。MJPG是RGB三色通道的。要对三通道进行分屏显示。 代码 import cv2 import numpy as np video …

用户界面软件02

基于表单的用户界面 在“基于表单的用户界面”里面&#xff0c;用户开始时选中某个业务处理&#xff08;模块&#xff09;&#xff0c;然后应用程序就使用一系列的表单来引导用户完成整个处理过程。大型机系统上的大部分用户界面都是这样子的。[Cok97]中有更为详细的讨论。 面…

使用Registry explore实现法医检查练习

Windows Forensics 1&#xff08;windows 取证&#xff09; 第一题&#xff1a; 关于用户的基本都在sam注册表中&#xff0c;所以使用Registry explore&#xff0c;添加一个sam进来检查&#xff0c;通常sam注册表都是在C:\Windows\System32\config中 接着就可以开始我们的检验…

Linux服务器网络不通问题排查及常用命令使用

在PVE主机上创建虚拟机&#xff0c;并配置静态ip和dns后&#xff0c;主机可以正常访问网络&#xff0c;但是在宿主机或者其他机器上都无法访问该虚拟机。 检查ip是否联通且端口是否开启 如果ip无法ping通&#xff0c;可能是静态ip配置、网卡或桥接设置问题。 [k8slocalhost …

道品科技智慧农业与云平台:未来农业的变革之路

随着全球人口的不断增长&#xff0c;农业面临着前所未有的挑战。如何在有限的土地和资源上提高农业生产效率&#xff0c;成为了各国政府和农业从业者亟待解决的问题。智慧农业的兴起&#xff0c;结合云平台的应用&#xff0c;为农业的可持续发展提供了新的解决方案。 ## 一、智…

《C++11》右值引用深度解析:性能优化的秘密武器

C11引入了一个新的概念——右值引用&#xff0c;这是一个相当深奥且重要的概念。为了理解右值引用&#xff0c;我们需要先理解左值和右值的概念&#xff0c;然后再理解左值引用和右值引用。本文将详细解析这些概念&#xff0c;并通过实例进行说明&#xff0c;以揭示右值引用如何…

【OJ刷题】同向双指针问题

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;OJ刷题入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1…

RK3562编译Android13 ROOT固件教程,触觉智能开发板演示

本文介绍编译Android13 ROOT权限固件的方法&#xff0c;触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 关闭seli…

用户界面的UML建模11

然而&#xff0c;在用户界面方面&#xff0c;重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此&#xff0c;《exception》类能够聚合《boundary》类。 参见图12&#xff0c;《exception》Database…

【大模型】百度千帆大模型对接LangChain使用详解

目录 一、前言 二、LangChain架构与核心组件 2.1 LangChain 核心架构 2.2 LangChain 核心组件 三、环境准备 3.1 前置准备 3.1.1 创建应用并获取apikey 3.1.2 开通付费功能 3.2 获取LangChain文档 3.3 安装LangChain依赖包 四、百度千帆大模型对接 LangChain 4.1 LL…

用Python实现简单的任务自动化

目录 1. 自动发送邮件提醒 2. 自动备份文件 3. 自动下载网页内容 总结 在现代工作和生活中,任务自动化可以极大地提高效率和准确性。Python,作为一种功能强大且易于学习的编程语言,是实现任务自动化的理想选择。本文将通过几个简单而实用的案例,展示如何用Python实现任…

用JAVA编写一个简单的小游戏

用Java语言编写一个简单的小游戏。这里是一个非常基础的猜数字小游戏的代码示例。在这个游戏中&#xff0c;程序会随机选择一个1到100之间的整数&#xff0c;玩家需要猜测这个数字是什么。每次猜测后&#xff0c;程序会告诉玩家他们猜的数字是太高了、太低了还是正确。 impor…

腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器

作品简介 在CTFer选手比赛做crypto的题目时&#xff0c;一些题目需要自己去解密&#xff0c;但是解密的工具大部分在线上&#xff0c;而在比赛过程中大部分又是无网环境&#xff0c;所以根据要求做了这个工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c;通过…

MATLAB深度学习实战文字识别

文章目录 前言视频演示效果1.DB文字定位环境配置安装教程与资源说明1.1 DB概述1.2 DB算法原理1.2.1 整体框架1.2.2 特征提取网络Resnet1.2.3 自适应阈值1.2.4 文字区域标注生成1.2.5 DB文字定位模型训练 2.CRNN文字识别2.1 CRNN概述2.2 CRNN原理2.2.1 CRNN网络架构实现2.2.2 CN…

EXCEL: (二) 常用图表

10. 图表 134-添加.删除图表元素 图表很少是一个单独的整体&#xff0c;而是由十几种元素/对象拼凑出来的。 学习图表就是学习当中各类元素的插删改。 ①图表中主要元素的定义 图表上的一个颜色就是一个系列。 横轴是分类轴&#xff0c;将每个系列都分为几类。 ②选中图…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

c++类和对象---上

文章目录 类的介绍 类的声明 1.1 类名 1.2 成员变量 1.3 成员函数 1.4 访问权限 类的定义 2.1 成员变量的初始化 2.2 成员函数的实现 对象的创建和销毁 3.1 默认构造函数 3.2 析构函数 3.3 拷贝构造函数 3.4 对象的实例化 3.5 对象的销毁 成员访问控制 4.1 公有成员 4.2 私有…