一种漏洞扫描方法、装置和电子设备
技术领域
本发明涉及安全检测领域,具体涉及一种漏洞扫描方法、装置和电子设备。
背景技术
Web应用中如果没有对用户的输入输出做严格控制,会产生XSS(Cross SiteScripting,跨站脚本攻击)漏洞。该漏洞可能导致资金被盗、用户隐私信息泄露、系统瘫痪等问题。而且XSS漏洞的利用方式也非常简单,普通的攻击者通过XSS漏洞发起攻击可以获取用户(甚至是管理员)的访问权限进行敏感操作。
面对XSS漏洞的泛滥成灾,安全研究者提出了许多XSS漏洞的扫描方式。
第一代XSS漏洞扫描工具就是利用在工具内部集成了大量XSS Payload,在扫描时逐个进行尝试,自动将参数替换为Payload,如果服务端的响应中包含相同的字符串就认为发现了XSS漏洞。
第一代XSS漏洞扫描工具填补了历史的空白,可以发现大量初级XSS漏洞,但是随着XSS攻击的发展,衍生出了新的XSS攻击手段,此类工具也完成了它的历史使命,它解决不了的问题包括:原始Payload无法灵活变形,无法应对需要DOM(Document Object Model,文档对象模型)渲染才能触发的XSS漏洞;输出点的部位不一定可执行,会造成误报;服务端有过滤逻辑时返回的字符串与原始Payload有差异,可能导致无法匹配响应中被过滤后的Payload;如果请求头Content-Type不是Text/Html,即使Payload能够输出也无法执行;服务端有防护时,许多Payload会导致请求直接被拦截等等。
第二代XSS漏洞扫描,当大量初级XSS漏洞被解决之后,攻击者对于XSS漏洞的利用方式也逐渐成熟,安全建设对于XSS漏洞的目标变成了“全面解决XSS攻击”。这个时期出现了许多思路新颖的XSS漏洞扫描工具。这些工具能覆盖许多第一代XSS漏洞扫描工具无法发现的问题。在当初的年代堪称神器,但是依然存在着或多或少的问题。因此始终无法推广到整个行业,成为可量产的XSS扫描基础算法。
第二代扫描中表现最出色的方式是调用真实浏览器来辅助判断,劫持并重写浏览器的基础函数,累积更加庞大的Payload规则库,覆盖更多的输入输出场景,使浏览器告诉扫描器漏洞是否可实际被利用。这种扫描思路的特点是:误报率得到降低;可以发现部分DOM型XSS漏洞;会发送大量HTTP请求;每次请求都需要调用浏览器进行渲染,扫描速度很慢;扫描效果与Payload的覆盖量息息相关。
无论是第一代还是第二代XSS漏洞扫描,都缺少了对于上下文的理解以及对于场景的分析,无法摆脱其模糊的本质,优化的方向也停留在“如何使猜测的结果更靠近真实结果”,而不是“如何正向推理得出正确答案”,因此依然有很多场景是无法解决的,问题在于:Web业务复杂,输出点的类型非常多,payload不可能覆盖所有的情况;依然无法解决WAF(Web应用防火墙)会拦截敏感payload的问题;误报漏洞的问题依然严重。
发明内容
本发明实施例的目的在于提供一种漏洞扫描方法及装置,用以解决现有技术中漏洞检测方法不能基于上下文的理解以及对于场景的分析得到是否存在漏洞的技术问题。
为实现上述目的,本发明实施例提供了一种漏洞扫描方法,包括:
向扫描目标发送带有识别标识的请求;
分析所述扫描目标的响应数据,并判断所述识别标识是否会出现;
如果可以出现,确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞;
验证漏洞是否存在。
优选地,所述向扫描目标发送带有识别标识的请求之前包括:
获取所述扫描目标的信息,根据所述扫描目标的信息确定发送所述识别标识的方式。
优选地,还包括,
识别向所述扫描目标发送信息的编码方式;
调用向所述扫描目标发送信息的编码方式相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
优选地,所述确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞具体包括:
根据所述扫描目标的响应数据,分析HTML的DOM结构,根据所述HTML相对应的DOM解析器解析所述识别标识在所述DOM结构中的输出位置;
根据所述输出位置调用相应的漏洞探测策略进行试探;
根据试探结果,确定所述输出位置是否存在漏洞。
优选地,所述确定所述输出位置是否存在漏洞具体包括:
根据预设的漏洞探测策略确定所述识别标识的输出位置是否可以插入攻击载荷,如果可以,则存在漏洞。
优选地,所述根据预设的漏洞探测策略确定所述识别标识的输出位置是否可以插入攻击载荷具体包括:
解析所述识别标识的输出位置,根据所述识别标识的输出位置的属性匹配相应的漏洞探测策略,并发送探针确认所述识别标识的输出位置是否可以插入攻击载荷。
优选地,所述验证漏洞是否存在具体包括:
根据所述识别标识的输出位置对应的探测漏洞策略确定探针类型;
构造与所述探针类型相对应的攻击载荷;
向所述扫描目标发送所述攻击载荷进行验证;
如果验证结果与所述漏洞探测策略得到的结论一样,则漏洞存在。
另外一方面,本发明实施例还提供了一种漏洞扫描装置,包括:
发送模块,用于向扫描目标发送带有识别标识的请求;
分析判断模块,用于分析所述扫描目标的响应数据,并判断所述识别标识是否会出现;
确定模块,用于如果可以出现,确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞;
验证模块,用于验证漏洞是否存在。
优选地,还包括:
获取模块,用于获取所述扫描目标的信息,根据所述扫描目标的信息确定发送所述识别标识的方式。
优选地,还包括:
自动识别模块,用于识别向所述扫描目标发送信息的编码方式;并调用向所述扫描目标发送信息的编码方式相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
另外一方面,本发明实施例还提供了一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项中所述漏洞扫描方法。
本发明实施例具有如下优点:
本发明实施例提出的一种漏洞扫描方法、装置和电子设备,本发明公开的技术方案集成了基于智能化场景分析算法,可以精确定位参数的输出,覆盖不同场景的多种XSS漏洞,从而实现对XSS漏洞进行快速、深度、精准地探测。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开一种漏洞扫描方法流程示意图;
图2为本发明实施例公开一种漏洞扫装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围
如图1所示,图1为本发明实施例公开一种漏洞扫描方法流程示意图,该方法包括如下步骤:
步骤S01,向扫描目标发送带有识别标识的请求。
具体的,所述扫描目标可以为Web应用服务系统,在向扫描目标发送之前,需要先建立扫描任务,扫描任务建立好后,开始扫描即向扫描目标发送带有识别标识的请求,所述识别标识可以为设置了特定字符串值的参数。
在步骤S01之前包括:
获取所述扫描目标的信息,根据所述扫描目前的信息确定发送所述识别标识的方式。
具体的,首先需要获取扫描目标的信息,获取扫描目标的信息的方式可以通过爬虫的方式获取,分析信息并根据扫描目标的特性,确定具体的发送识别标识的编码方式,具体的请求信息发送的方法包括GET和POST。
在步骤S01中,还包括,
识别所述扫描目标的发送信息的编码方式;
调用向所述扫描目标发送信息的编码方式相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
具体的,本发明内置的编码探测算法与自动编码算法可以解决自动化识别向扫描目标(即Web服务器)发送请求时参数的编码方式、定位Payload中的敏感字符并对Payload关键部分进行编码,可覆盖的编码类型包括但不限于:HTML Entity,HTML Code,HTML HexCode,URL Encode,JavaScript string literal,GBK,UTF-7,Base64。
由于扫描目标的多样化,所以向扫描目标发送信息的编码方式也不同,所以需要自动识别向所述扫描目标发送信息的编码方式,并根据向所述扫描目标发送信息的编码方式调用相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
步骤S02,分析所述扫描目标的响应数据,并判断所述识别标识是否会出现。
具体的,所述扫描目标接收到带有特定字符串的参数的请求后,并返回响应数据,根据上述响应数据判断上述确定参数值即特定字符串是否会经过浏览器渲染后在页面中出现,如果分析结果说明是不会在页面中出现,则可判断参数不会导致漏洞产生,如果分析结果是会出现在浏览器渲染后的页面中,则可能会产生漏洞。
步骤S03,如果可以出现,确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞。
步骤S03还包括,根据所述扫描目标的响应数据,分析HTML的DOM结构,根据所述HTML相对应的DOM解析器解析所述识别标识在所述DOM结构中的输出位置,根据所述输出位置调用相应的漏洞探测策略进行试探,根据试探结果,确定所述输出位置是否存在漏洞。
步骤S03还包括,上述确定所述输出位置是否存在漏洞具体包括:
根据预设的漏洞探测策略确定所述识别标识的输出位置是否能插入攻击载荷,如果可以插入攻击载荷,则存在漏洞。
步骤S03还包括,上述根据预设的漏洞探测策略确定所述识别标识的输出位置是否能够插入攻击载荷具体包括:
解析所述识别标识的输出位置,根据所述识别标识的输出位置的属性匹配相应的漏洞探测策略,并发送探针确认所述识别标识的输出位置是否可以插入攻击载荷。
具体的,如果根据步骤S02确定所述识别标识可以在扫描目标中出现,则需要探测上述参数的输出位置,参数的输出位置一般包括但不限于:输出在标签内部,输出在注释中,输出在标签的属性内部,输出在标签的属性外部;输出在style标签内部;输出在script标签内部。通过兼容性能优越的DOM(Document Object Model,文档对象模型)解析器可以分析并确定上述参数的输出位置。
针对探测出的参数不同输出点调用如下相应策略,确认是否能够插入攻击载荷,确认是否存在漏洞。
首先分析参数的属性,并使用不同的漏洞探测策略。漏洞探测策略包括但不限于:
输出在Html标签内部判断是否能够输出“<”、“>”,使用探测漏洞策略判断“<”、“>”的属性是否可以闭合,并判断页面是否新增加了新的DOM结构,如果新增了DOM结构,说明参数的属性可以被闭合,则说明有漏洞。
输出在Html、JavaScript、CSS注释中,尝试闭合注释属性并插入探针,如果可以插入,并改变了属性,则说明有漏洞。
输出在Html属性键名位置,判断是否能够插入危险属性,如onmouseover键,如果可以,则说明有漏洞。
输出在Html属性键值的位置,判断是否是危险属性,判断健名是个可以改成其它,如果可以,则说明有漏洞。
输出在JavaScript标签内部,智能分析JavaScript代码树,根据输出位置确定插入的攻击载荷,判断是否有漏洞。
输出在style标签中,智能分析CSS代码树,根据输出位置确定插入探针,判断是否有漏洞。
步骤S04,验证漏洞是否存在。
具体的,根据所述识别标识的输出位置对应的探测漏洞策略确定探针类型;构造与所述探针类型相对应的攻击载荷;向所述扫描目标发送所述攻击载荷进行验证;如果验证结果与所述漏洞探测策略得到的结论一样,则漏洞存在。
具体的,进行验证的攻击载荷是根据已经存储在存储器的架构构造与具体的场景对应的攻击载荷,具体的场景是识别标识对应的输出位置,向扫描目标发送攻击载荷,分析参数的属性是否能被利用,确认攻击载荷是否能成功插入并能达到预期结果,如果是,漏洞确实存在。
本发明公开的漏洞扫描过程智能化,基本不对正常业务产生影响。在理解业务的基础上进行深度分析,定位漏洞,并自动生成Payload,本发明公开的技术方案可以精确定位参数的输出,覆盖不同场景的多种XSS漏洞,从而实现对XSS漏洞进行快速、深度、精准地探测。
以下以具体的实施例来详细说明本发明:
假设目标URL为http://example.com/generic?attr=image
目标返回的Html源码为:
<h1>Example Domain</h1>
<img src='https://www.xxxx.com.png'alt='image'autofocus>
<p><a href='http://example.com'>More information...</a></p>
XSS探测示例
1.发现目标有1个参数attr,尝试对attr进行漏洞探测。
首先需要确认参数值是否存在于页面中,首先构造随机字符串并替换attr的参数值为该随机字符串(afc39adff),构造后的URL如:http://example.com/generic?attr=afc39adff,将请求发出后在浏览器渲染后的页面上发现afc39adff存在于Html响应中,则进行下一步,否则结束探测。
2.通过解析上一步1的Html响应,分析HTML的DOM结构,得知该参数的输出点在image元素的alt的属性中。
3.找到该类元素属性对应的输出策略,并调用该策略进行探测,探测过程如下:
1)尝试使用“"”来闭合输出点的属性,使用的探针为“"mdjvhjvh=”,获得响应后重新分析页面,发现探针的值完整的存在于alt属性中,探针没有生效,属性没有被闭合。
2)尝试使用“'”来闭合输出点的属性,使用的探针为“'mdjvhjvh=”,获得响应后重新分析页面发现现在的DOM结构变为<h1>Example Domain</h1>
<img src='https://www.xxxx.com.png'alt=”mdjvhjvh='autofocus>
<p><a href='http://example.com'>More information...</a></p>
发送的探针成功的闭合了Html属性,在DOM中的表现为随机字符串mdjvhjvh成为了新的属性,意味着可以插入新的属性来执行代码。
4.基本确定存在XSS漏洞,自动生成并发送攻击载荷进行验证。
检查能否成功插入可用来攻击的攻击载荷,此时会使用几个常用的Payload进行探测,比如发送攻击载荷为“'onmouseover=”,分析返回的页面,发现“onmouseover”属性可以被成功的插入。“onmouseover”属性是XSS检测中常用的一个属性,该属性的值可以用来执行JavaScript代码,引擎使用该属性做探针仅仅检查能否在该场景下正常存在,而不会使用任何具有恶意代码的Payload。经过分析页面,发现前后端没有对该属性做防范,该探针使得image元素多了一个onmouseover属性。至此,可以断定此处存在一个使用“'”闭合的,可以使用onmouseover来执行JavaScript代码的XSS漏洞。
最后根据探测结果,返回一个在该场景下有效的可供用户验证该XSS漏洞的攻击载载荷,如“'onmouseover=prompt(1)//”。
另外一方面,如图2所述,图2为一种漏洞扫描装置的结构示意图,本发明实施例提供了一种漏洞扫描装置,包括:
发送模块21,用于向扫描目标发送带有识别标识的请求;
具体的,所述扫描目标可以为Web应用服务系统,在向扫描目标发送之前,需要先建立扫描任务,扫描任务建立好后,开始扫描即向扫描目标发送带有识别标识的请求,所述识别标识可以为设置了特定字符串值的参数。
分析判断模块22,用于分析所述扫描目标的响应数据,并判断所述识别标识是否会出现。
具体的,所述扫描目标接收到带有特定字符串的参数的请求后,并返回响应数据,根据上述响应数据判断上述确定参数值即特定字符串是否会经过浏览器渲染后在页面中出现,如果分析结果说明是不会在页面中出现,则可判断参数不会导致漏洞产生,如果分析结果是会出现在浏览器渲染后的页面中,则可能会产生漏洞。
确定模块23,用于如果可以出现,确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞。
所述确定模块23,还用于根据所述扫描目标的响应数据,分析HTML的DOM结构,根据所述HTML相对应的DOM解析器解析所述识别标识在所述DOM结构中的输出位置;
根据所述输出位置调用相应的漏洞探测策略进行试探;
根据试探结果,确定所述输出位置是否存在漏洞。
所述确定模块23,还用于确定所述输出位置是否存在漏洞具体包括:
根据预设的漏洞探测策略确定所述识别标识的输出位置是否能够插入攻击载荷,如果可以,则存在漏洞。
所述确定模块23,还用于上述根据预设的漏洞探测策略确定所述识别标识的输出位置是否能够插入攻击载荷,具体包括:
解析所述识别标识的输出位置,根据输出位置的属性匹配相应的漏洞探测策略,并发送探针确认所述识别标识的输出位置是否能够插入攻击载荷。
具体的,确定所述识别标识可以在扫描目标中出现,则需要探测上述参数的输出位置,参数的输出位置一般包括单但不限于:输出在标签内部,输出在注释中,输出在标签的属性内部,输出在标签的属性外部;输出在style标签内部;输出在script标签内部。确定上述参数的输出位置是根据兼容性能优越的DOM(Document Object Model,文档对象模型)解析器,通过它可分析参数的输出位置。
针对探测出的参数不同输出点调用如下相应策略,确认是否能够插入攻击载荷,确认是否存在漏洞。
分析参数的属性,使用不同的探测和判断方法。
输出在Html标签内部判断是否能够输出“<”、“>”,使用探测判断“<”、“>”的属性是否可以闭合,并判断页面是否新增加了新的DOM结构,如果新增了DOM结构,说明参数的属性可以被闭合,则说明有漏洞。
输出在Html、JavaScript、CSS注释中,尝试闭合注释属性并插入攻击载荷,如果可以插入,并改变了属性,则说明有漏洞。
输出在Html属性键名位置,判断是否能够插入危险属性,如onmouseover键,如果可以,则说明有漏洞。
输出在Html属性键值的位置,判断是否是危险属性,判断健名是个可以改成其它,如果可以,则说明有漏洞。
输出在JavaScript标签内部,智能分析JavaScript代码树,根据输出点确定插入的攻击载荷,判断是否有漏洞。
输出在style标签中,智能分析CSS代码树,根据输出点确定插入的攻击载荷,判断是否有漏洞。
验证模块24,用于验证漏洞是否存在。
根据所述识别标识的输出位置对应的漏洞探测策略确定探针类型,构造与所述探针类型相对应的攻击载荷;
向所述扫描目标发送所述攻击载荷进行验证;
如果验证结果与所述漏洞探测策略得到的结论一样,则漏洞存在。
具体的,根据所述漏洞探测策略确定所述识别标识的输出位置属性的利用方式,构造相应的攻击载荷;向所述扫描目标发送所述攻击载荷进行验证;如果验证结果与所述漏洞探测策略得到的结论一样,则漏洞存在。
进一步,本发明公开的漏洞扫描装置还包括,获取模块,用于获取所述扫描目标的信息,根据所述扫描目前的信息确定发送所述识别标识的方式。
本发明公开的漏洞扫描装置还包括:
自动识别模块,用于识别向所述扫描目标发送信息的编码方式;并调用向所述扫描目标发送信息的编码方式相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
本发明公开的漏洞扫描过程智能化,基本不对正常业务产生影响。在理解业务的基础上进行深度分析,定位漏洞,并自动生成Payload,本发明公开的技术方案可以精确定位参数的输出,覆盖不同场景的多种XSS漏洞,从而实现对XSS漏洞进行快速、深度、精准地探测。
本发明还公开了一种电子设备,所述电子设备包括处理器和存储器,处理器的数量可以是一个或多个,以一个处理器为例,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
向扫描目标发送带有识别标识的请求;
分析所述扫描目标的响应数据,并判断所述识别标识是否会出现;
如果可以出现,确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞;
验证漏洞是否存在。
进一步的,在本发明的一些实施例中,处理器还用于执行:所述向扫描目标发送带有识别标识的请求之前包括:
获取所述扫描目标的信息,根据所述扫描目标的信息确定发送所述识别标识的方式。
进一步的,在本发明的一些实施例中,处理器还用于执行:
识别向所述扫描目标发送信息的编码方式;
调用向所述扫描目标发送信息的编码方式相对应的编码方式对向扫描目标发送带有识别标识的请求进行编码。
进一步的,在本发明的一些实施例中,处理器还用于执行:所述确定所述识别标识的输出位置,调用漏洞试探策略确定所述输出位置是否存在漏洞具体包括:
根据所述扫描目标的响应数据,分析HTML的DOM结构,根据所述HTML相对应的DOM解析器解析所述识别标识在所述DOM结构中的输出位置;
根据所述输出位置调用相应的漏洞探测策略进行试探;
根据试探结果,确定所述输出位置是否存在漏洞。
进一步的,在本发明的一些实施例中,处理器还用于执行:所述确定所述输出位置是否存在漏洞具体包括:
根据预设的漏洞探测策略确定所述识别标识的输出位置是否能够插入攻击载荷,如果可以,则存在漏洞。
进一步的,在本发明的一些实施例中,处理器还用于执行:所述根据预设的漏洞探测策略确定所述识别标识的输出位置是否能够插入攻击载荷,具体包括:
解析所述识别标识的输出位置,根据输出位置的属性匹配相应的漏洞探测策略,并发送探针确认所述识别标识的输出位置是否能够插入攻击载荷。
进一步的,在本发明的一些实施例中,处理器还用于执行:所述验证漏洞是否存在具体包括:
根据所述识别标识的输出位置对应的探测漏洞策略确定探针类型;
构造与所述探针类型相对应的攻击载荷;
向所述扫描目标发送所述攻击载荷进行验证;
如果验证结果与所述漏洞探测策略得到的结论一样,则漏洞存在。
本发明公开的漏洞扫描过程智能化,基本不对正常业务产生影响。在理解业务的基础上进行深度分析,定位漏洞,并自动生成Payload,本发明公开的技术方案可以精确定位参数的输出,覆盖不同场景的多种XSS漏洞,从而实现对XSS漏洞进行快速、深度、精准地探测。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。