版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要:如何及时、快速发现各种安全漏洞,并且修补安全漏洞,减轻或消除主机、URL、Web风险成为安全行业的重要课题。小型Web应用几十上百个页面,大型的Web应用成千上万个页面。如果靠人工的方式去检测每个页面的安全性,显然,这个成本是难以估计的。所以,就需要借助于自动化工具,帮助审计员去发现从主机到Web的安全漏洞。这些自动化工具就是漏洞扫描器。本次选题的目的是完成一个基于各种Web应用漏洞的的漏洞扫描器,设计思路主要是完成基于Python的脚本插件,其中要包含各种模块化的插件,通过各个模块的联动操作实现了一个完整的应用漏洞扫描工具。同时为了保证每一个功能相互独立又相互联动特地采用了模块化设计的思路,实现了对需要验证的主机完成对主机URL或者Web应用完成漏洞扫描工作,最后输出一份可提供于安全工程师有迹可循且直观的漏洞扫描报告的过程,从而为安全工程师的安全工作提供完整、高效的漏洞情报。关键词:漏洞扫描技术;Web应用安全;扫描器;模块化扫描;Python脚本ImplementationofaBrowserBasedVulnerabilityScannerAbstract:Howtotimelyandquicklydiscovervarioussecurityvulnerabilities,andpatchthemtoreduceoreliminatehost,URL,andwebriskshasbecomeanimportantissueinthesecurityindustry.Smallwebapplicationshavedozenstohundredsofpages,whilelargewebapplicationshavethousandstotensofthousandsofpages.Itisclearlydifficulttoestimatethecostofmanuallytestingthesecurityofeachpage.Therefore,torelyonautomatedtools,suchasvulnerabilityscanners,tohelpauditorsdiscoversecurityvulnerabilitiesfromhoststotheweb.Thepurposeofthisprojectistocompleteavulnerabilityscannerbasedonvariouswebapplicationvulnerabilities.ThedesignideaismainlytocompleteaPython-basedscriptplugin,whichincludesvariousmodularplugins,andrealizesacompleteapplicationvulnerabilityscanningtoolthroughthelinkageoperationofeachmodule.Inordertoensurethateachfunctionisindependentandinterrelated,amodulardesignapproachisadoptedtocompletevulnerabilityscanningworkforhosts,URLs,orwebapplicationsthatneedtobeverified.Finally,aprocessthatcanprovidesecurityengineerswithatraceableandintuitivevulnerabilityscanningreportisoutput,therebyprovidingcompleteandefficientvulnerabilityintelligenceforsecurityengineers'securitywork.Keywords:Vulnerabilityscanning;Webapplicationsecurity;scanner;modularscanning;Pythonscript.目录TOC\o"1-3"\h\u第1章绪论 11.1选题背景意义 11.2漏洞扫描器的发展现状 21.2.1漏洞扫描技术分类 21.2.2常见漏洞扫描软件 31.3本课题研究意义 41.4论文工作内容 41.5论文组织架构 5第2章安全漏洞扫描技术 72.1安全漏洞研究 72.1.1漏洞定义与分类 72.1.2漏洞审查 72.1.3漏洞危害 72.2安全漏洞库 82.2.1安全漏洞库具体作用 82.2.2现有的安全漏洞库 92.3漏洞扫描技术 92.3.1漏洞扫描器工作原理 92.3.2漏洞扫描器的发展历史 102.3.3漏洞扫描器的发展趋势 11第3章漏洞扫描器的系统分析 123.1漏洞扫描器概述 123.2可行性分析 123.2.1技术可行性分析 123.2.2经济可行性分析 123.3功能需求分析 123.4流程分析 13第4章漏洞扫描器的系统设计与实现 154.1总体设计 154.1.1设计目标 154.1.2设计平台 154.1.3具体模块分布 154.1.4模块联动系统 164.2模块设计 164.2.1用户界面模块设计 164.2.2目标选择模块设计 174.2.3扫描引擎模块设计 174.2.4漏洞检测模块设计 184.2.5漏洞管理模块设计 204.2.6扫描数据库模块设计 204.2.7漏洞报告模块设计 204.3模块实现 214.3.1用户界面模块 214.3.2目标选择模块 234.3.3扫描引擎模块 254.3.4漏洞检测模块 274.3.5漏洞管理模块 364.3.6扫描数据库模块 364.3.7漏洞报告模块 374.3.8其他使用说明 38第5章漏洞扫描器测试 405.1测试方式 405.2功能测试 405.3测试总结 42结论 43致谢 44参考文献 45第1章绪论1.1选题背景意义漏洞扫描器,对于安全工程师而言它像是一把万能的工具,可以帮助评估主机和网络的安全性能,发现网络中潜在的安全漏洞,提高网络的抗攻击能力;但是作为一个工具,其也可能被网络攻击者所利用,作为收集网络主机信息的重要手段。随着网络化和信息化的高速发展,网络已经逐渐成为人们生活中不可缺少的一部分,但网络信息系统的安全问题也变得日益严峻。网络攻击、入侵等安全事件频繁发生,而这些事件多数是因为系统存在各种安全漏洞所引起。漏洞(Vulnerability)也称为脆弱性[1],在漏洞被验证可使用的情况下,攻击者就可在未授权的情况下访问或破坏系统,轻则导致数据泄露,重则导致其系统瘫痪。不同的软硬件设备、不同的系统或者同种系统在不同的配置下,都会存在各自的安全漏洞。安全漏洞在网络安全中越来越受到重视。根据CNVD漏洞平台国家信息安全漏洞共享平台,从2022年年初开始漏洞出现量仍然极高:其中第一至第四季度分别发现漏洞3173、2774、2549、2338个。相应的,安全漏洞的出现就会带来一系列的网络攻击事件。为了保证网络系统的安全、合规、统一,国家也颁布了《中华人民共和国数据安全法》[2]。在该法律的约束下,中国的安全产业也在快速发展,而对于漏洞的处理上防患于未然就成了重中之重。对于安全漏洞引起的安全问题,采用事先检测系统的脆弱点、加固脆弱点,是必须要做的事情。漏洞的检测依赖于人的发现,因此它是一个动态的过程。一般而言,系统的规模、复杂度与自身的脆弱性成反比:系统越大、越复杂,就越脆弱。当发现系统的一个或多个漏洞时,对系统安全的威胁便随之产生。通常,黑客进行一次成功的网络攻击,首先会收集目标网络系统的信息,确定目标网络的状态,如主机类型、操作系统、开放的服务端口以及运行的服务器软件等信息,然后再对其实施具有针对性的攻击。而对目标系统信息及漏洞信息的获取,目前主要是通过漏洞扫描器实现的。漏洞扫描器是自动检测远程或本地主机在安全性方面脆弱点的程序。它通过模拟黑客攻击的方式对目标可能存在的已知安全漏洞进行逐项检测。对于系统管理员来说,采用安全漏洞扫描技术,能够快速、及时地查看网络的安全状况,通过关闭不必要的服务、修补已经发现的漏洞等措施来加强安全。网络的安全风险是实时存在的,利用漏洞扫描器来进行实时检测、保障网络和系统不被非授权用户侵入是确保网络安全的一个重要环节[3,4,5]。1.2漏洞扫描器的发展现状1.2.1漏洞扫描技术分类基于网络的的检测技术使用积极的、非破坏性的办法来检验目标是否有可能被攻击崩溃。它根据漏洞的不同特性,构造网络数据包,发给网络中的一个或多个目标服务器,以判断某个特定的漏洞是否存在。基于网络的漏洞扫描包含网络映射和端口扫描功能,一般由以下几个部分组成:(1)漏洞数据库模块;(2)用户配置控制台模块;(3)扫描引擎模块;(4)当前活动的扫描知识库模块;(5)结果存储器和报告生成工具。基于应用的检测技术在现在Web应用使用机器宽泛的大环境下,安全漏洞的数量和应用也在逐步增大,所以单独的应用安全漏洞扫描器显得格外重要。其中的应用层漏洞存在且不仅限于中间件漏洞、Web应用本身漏洞、逻辑漏洞等。而基于应用的漏洞扫描技术就是专门为此而开发出的检测技术:网络爬虫技术:与网络检测技术不同的是,基于应用的检测不能只局限于对点IP、MAC、操作系统等基本信息,而是要完成对网站的信息点进行爬取,所以一个应用检测技术首先必要的就是一个深度挖掘的爬虫技术。中间件扫描技术:相关应用程序的保护结构及元件,这是应用用于Web交互的重要部分,类似于Apache等的中间件内容往往在不做过滤的情况下就直接与后端进行交互,这就导致了部分的越权行为存在,所以中间件的扫描也是基于应用的检测技术的重点之一。通用漏洞发现:Web应用安全漏洞扫描器存在多个使用模块,实现对SQL注入、XSS漏洞的扫描功能,这些漏洞往往不存在特定性,所以应用扫描器需要带有对这些漏洞的通用载荷以完成安全性检测。基于主机的检测技术主机漏洞扫描是基于主机模式的一种扫描方法,也是基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测(渗透攻击)行为。通过网络安全漏洞扫描,系统管理员能够发现所维护的Web服务器的各种TCP/IP端口的分配、开放的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。特定目标的检测技术使用主动手段,采取非破坏性的方法对网络、系统的漏洞进行检测。通过对已知漏洞、未知安全威胁进行对传输信息的算法进行检验,对文件的加密方式进行检验。通过不间断的不断地处理目标信息,产生检验数据、对检验结果进行对比。当发现信息数据的的不对称结果,及时的反馈给平台,从而做出应对措施[6]。1.2.2常见漏洞扫描软件AWVS漏洞扫描速度较快,准确率较高,漏洞规则库较为全面。漏洞验证可查看请求响应代码,但无中文界面。报表功能完整。有多重漏洞的验证工具。Appscan漏洞扫描速度一般,准确率最高,漏洞规则库最全面。漏洞验证可查看请求相应代码,拥有较完整的漏洞修复建议。报表功能完整。全中文界面。HPWebInspect漏洞扫描速度一般,准确率较高,扫描类型较多。报表功能强大。可查看请求响应代码。无中文界面。(占用内存大)WebCruiser此工具偏向渗透利用工具,扫描功能较弱。仅有轻量级SQL注入和XSS漏洞的扫描功能。具有SQL注入漏洞利用功能。Nexpose扫描速度快,能扫描系统层和web层2类漏洞,但web漏洞发现能力不如appscan,系统扫描能力不如Nessus。Nessus主要用于系统层扫描,扫描速度快,准确率高,漏洞规则库全面,报表功能强大[7]。1.3本课题研究意义有效避免黑客攻击行为:通过对漏洞扫描,安全管理员能了解网络的安全设置和运行的应用服务,定时自我审视,及时发现安全漏洞完成漏洞修复工作。并且在项目实施过程中一般会联动防火墙和网络监视系统等被动的防御手段,为体系与系统安全同时提供主被动双重安全,将安全的权力完全掌握。明确漏洞修补目标:漏洞扫描报告明确了漏洞存在的点位和可用性(即脆弱性),安全人员不再需要花费大量的时间来分析哪些漏洞需要处理、处理的顺序和重要性,这既可以减少在缺陷分析过程中花费的时间,也可以把主要精力集中在缺陷修复上。安保意识:定期漏洞扫描能够及时地向安全人员提供近期系统存在的安全漏洞,解决了由于管理人员忙于处理其他事务而没有时间进行漏洞扫描所造成的安全管理缺失问题。1.4论文工作内容基于上述的需求以及痛点,该漏洞扫描需要对多项存在的Web应用漏洞进行模块化功能实现,其中包括且不限于SQL注入、XSS注入、XXE注入等。且为了保证扫描器存在可拓展性,对不同的漏洞实行模块化处理。漏洞扫描:使用通用的应用漏洞特征码对漏洞进行漏洞扫描工作。同时其中也存在部分的爆破口令或常见的后缀名从而完成对越权等行为的扫描工作。最后在扫描结束后生成一份HTML的扫描报告显示结果。具体本扫描器中已预置了多项应用扫描功能如:注入漏洞:bashi:检测bashi命令注入,破壳漏洞(ShellShock)blindsqli:检测SQL盲注bufferoverflow:检测缓冲区溢出检测crlf:检测crlf注入即回车换行注入headersqli:HTTP的头信息header,检测是否可能存在sql注入漏洞headerxss:检测Headers头信息中XSS漏洞htmli:检测html代码注入ldapi:检测LDAP[轻量级目录访问协议]注入lfi:检测本地文件包含漏洞oscommand:检测操作系统命令注入漏洞phpi:检测PHP代码注入漏洞sqli:检测SQL注入漏洞ssi:检测服务端包含注入漏洞xpathi:检测xpath[xml路径语言]注入漏洞xss:检测XSS跨站点脚本漏洞xxe:检测XXEXML外部实体注入漏洞xst:#检测XST跨站跟踪漏洞中间件漏洞:apache:检测Apache相关配置页面phpinfo:检测phpinfo页面robots:检测robots.txt暴力破解:adminpanel:猜解可能的管理页面backdoor:检测可能的后门程序backupdir:检测可能的备份目录commondir:检测可能的通用目录,附带敏感信息检测commonfile:检测可能的敏感文件params:检测可能的隐藏参数敏感信息检测:emails:检测页面Email信息findip:检测页面IP信息errors:检测错误响应页面中的敏感信息1.5论文组织架构第一章绪论:介绍本文的研究背景、意义及所做工作。第二章安全漏洞扫描技术:介绍漏洞和漏洞扫描技术的相关概念、安全漏洞数据库等。第三章漏洞扫描器的系统分析:系统开发前所做的准备工作,开发工具和平台,需求分析、概要设计等,漏洞扫描模块实现的具体流程,整个系统主要技术讲解。第四章漏洞扫描器的系统设计与实现:设计了应用漏洞扫描检测系统,阐述了该扫描器的总体设计思想,并详细给出了各个模块的实现方法。第五章漏洞扫描器测试:选择主机对漏洞扫描器进行功能测试,通过测试用例得出结论。后续为结论、致谢等第2章安全漏洞扫描技术2.1安全漏洞研究2.1.1漏洞定义与分类漏洞:计算机安全漏洞是指计算机系统中存在的可以被攻击者利用的软件或硬件缺陷,这些缺陷可能导致计算机系统的数据泄露、篡改、破坏或者其他未授权的行为。攻击者可以利用这些漏洞来获取系统权限、窃取敏感信息或者对系统进行破坏。漏洞分类:计算机安全漏洞可以根据不同的标准进行分类,以下是一些常见的分类方式:漏洞类型:包括代码注入、缓冲区溢出、跨站点脚本等。影响范围:包括本地漏洞和远程漏洞。漏洞等级:通常分为高、中、低三个等级,根据漏洞的危害程度来划分。漏洞来源:包括软件设计缺陷、实现缺陷、配置错误等。发现方式:包括主动扫描、被动监测、漏洞报告等。漏洞利用方式:包括远程利用、本地利用、社交工程等。2.1.2漏洞审查查找漏洞的方法有很多种,以下是一些常见的方法:漏洞扫描:使用漏洞扫描工具对系统进行扫描,以发现系统中存在的漏洞。安全审计:对系统进行安全审计,发现系统中可能存在的安全问题。安全测试:对系统进行安全测试,模拟攻击者的行为,以发现系统中存在的漏洞。漏洞报告:收集用户和安全研究人员的漏洞报告,对报告进行验证和修复。安全更新:及时更新系统和应用程序的安全补丁,以修复已知的漏洞。需要注意的是,查找漏洞是一个持续不断的过程,需要不断地进行漏洞扫描、安全审计和测试,及时更新安全补丁,以保障系统的安全性。在其他操作之前,对漏洞的发现过程是必须的,所以在漏洞审查的过程中漏洞扫描就起到举足轻重的作用。2.1.3漏洞危害漏洞的危害非常大,以下是一些常见的危害:数据泄露(系统的机密性):攻击者可以利用漏洞窃取系统中的敏感信息,包括个人身份信息、财务信息、商业机密等。系统瘫痪(系统的可用性):攻击者可以利用漏洞对系统进行拒绝服务攻击,导致系统无法正常运行。恶意软件感染(系统的完整性):攻击者可以利用漏洞将恶意软件注入到系统中,以控制系统或窃取信息。网络入侵(系统的可控性):攻击者可以利用漏洞获取系统权限,进而对系统进行操作或者攻击其他网络系统。金融损失(系统的可靠性):攻击者可以利用漏洞进行电子支付欺诈、网络钓鱼等行为,导致金融损失。2.2安全漏洞库安全漏洞库是指收集和管理各种计算机软件和硬件中已知的安全漏洞信息的数据库。安全漏洞库通常包括漏洞的描述、危害等级、修复建议、CVE编号等信息[7]。安全漏洞库可以帮助用户了解系统中存在的安全漏洞,并及时采取措施加以修复,以保障系统的安全性。一些常见的安全漏洞库包括:MITRECVE、NISTNVD、OSVDB、ExploitDatabase等。这些漏洞库都提供了漏洞信息的查询和下载服务,用户可以通过这些漏洞库获取最新的漏洞信息,并及时采取措施加以修复。2.2.1安全漏洞库具体作用帮助用户了解系统中存在的安全漏洞:安全漏洞库收集了全球范围内的漏洞信息,用户可以通过安全漏洞库了解系统中存在的安全漏洞。提供漏洞的描述和危害等级:安全漏洞库提供了漏洞的详细描述和危害等级,用户可以通过这些信息了解漏洞的影响程度,以及采取相应的措施。提供修复建议:安全漏洞库提供了针对漏洞的修复建议,用户可以通过这些建议了解如何修复漏洞。提供CVE编号:安全漏洞库提供了CVE编号,用户可以通过CVE编号查询漏洞信息。提供最新的漏洞信息:安全漏洞库不断更新最新的漏洞信息,用户可以通过安全漏洞库获取最新的漏洞信息,并及时采取措施加以修复。综上所述,安全漏洞库对于用户来说非常有用,可以帮助用户了解系统中存在的安全漏洞,并及时采取措施加以修复,以保障系统的安全性。2.2.2现有的安全漏洞库MITRECVE:CVE(CommonVulnerabilitiesandExposures)是由MITRE公司维护的一个公共漏洞编号标准。CVE标准用于标识和描述软件和硬件中的安全漏洞,并提供一个唯一的标识符,以方便用户查找和共享漏洞信息。MITRECVE数据库包含了全球范围内的漏洞信息,用户可以通过CVE编号查询漏洞信息。NISTNVD:NVD(NationalVulnerabilityDatabase)是由美国国家标准与技术研究院(NIST)维护的一个公共漏洞数据库。NVD数据库收集了全球范围内的漏洞信息,包括CVE编号、漏洞描述、危害等级、修复建议等信息。用户可以通过NVD数据库查询最新的漏洞信息。WooYun:乌云网。WooYun是一个开源的漏洞报告平台,收集了全球范围内的漏洞信息,包括漏洞描述、危害等级、修复建议等信息。WooYun还提供了漏洞报告奖励计划,鼓励用户积极报告漏洞。Seebug:安全客。Seebug是一个开源的漏洞报告平台,收集了全球范围内的漏洞信息,包括漏洞描述、危害等级、修复建议等信息。Seebug还提供了漏洞报告奖励计划,鼓励用户积极报告漏洞。2.3漏洞扫描技术2.3.1漏洞扫描器工作原理漏洞扫描器是一种自动化工具,用于检测系统或应用程序中存在的漏洞。漏洞扫描器的工作原理大致可以分为以下几个步骤:收集目标信息:漏洞扫描器首先需要收集目标系统或应用程序的相关信息,包括IP地址、端口号、操作系统、应用程序类型等。这些信息可以通过端口扫描、操作系统识别、Web应用程序识别等方式获取。分析目标信息:漏洞扫描器会对收集到的目标信息进行分析,以确定目标系统或应用程序的漏洞类型和可能存在的安全风险。执行漏洞检测:漏洞扫描器会对目标系统或应用程序进行漏洞检测,以发现可能存在的漏洞。漏洞检测的方式包括主动扫描和被动扫描两种。主动扫描是指漏洞扫描器主动向目标系统或应用程序发送请求,以探测可能存在的漏洞;被动扫描是指漏洞扫描器通过监听网络流量,发现可能存在的漏洞。生成报告:漏洞扫描器会将检测结果生成报告,报告中包括漏洞的详细描述、危害等级、修复建议等信息。漏洞扫描器还可以将漏洞信息与漏洞库进行比对,以确定漏洞是否已经被公开披露,并提供相应的修复建议。当然,对于不同的漏洞扫描器也有对应的特别流程,对具体要扫描的对象也需要具体的分析,所以扫描器固然重要但是人工的审查和测试也是必不可少的过程。具体的原理流程基本上可以依据下面的原理图(图2-1):图2-SEQ图\*ARABIC1漏洞扫描器工作原理2.3.2漏洞扫描器的发展历史漏洞扫描器的发展历史可以追溯到上世纪90年代,当时网络安全问题开始引起人们的关注。以下是漏洞扫描器的主要发展历程:1995年:第一个漏洞扫描器SATAN(SecurityAdministratorToolforAnalyzingNetworks)发布。SATAN是一个基于Unix平台的开源工具,可以检测目标系统中存在的漏洞。1998年:第一个商业漏洞扫描器ISS(InternetSecuritySystems)发布。ISS是一个基于Windows平台的商业工具,可以检测目标系统中存在的漏洞,并提供修复建议。2000年:漏洞扫描器开始支持Web应用程序检测。Web应用程序的出现使得网络攻击者可以通过Web漏洞攻击目标系统,因此Web应用程序的安全性成为了一个新的焦点。2003年:漏洞扫描器开始支持无线网络安全检测。随着无线网络的普及,无线网络安全问题也变得越来越重要。2005年:漏洞扫描器开始支持云计算安全检测。随着云计算的兴起,云计算安全问题也成为了一个新的挑战。2010年:漏洞扫描器开始支持移动应用程序安全检测。随着移动应用程序的普及,移动应用程序安全问题也成为了一个新的焦点。2015年:漏洞扫描器开始支持物联网安全检测。随着物联网的普及,物联网安全问题也成为了一个新的挑战。总的来说,漏洞扫描器在不断发展和完善,以适应不断变化的网络安全威胁。同时,漏洞扫描器也在不断创新,以应对新兴的网络安全问题。2.3.3漏洞扫描器的发展趋势智能化:漏洞扫描器将会越来越智能化,通过机器学习、人工智能等技术,提高漏洞检测的准确性和效率。自适应:漏洞扫描器将会越来越具备自适应的能力,即能够根据目标系统或应用程序的特点进行自动调整,以提高漏洞检测的效果。集成化:漏洞扫描器将会越来越集成化,即将漏洞扫描和其他安全工具(如入侵检测、日志分析等)进行集成,以提高整体安全性。云化:漏洞扫描器将会越来越云化,即将漏洞扫描服务提供到云端,用户可以通过云端服务进行漏洞扫描,以提高效率和便捷性。自动化:漏洞扫描器将会越来越自动化,即能够自动化地进行漏洞检测、报告生成、修复建议等工作,以节省人力成本和提高效率。第3章漏洞扫描器的系统分析3.1漏洞扫描器概述漏洞扫描器是一种用于识别计算机系统、网络或应用程序中潜在漏洞的工具。它可以通过模拟黑客攻击来检测系统的弱点,并生成报告以帮助管理员修补这些漏洞。漏洞扫描器可以自动化扫描过程,节省管理员的时间和精力,并帮助提高系统的安全性。有许多商业和免费的漏洞扫描器可供选择,每个都有其优缺点和适用场景。3.2可行性分析3.2.1技术可行性分析经过综合考虑与自身能力的考虑,选择使用以Python为主的方案完成该应用漏洞扫描器系统的设计,其中该漏洞扫描器以分模块的形式完成,各个模块相互独立的同时又相互联动,使得该漏洞扫描器有着高自定义的特点。在开发中该设计环境具备可行性和适用性,能够满足系统的功能性需求。通过Python完成了该应用漏洞扫描器,主要调用的库为cmd和sys、os库,所以保证了该扫描器的可移植性。3.2.2经济可行性分析该漏洞扫描器需要投入了自己的人力和物力进行开发,后续的维护和更新已实现自定义的漏洞库加入,所以虽然该系统不会投入商用的环境进行使用,但是依旧有着良好的经济可行性。3.3功能需求分析根据所需要的扫描对象设计了整改系统的框架结构。其主要包含以下的几个需求:扫描方式:对于该Web应用的漏洞扫描器,主要应用于安全工程师以及安全审计员在对站点的Web应用进行漏洞扫描时使用,其需要明确扫描的深度,包括全面扫描、单点扫描等。全面扫描可以发现更多的漏洞,但需要更长的时间和更大的计算资源;单点扫描可以对特定的漏洞完成快速扫描。用户界面:需要一个以指令为操作手段的漏洞扫描器,所以主要以cmd类似的指令使用为基础完成一个界面设计。同时要为了满足用户的使用需要又用户指导(help)指令的使用漏洞验证:需要不同的漏洞特征码方式,例如常见的注入、中间件、爆破、信息泄露等,具体的需求如下举例:XSS跨站点脚本漏洞检测:通过GET和POST的方式完成其中包括URL后直接扩展注入、POST构建注入表单完成检测。XXEXML外部实体注入漏洞:使用构建的外部实体进行漏洞存在型判断。缓冲区溢出漏洞:构建存在溢出的文件放入对应站点的缓冲区从而完成缓冲区溢出判断。SQL注入漏洞:构建绕过SQL检测的数据递交查看反馈的数据从而获得对应的SQL注入的数据库等信息。管理面板检测:通过字典及逆行管理后台的检测,通过是否有200响应实现对管理面板的检测。后门检测:通过后门常用名字典对目标进行后门检测,观测是否存在被攻击者安插过后门的情况存在。报告输出:在完成扫描过程后,需要方便安全工程师的使用,所以需要设计一个基于HTML界面的报表从而完成保证在后续的漏洞整改的过程中可以做到查找简单、有迹可循。效率需求:为了满足对大量的Web应用的统一性快速扫描,使用的通用载荷与传统基于单点的漏洞扫描最大的优点就是效率极高,这是一种基于类似于工程师手动输入载荷完成渗透测试的方法,所以可以在短时间内做到一个Web应用的漏洞扫描工作,一般只需要20分钟即可完成一个站点的全量扫描工作。3.4流程分析通过CMD或运行main文件本身即可启动扫描器,执行主文件进入命令界面,此时可以使用help指令查看存在的模块,或者直接使用seturl输入所要测试的目标URL。随后可以选择使用单一的扫描或者多元共同扫描。单一扫描需要运行exec分类名.模块名,而多元的扫描只需要运行exec分类名即可。在扫描完成后,使用reportwebscan进行输出报告。具体流程见图3-1所示:图3-1运行流程图第4章漏洞扫描器的系统设计与实现4.1总体设计4.1.1设计目标本次应用漏洞扫描器主要作为cmd运行的脚本插件,其总的设计目标有三个完成漏洞扫描器的的基本扫描功能,即扫描、检测;完成漏洞的汇总、报告工作;满足技术人员自定义的漏洞添加。总的来说,相对于其他类型的漏洞扫描器,该漏洞扫描器是以Web应用为主要的扫描目标,以模块化协同运行为主要思路设计。共同完成一个以Python为开发语言的Web应用漏洞扫描器。4.1.2开发平台本次开发使用Python作为编码语言,环境为win10和Pycharm。之所以使用Python作为编码的语言,一个是因为个人熟悉Python语言,其次Python语言制作漏洞Poc(即漏洞验证证明)也是作为安全工作人员的必经之路。本扫描器为了保证可移植性和通用性,尽量减少第三方库的使用,函数主要通过编写获取,使用的库主要为os、request、cmd等。4.1.3具体模块分布具体的模块可以分为三大总模块和七个小模块构成,具体的构成如下:用户界面总模块:用户界面模块:提供用户界面,方便用户进行操作和查看报告路径。目标选择模块:负责选择需要进行漏洞扫描的目标,通常包括载荷、域名、URL等信息。扫描功能总模块:扫描引擎模块:负责实现漏洞检测的算法和技术,通常包括服务识别、漏洞探测等功能。漏洞检测模块:负责进行漏洞检测,通常包括服务识别、漏洞探测等功能。漏洞管理模块:负责管理漏洞信息,通常包括漏洞分类、漏洞状态等信息。汇报总模块:扫描数据库模块:存储扫描结果、漏洞信息等数据。漏洞报告模块:负责生成漏洞报告,通常包括漏洞详情、漏洞数量等信息。4.1.4模块联动系统具体的模块的联动方式可用以下的功能图表达清晰:图4-1漏洞扫描器模块联动图4.2模块设计总的设计思路如上述的模块分布所示,主要以三大总模块和七个小模块组成,三大总模块以界面模块、扫描模块、报告模块为设计出发点。为了完成三个大模块,其中界面模块划分为用户界面模块、目标选择模块两个小模块实现;扫描总模块划分为扫描引擎模块、漏洞检测模块、漏洞管理模块三个小模块实现;报告总模块分为扫描扫描数据库模块和漏洞报告模块两个小模块实现。4.2.1用户界面模块设计因为是以指令形式实现对该扫描器的使用,所以使用的用户界面也会因人而异。但通用的是使用一个响应的入口,后面接入不同的模块使用。与此同时,需要完成一个help界面保证用户在使用过程中的具体使用。具体的设计思路如下:图4-2用户界面模块设计思路图4.2.2目标选择模块设计设计需要考虑以下几个方面:目标范围:确定扫描器需要扫描哪些目标,比如IP地址、域名、网段等;载荷筛选:根据需要对目标进行的扫描范围选择相对应的载荷选择;本模块主要是与用户的输入有关,必须的输入为target、exploit。其他的如header、agent等也可以通过set指令进行设置,这样就可以保证特殊手段的漏洞也可以被检测到。4.2.3扫描引擎模块设计这个模块是位于目标选择完成之后的操作,其主要是调用前方的目标执行后续的检测工作,主要的思路只需要将选择模块引用后放入检测模块进行检测工作,具体的操作思路如下:图4-3扫描引擎运行逻辑图4.2.4漏洞检测模块设计该模块的设计思路主要是完成对各种漏洞的载荷编写工作以及对漏洞应用的编写设计,对于这个模块主要设计分四大类,其中包括注入漏洞、中间件漏洞、暴力破解、敏感信息检测。为了保证检测模块成库且调用较为简单,主要思路是将对象的定义放在一个单独的库文件夹中,方便利用的脚本使用。其中的分类中是多项预定义的漏洞:注入漏洞:bashi:检测bashi命令注入,破壳漏洞(ShellShock)blindsqli:检测SQL盲注bufferoverflow:检测缓冲区溢出检测crlf:检测crlf注入即回车换行注入headersqli:HTTP的头信息header,检测是否可能存在sql注入漏洞headerxss:检测Headers头信息中XSS漏洞htmli:检测html代码注入ldapi:检测LDAP[轻量级目录访问协议]注入lfi:检测本地文件包含漏洞oscommand:检测操作系统命令注入漏洞phpi:检测PHP代码注入漏洞sqli:检测SQL注入漏洞ssi:检测服务端包含注入漏洞xpathi:检测xpath[xml路径语言]注入漏洞xss:检测XSS跨站点脚本漏洞xxe:检测XXEXML外部实体注入漏洞xst:#检测XST跨站跟踪漏洞中间件漏洞:apache:检测Apache相关配置页面phpinfo:检测phpinfo页面robots:检测robots.txt暴力破解:adminpanel:猜解可能的管理页面backdoor:检测可能的后门程序backupdir:检测可能的备份目录commondir:检测可能的通用目录,附带敏感信息检测commonfile:检测可能的敏感文件params:检测可能的隐藏参数敏感信息检测:emails:检测页面Email信息findip:检测页面IP信息errors:检测错误响应页面中的敏感信息后续的漏洞仍然可以自定义编辑后加入该扫描器中实现漏洞自定义扫描。而这些漏洞检测的主要原理如下图:图4-4漏洞检测模块运行逻辑图4.2.5漏洞管理模块设计这里使用的方法是类似于日志记录的方法,因为需要的具体存不存在漏洞只需要看到验证通过量来判断存在哪些漏洞,这样就可以以Json文件的形式存储,后续的报告模块也就可以直接完成读取。最后可以通过读取Json文件中的数据即可完成html的报表汇报工作,这样既可以省去了html存储占用大,而且解决html的可移植性较低的问题。4.2.6扫描数据库模块设计该模块的设计主要是为后续的报告输出作为基础而实现的,把URL对应存在验证的漏洞存储下来后,续方便使用管理模块进行转型后提供于报告使用或者单独存储下来方便移植或查看。这一部分是只用作存储使用。4.2.7漏洞报告模块设计本模块主要的设计是通过联动数据库、管理模块以实现漏洞报告的输出工作,具体的输出流程如下图所示:图4-5漏洞报告模块运行思路图4.3模块实现4.3.1用户界面模块直接使用python运行项目即可:具体以运行指令的形式进行交互:图4-6用户界面展示1图4-7用户界面展示图2为了完成该交互方式,主要是对输入的指令进行识别的方式,然后通过联动4.3.2的目标选择模块进行后续的代码运行,具体的代码实现如下所示:defdo_exec(self,param:str):param=param.strip()//获取cmd指令的命令参数ifnotlocalapi.is_set_argv("url"):warn("URL设置是必选项!输入helpset查看!")else:ifparam.find(".")>0:params=param.split(".")iflen(params)==2://判断二阶命令plugin,mod=param.split(".")ifplugininsettings.plugs_info.keys():ifplugin=="attacks"andmodinsettings.attacks_info.keys():localapi.startup_spec_attacks(mod)elifplugin=="audit"andmodinsettings.audit_info.keys():localapi.startup_spec_audit(mod)elifplugin=="brute"andmodinsettings.brute_info.keys():localapi.startup_spec_brute(mod)elifplugin=="disclosure"andmodinsettings.disclosure_info.keys():localapi.startup_spec_disclosure(mod)else:warn("无可用模块!")else:warn('无可用模块!')else:plugin=paramifplugininsettings.plugs_info.keys():ifplugin=="attacks":localapi.startup_full_attacks()elifplugin=="audit":localapi.startup_full_audit()elifplugin=="brute":localapi.startup_full_brute()elifplugin=="disclosure":localapi.startup_full_disclosure()else:warn("无可用模块!")else:warn('无可用模块!')4.3.2目标选择模块defhelp_set():info('set命令参数:')plus("参数:url[*]")plus("参数:headers,设置头信息")plus("参数:auth,设置认证信息")plus("参数:cookie,设置cookie信息")plus("参数:agent,设置浏览器版本信息")plus("参数:redirect,关闭重定向")plus("参数:method,默认get提交方式")plus("参数:data,post提交方式时设置data数据")plus("参数:timeout,设置响应超时时间")definfo_plugins():info('插件命令和描述:')fork,vinplugs_info.items():s="{}:{}".format(k,v)plus(s)definfo_plugins_simple():info('插件命令简写:')fork,vinplugs.items():s="{}:{}".format(k,v)plus(s)definfo_attacks():info("attacks插件命令和描述:")fork,vinattacks_info.items():s="{}:{}".format(k,v)plus(s)definfo_audit():info("audit插件命令和描述:")fork,vinaudit_info.items():s="{}:{}".format(k,v)plus(s)definfo_brute():info("brute插件命令和描述:")fork,vinbrute_info.items():s="{}:{}".format(k,v)plus(s)definfo_disclosure():info("disclosure插件命令和描述:")fork,vindisclosure_info.items():s="{}:{}".format(k,v)plus(s)defset_url(url):ARGV['url']=urlinfo("url设置成功")defset_headers(headers:str):headers=Cheaders(headers)ifheaders:warn("格式错误,例:k1:v1,k2:v2")else:ARGV['headers']=headersinfo("头信息设置成功.")defset_headers_host(host:str):ARGV['headers'].update({'Host':host})info("头信息[Host]设置成功")defset_headers_referer(referer:str):ARGV['headers'].update({'Referer':referer})info("头信息[referer]设置成功")defset_data(data:str):ARGV['data']=datainfo("data数据设置成功")defset_method(method:str):ARGV['method']=methodinfo("method方法设置成功")defset_auth(auth:str):ARGV['auth']=Cauth(auth)info("auth认证信息设置成功")defset_agent(agent:str):ARGV['agent']=agentinfo("agent浏览器版本信息设置成功!")defset_random_agent(agent:str):ARGV['agent']=ragent()info("agent浏览器版本信息设置成功!")defset_cookie(cookie:str):ARGV['cookie']=cookieinfo("cookie信息设置成功!")defset_proxy(proxy:str):ARGV['proxy']=ragent()info("代理设置成功!")defset_proxy_auth(pauth:str):ARGV['pauth']=Cauth(pauth)info("代理认证设置成功!")defset_timeout(timeout:str):ARGV['timeout']=float(timeout)info("超时时间设置成功!")defset_redirect_false(redirect:bool):ARGV['redirect']=Falseinfo("关闭重定向!")这里的目标选择模块主要是和CMD相结合,定义多种的可选择的参数项方便用户的选择使用以及自定义的更改。4.3.3扫描引擎模块扫描模块就是对每一个载荷的使用,所以对应着不同的载荷也就存在不通的引擎模块,但是具体的思路都是一样的,实现的方法均为在lib中放入载荷,再定义一个利用的脚本运行即可,这样设计也是为了后面的数据库添加特定漏洞做准备。当然如果不存在模块或者命令出错时也需要对使用者进行反馈具体的实现代码如下:defdo_exec(self,param:str):param=param.strip()ifnotlocalapi.is_set_argv("url"):warn("URL设置是必选项!输入helpset查看!")else:ifparam.find(".")>0:params=param.split(".")iflen(params)==2:plugin,mod=param.split(".")ifplugininsettings.plugs_info.keys():ifplugin=="attacks"andmodinsettings.attacks_info.keys():localapi.startup_spec_attacks(mod)elifplugin=="audit"andmodinsettings.audit_info.keys():localapi.startup_spec_audit(mod)elifplugin=="brute"andmodinsettings.brute_info.keys():localapi.startup_spec_brute(mod)elifplugin=="disclosure"andmodinsettings.disclosure_info.keys():localapi.startup_spec_disclosure(mod)else:warn("无可用模块!")else:warn('无可用模块!')else:plugin=paramifplugininsettings.plugs_info.keys():ifplugin=="attacks":localapi.startup_full_attacks()elifplugin=="audit":localapi.startup_full_audit()elifplugin=="brute":localapi.startup_full_brute()elifplugin=="disclosure":localapi.startup_full_disclosure()else:warn("无可用模块!")else:warn('无可用模块!')defdo_report(self,param):filename=param.strip()iffilename:localapi.generate_report(filename)defdo_exit(self,param):warn("退出!")sys.exit()defdefault(self,param):print("命令不存在!")4.3.4漏洞检测模块具体检测模块每一个都是单独的Python脚本文件,这样就可以做到以后的脚本更新以及数据库的更新工作,考虑到载荷的通用性的问题,也就只能完成验证集的通用性检测。具体的实例如下所示,其使用的样例的攻击载荷模块以lib库进行存储,这样就方便下面的验证(exploit)调用和直接使用。XSS的攻击模块:攻击载荷模块:defpxss():"""FuncXSS注入漏洞Returnpayload"""payload=[r"<script>alert('"+r_string(5)+"')</script>"]payload+=[r"<script>alert('"+r_string(5)+r"');</script>"]payload+=[r"\'\';!--\"<"+r_string(5)+r">=&{()}"]payload+=[r"<script>a=/"+r_string(5)+r"/"]payload+=[r"<bodyonload=alert('"+r_string(5)+r"')>"]payload+=[r"<iframesrc=javascript:alert('"+r_string(5)+r"')>"]payload+=[r"<xonxxx=alert('"+r_string(5)+r"')1='"]payload+=[r"</script><svgonload=alert("+r_string(5)+r")>"]payload+=[r"<svgonload=alert('"+r_string(5)+r"')>"]payload+=[r"alert\`"+r_string(5)+r"\`"]payload+=[r"><script>"+r_string(5)+""]payload+=[r"\"><script>alert('"+r_string(5)+"');</script>"]payload+=[r"<script>"+r_string(5)+"</script>"]returnpayload攻击验证模块:defcheck(self):info('检查XSS漏洞...')URL=NoneDATA=NonePAYLOAD=NoneisNothing=Trueforpayloadinpxss()://post方式传递ifself.data:rPayload=padd(self.url,payload,self.data)fordatainrPayload.run():more("检测载荷:{},{}".format(self.url,data))req=self.Send(url=self.url,method=self.post,data=data)ifsearch(payload,req.content):URL=req.urlDATA=dataPAYLOAD=payloadbreak//get方式传递else:urls=padd(self.url,payload,None)forurlinurls.run():more("检测载荷:{}".format(url))req=self.Send(url=url,method=self.get)ifsearch(payload,req.content):URL=urlPAYLOAD=payloadbreakifURLandPAYLOAD:ifDATA!=None:plus("疑似存在XSS漏洞:")more("URL[地址]:{}".format(URL))more("POSTDATA[数据]:{}".format(DATA))more("PAYLOAD[有效载荷]:{}".format(PAYLOAD))self.result['xss']=PAYLOADisNothing=FalseelifDATA==None:plus("疑似存在XSS漏洞:")more("URL[地址]:{}".format(URL))more("PAYLOAD[有效载荷]:{}".format(PAYLOAD))self.result['xss']=PAYLOADisNothing=FalseBreak这样通过通用的payload的结合快速结合的算法就可以完成通用的漏洞检测模块的作用,最后完成验证的工作,其余的检测功能也是类似如此。后续的特定的验证工作同样可以使用这种原理,只需要完成对应的载荷编写工作就可以以匹配算法完成新的漏洞验证过程。XXEXML外部实体注入漏洞:攻击载荷模块:defxxep():"""FuncXML外部实体注入Returnpayload"""payload=['<!DOCTYPEfoo[<!ENTITYxxe7eb97SYSTEM"file:///etc/passwd">]>']payload+=['<!DOCTYPEfoo[<!ENTITYxxe7eb97SYSTEM"file:///c:/boot.ini">]>']payload+=['<!DOCTYPEfoo[<!ENTITYxxe46471SYSTEM"file:///etc/passwd">]>']payload+=['<!DOCTYPEfoo[<!ENTITYxxe46471SYSTEM"file:///c:/boot.ini">]>']payload+=['<?xmlversion="1.0"?><change-log><text>root:/bin/bash</text></change-log>']payload+=['<?xmlversion="1.0"?><change-log><text>default=multi(0)disk(0)rdisk(0)partition(1)</text></change-log>']returnpayload攻击验证模块:defcheck(self):info("检测XXE[XML外部实体]注入漏洞...")URL=NoneDATA=NonePAYLOAD=NoneisNothing=Trueforpayloadinxxep():ifself.data:addPayload=preplace(self.url,payload,self.data)fordatainaddPayload.run():more("检测载荷:{},{}".format(self.url,data))req=self.Send(url=self.url,method=self.post,data=data)ifsearch(payload,req.content):URL=req.urlDATA=dataPAYLOAD=payloadbreakelse:urls=preplace(self.url,payload,None)forurlinurls.run():more("检测载荷:{}".format(url))req=self.Send(url=url,method=self.get)ifsearch(payload,req.content):URL=urlPAYLOAD=payloadbreakifURLandPAYLOAD:ifDATA!=None:plus("疑似存在XXE漏洞:")more("URL[地址]:{}".format(URL))more("POSTDATA[数据]:{}".format(DATA))more("PAYLOAD[有效载荷]:{}".format(PAYLOAD))self.result['xxe']=PAYLOADisNothing=FalseelifDATA==None:plus("疑似存在XXE漏洞:")more("URL[地址]:{}".format(URL))more("PAYLOAD[有效载荷]:{}".format(PAYLOAD))self.result['xxe']=PAYLOADisNothing=FalsebreakifisNothing:info_nothing()returnself.result缓冲区溢出漏洞:攻击载荷、验证模块:defcheck(self):info("检测缓冲区溢出漏洞...")URL=NoneDATA=NonePAYLOAD=Nonechar=['A',"%00","%06x","0x0"]#用于溢出的字符isNothing=Trueforpayloadinchar:fornumin[10,100,200]:ifself.data:rPayload=preplace(self.url,(payload*num),self.data)fordatainrPayload.run():more("检测载荷:{},{}".format(self.url,data))req=self.Send(url=self.url,method=self.post,data=data)error=self.serror(req.content)iferror:URL=req.urlDATA=self.dataPAYLOAD="{}*{}".format(payload,num)breakelse:urls=preplace(self.url,(payload*num),None)forurlinurls.run():more("检测载荷:{}".format(url))req=self.Send(url=url,method=self.get)error=self.serror(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学语文第八单元习作:我的心儿怦怦跳教案设计
- 高中心理教育教案2025年心理健康教育说课稿
- 四、眼睛和眼镜说课稿2025学年初中物理北师大版八年级下册-北师大版2012
- 语文必修五7 陈情表教案
- 运动是物质的根本属性教学设计高中政治沪教版上海高中二年级第一学期-沪教版上海
- 风电工程施工方案
- 动脉导管未闭结扎术前护理常规
- 2026四川泸州古蔺县中医医院招聘14人农业笔试参考题库及答案解析
- 2026年农业保险保费补贴资金审计实务
- 高中生活动策划设计
- 艾滋病随访管理课件
- 关于大学生安全知识的课件
- 燃气灶具使用维修课件
- 气瓶检验协议
- 福彩即开票营销培训课件
- 职业价值观讲解
- MichaelPage-2025印度尼西亚薪酬指南
- GB/T 33474-2025物联网参考体系结构
- 临床护理带教新思路
- GB/T 6543-2025运输包装用单瓦楞纸箱和双瓦楞纸箱
- T/CCAS 007-2019水泥产能核定标准
评论
0/150
提交评论