一种基于虚拟解析的漏洞检测方法及其装置与流程

文档序号:12786786阅读:282来源:国知局
一种基于虚拟解析的漏洞检测方法及其装置与流程

本发明涉及Web应用测试技术领域,尤其涉及一种基于虚拟解析的漏洞检测方法及其装置。



背景技术:

近年来,随着Web应用的广泛使用,Web安全问题也日益突出。其中,XSS(Cross-site scripting,跨站脚本攻击)漏洞已成为Web应用程序中最常见的漏洞之一,因此,对XSS漏洞的自动化检测也成为了一项重要的技术。

目前,一般采用XSS检测工具来检测XSS漏洞,其具体过程如下:(1)XSS检测工具捕获客户端(浏览器)所发送的http请求;(2)XSS检测工具构造带有特征值的请求;(3)XSS检测工具将带有特征值的请求发送至Web服务器,Web服务器响应该请求;(4)XSS检测工具在该请求响应的页面源代码中检测特征值,若在某处检测到特征值,则认为此处为一个XSS漏洞。

但是,上述漏洞检测方法中未对可能的XSS输出点进行定位,从而检测的准确性较低。



技术实现要素:

本发明实施例所要解决的技术问题是:提供一种基于虚拟解析的漏洞检测方法,以提高检测的准确性。

为解决上述技术问题,本发明实施例采用的技术方案如下:

提供一种基于虚拟解析的漏洞检测方法,包括:

接收客户端所发送的用户请求;

对所述用户请求插入探针以获取目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath;

根据所述目标输出点的上下文信息构造目标特征值;

针对所述目标注入参数,向Web服务器发送带有所述目标特征值的检测请求;

接收所述Web服务器对所述检测请求的第一响应结果,所述第一响应结果包括页面源代码;

根据虚拟解析器对所述页面源代码进行解析以得到第一解析页面;

根据所述目标输出点的XPath对所述第一解析页面进行特征值检测以得到XSS漏洞。

具体地,所述用户请求中包括至少一个参数,对所述用户请求插入探针以获取目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath具体包括:

对每一个所述参数构造所述探针并发送带有所述探针的第一请求至Web服务器,且所述探针具有唯一性;

接收所述Web服务器针对所述第一请求的第二响应结果,并根据所述第二响应结果获取所述目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath。

可选地,所述第二响应结果包括页面源代码,根据所述第二响应结果获取所述目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath具体包括:

检测所述页面源代码中是否存在所述探针;

若存在,则确定所述探针所在的位置为所述目标输出点,同时确定所述探针所对应的参数为所述目标注入参数,同时确定所述探针所对应的参数为所述目标注入参数,并获取所述目标输出点的上下文信息及所述目标输出点的XPath。

可选地,所述第二响应结果包括页面源代码,根据所述第二响应结果获取所述目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath具体包括:

根据所述虚拟解析器对所述页面源代码进行解析以得到第二解析界面;

检测所述第二解析界面中是否存在所述探针;

若存在,则确定所述探针所在的位置为所述目标输出点,同时确定所述探针所对应的参数为所述目标注入参数,同时确定所述探针所对应的参数为所述目标注入参数,并获取所述目标输出点的上下文信息及所述目标输出点的XPath。

具体地,该用户请求为http请求。

相应地,本发明实施例还提供了一种基于虚拟解析的漏洞检测装置,包括:

接收模块,用于接收客户端所发送的用户请求;

获取模块,用于对所述用户请求插入探针以获取目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath;

构造模块,用于根据所述目标输出点的上下文信息构造目标特征值;

发送模块,用于针对所述目标注入参数,向Web服务器发送带有所述目标特征值的检测请求;

所述接收模块还用于接收所述Web服务器对所述检测请求的第一响应结果,所述第一响应结果包括页面源代码;

解析模块,用于根据虚拟解析器对所述页面源代码进行解析以得到第一解析页面;

检测模块,用于根据所述目标输出点的XPath对所述第一解析页面进行特征值检测以得到XSS漏洞。

具体地,所述用户请求中包括至少一个参数,所述获取模块具体用于:

对每一个所述参数构造所述探针并发送带有所述探针的第一请求至Web服务器,且所述探针具有唯一性;

接收所述Web服务器针对所述第一请求的第二响应结果,并根据所述第二响应结果获取所述目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath。

可选地,所述第二响应结果包括页面源代码,所述获取模块具体用于:

检测所述页面源代码中是否存在所述探针;

若存在,则确定所述探针所在的位置为所述目标输出点,同时确定所述探针所对应的参数为所述目标注入参数,同时确定所述探针所对应的参数为所述目标注入参数,并获取所述目标输出点的上下文信息及所述目标输出点的XPath。

可选地,所述第二响应结果包括页面源代码,所述获取模块具体用于:

根据所述虚拟解析器对所述页面源代码进行解析以得到第二解析界面;

检测所述第二解析界面中是否存在所述探针;

若存在,则确定所述探针所在的位置为所述目标输出点,同时确定所述探针所对应的参数为所述目标注入参数,同时确定所述探针所对应的参数为所述目标注入参数,并获取所述目标输出点的上下文信息及所述目标输出点的XPath。

具体地,该用户请求为http请求。

与现有技术相比,本发明实施例中基于虚拟解析的漏洞检测方法及其装置,先对客户端所发送的用户请求插入探针,以获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath,再根据目标输出点的上下文信息构造目标特征值,之后,针对目标注入参数,向Web服务器发送带有所述目标特征值的处理请求,接收Web服务器对处理请求的第一响应结果,并根据虚拟解析器对页面源代码进行解析以得到第一解析页面,最后根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。即,本发明实施例提出了一种结合探针预检测技术定位输出点XPath,并在响应检测阶段通过XPath精确确认XSS漏洞的机制,从而提高了漏洞检测的准确性。

通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明的实施例。

附图说明

图1为本发明基于虚拟解析的漏洞检测方法第一实施例的流程图。

图2为本发明基于虚拟解析的漏洞检测方法第二实施例的流程图。

图3为jsp示例代码界面图。

图4为经虚拟解析的一示例界面图。

图5为经虚拟解析的另一示例界面图。

图6为经虚拟解析的再一示例界面图。

图7为发明基于虚拟解析的漏洞检测装置第一实施例的结构图。

具体实施方式

现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。

为了更好地理解本发明,先对本发明的原理做如下说明:本发明是一种基于虚拟解析的XSS检测技术,提出一种结合探针预检测技术定位输出点XPath,并在响应检测阶段通过XPath精确确认XSS漏洞的机制。具体包括:(1)探针预检测阶段;(2)精确构造特征值并发送检测请求阶段;(3)响应检测阶段。

请参考图1,是本发明第一实施例的基于虚拟解析漏洞检测方法流程图。如图所示,该方法可以包括如下步骤:

S101,接收客户端所发送的用户请求,该用户请求中包括至少一个参数。

具体地,客户端(浏览器)先将XSS检测工具(即下文中所描述的漏洞检测装置)设置为代理,以用于后续代理客户端向Web服务器发送请求。之后,客户端向XSS检测工具发送用户请求(http请求),XSS检测工具接收该http请求、保存该请求的信息。进一步地,XSS检测工具将http请求发送至Web服务器。

S102,对用户请求插入探针以获取目标注入参数、目标输出点、所述目标输出点的上下文信息及所述目标输出点的XPath。

具体地,用户请求中包括至少一个参数,XSS检测工具对每一个参数插入一探针,并结合探测技术获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath。例如,目标输出点的XPath为html/body/div[@id=’containerDiv’]/a。进一步地,该部分的具体实施过程将在下一实施例中进行详述,故在此不再赘述。

S103,根据目标输出点的上下文信息构造目标特征值。

具体地,XSS检测工具根据目标输出点的上下文信息构造目标特征值,如。“''><div id='999982118890' name='xssTester1001001'>XSSTester</div><a>”

S104,针对目标注入参数,向Web服务器发送带有目标特征值的检测请求。

具体地,针对步骤S102中所得到的目标注入参数,XSS检测工具向Web服务器发送带有目标特征值的检测请求。

S105,接收Web服务器对检测请求的第一响应结果,该第一响应结果包括页面源代码。

具体地,Web服务器接收检测请求,并对其进行响应,进一步地,将响应结果返回至XSS检测工具。

S106,根据虚拟解析器对页面源代码进行解析以得到第一解析页面。

具体地,XSS检测工具采用虚拟解析器(即类浏览器的解析技术)对Web服务器所返回的响应结果进行虚拟解析,从而可以得到第一解析界面。其中,第一解析界面可参考图2。

S107,根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。

具体地,XSS检测工具根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。

本发明实施例中基于虚拟解析的漏洞检测方法,先对客户端所发送的用户请求插入探针,以获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath,再根据目标输出点的上下文信息构造目标特征值,之后,针对目标注入参数,向Web服务器发送带有所述目标特征值的处理请求,接收Web服务器对处理请求的第一响应结果,并根据虚拟解析器对页面源代码进行解析以得到第一解析页面,最后根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。即,本发明实施例提出了一种结合探针预检测技术定位输出点XPath,并在响应检测阶段通过XPath精确确认XSS漏洞的机制,从而提高了漏洞检测的准确性。

请参考图2,是本发明第二实施例的基于虚拟解析漏洞检测方法流程图。如图所示,该方法可以包括如下步骤:

S201,接收客户端所发送的用户请求,该用户请求中包括至少一个参数。

具体地,客户端(浏览器)先将XSS检测工具设置为代理,以用于后续代理客户端向Web服务器发送请求。之后,客户端向XSS检测工具发送用户请求(http请求),XSS检测工具接收该http请求、保存该请求的信息。进一步地,XSS检测工具将http请求发送至Web服务器。

S202,对每一个参数构造检测探针并发送带有检测探针的第一请求至Web服务器,且检测探针具有唯一性。

需要说明的是,检测探针的本质也是一种检测特征值,它的构造符合以下几条规则:(1)全局唯一性;(2)具有一定规则,以便于发现存储型的XSS问题;(3)尽量避免web应用的参数输入校验,减少与检测的失败率。例如,可以采用数字字符作为探针,如“99993679123”,其中“9999”是探针前缀,表示这是个探针,“3679123”是随机数,避免探针值之间产生冲突。

具体地,XSS检测工具对用户请求中的每一个参数都构造一个唯一的探针,并发送带有探针的第一请求至Web服务器。例如,用户请求中有5个参数,则分别为其构造的检测探针可表示为:探针1、探针2、探针3、探针4及探针5,且探针的表现形式如前所述。

S203,接收Web服务器针对第一请求的第二响应结果,并根据第二响应结果获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath。

具体地,在本实施例中,响应结果包括页面源代码。Web服务器接收到带有探针的第一请求之后,将会对其做出响应,并将响应结果返回至XSS检测工具。进一步地,XSS检测工具会先根据虚拟解析器对页面源代码进行解析以得到解析界面,再对解析界面进行分析。如果在页面源代码中检测到探针,则标记此处为可能的XSS输出点(即确定探针所在的位置为目标输出点),同时标记该注入的参数为可能注入的参数(即确定探针所对应的参数为目标注入参数),并获取目标输出点的上下文信息及目标输出点的XPath。

其中,XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。XPath虽然是被设计用来搜寻XML文档的,不过它也能很好的在HTML文档中工作,并且大部分浏览器也支持通过XPath来查询节点。

需要说明的是,现有的XSS漏洞检测方法是对页面源代码进行特征值检测,其不能检测到web页面中嵌入的JavaScript、CSS动态生成的元素的XSS漏洞。而基于类浏览器虚拟解析技术的XSS漏洞检测方法解决了这一问题。但是,基于类浏览器虚拟解析技术的XSS漏洞检测方法仅仅通过对虚拟解析后的响应结果进行文本搜索的方式来查找和确认XSS漏洞。如果输出点做了XSS输出编码保护,经过类浏览器虚拟解析后,得到的将是未做编码前的原文,此时通过对响应结果进行文本搜索的方式来进行特征检测,将会产生大量的XSS误报。因此,本实施例中先结合探针预检测技术定位出输出点的XPath,为后续响应检测阶段通过XPath精确确认XSS漏洞提供基础。

还需要说明的是,虚拟解析技术可以模拟浏览器运行,相当于无界面的浏览器,可以对http请求响应的源代码做JavaScript、html和css的解析。由于其运行不需要界面,运行速度非常迅速。目前业界已经有较为成熟的开源软件库,大多运用在Web应用的自动化测试领域。

进一步地,以下以一个简单的示例说明虚拟解析技术的作用。请参考图3,其是一段简单的jsp示例代码。假设参数传入url的探针值为’www.demo.com’,经过第一步的探针预检测过程,页面响应经过虚拟解析后,可以得到如图4所示下的html页面。从该图中可以得到目标输出点的XPath为html/body/div[@id=’containerDiv’]/a。此外,经过探针预检测后还可以得到输出点的上下文信息。

可选地,在发明实施例的其它可选方式中,步骤S203具体包括对页面源代码进行分析。如果在页面源代码中检测到检测探针,则标记此处为可能的XSS输出点(即确定检测探针所在的位置为目标输出点),同时标记该注入的参数为可能注入的参数(即确定检测探针所对应的参数为目标注入参数),并获取目标输出点的上下文信息及目标输出点的XPath。

S204,根据目标输出点的上下文信息构造目标特征值。

具体地,XSS检测工具根据目标输出点的上下文信息构造目标特征值,如“''><div id='999982118890' name='xssTester1001001'>XSSTester</div><a>”

S205,针对目标注入参数,向Web服务器发送带有目标特征值的检测请求。

具体地,针对步骤S102中所得到的目标注入参数,XSS检测工具向Web服务器发送带有目标特征值的检测请求。

S206,接收Web服务器对检测请求的第一响应结果,该第一响应结果包括页面源代码。

具体地,Web服务器接收检测请求,并对其进行响应,进一步地,将响应结果返回至XSS检测工具。

S207,根据虚拟解析器对页面源代码进行解析以得到第一解析页面。

具体地,XSS检测工具采用类浏览器的解析技术对Web服务器所返回的响应结果进行虚拟解析,从而可以得到第一解析界面。其中,第一解析界面可参考图4。

S208,根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。

具体地,XSS检测工具根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。本步骤即发明原理部分所提及的响应检测阶段。

请参考图5及图6,分别为未做XSS编码保护的、经虚拟解析的界面以及已做XSS编码保护的、经虚拟解析的界面。如果输出点没有做XSS输出编码保护,则特征值将成功注入,如图5所示。如果输出点做了输出编码保护,则响应经过虚拟解析后得到页面的如图6所示,其中第9行中被标注的部分为一个完整的字符串。通过比较图5和图6可以发现,如果仅仅对虚拟解析后的响应做特征值的文本搜索,将不能区分该输出点是否有做XSS输出编码。

虽然在虚拟解析后的页面通过文本搜索特征值的方式不能确认输出点是否做了输出编码,但html结构中注入的特征值在做了输出编码和未做输出编码的情况下将是不同的节点。如果输出点做了输出编码,特征值将出现在文本节点;如果输出点未做输出编码,特征值将出现在标签节点。

本发明实施例将利用这一特性,在响应检测阶段,使用先前探针定位到的XPath,即html/body/div[@id=’containerDiv’]/a,分别得到<a>标签的outerHTML和outerText。如果在outerHTML中检测到了注入的div标签,则说明注入的特征值已经成功注入并生成了div标签。如果在outerHTML中没检测到注入的div标签,而在outerText中检测到了该段特征文本,则说明特征值没有注入成功,即没有发现XSS漏洞。

本发明实施例中基于虚拟解析的漏洞检测方法,先对客户端所发送的用户请求插入探针,以获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath,再根据目标输出点的上下文信息构造目标特征值,之后,针对目标注入参数,向Web服务器发送带有所述目标特征值的处理请求,接收Web服务器对处理请求的第一响应结果,并根据虚拟解析器对页面源代码进行解析以得到第一解析页面,最后根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。即,本发明实施例提出了一种结合探针预检测技术定位输出点XPath,并在响应检测阶段通过XPath精确确认XSS漏洞的机制,从而提高了漏洞检测的准确性。

请参考图7,是本发明第一实施例的基于虚拟解析漏洞检测装置的结构图。如图所示,该漏洞检测装置可以包括:

接收模块10,用于接收客户端所发送的用户请求;

获取模块11,用于对用户请求插入探针以获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath;

构造模块12,用于根据目标输出点的上下文信息构造目标特征值;

发送模块13,用于针对目标注入参数,向Web服务器发送带有目标特征值的检测请求;

接收模块10还用于接收Web服务器对检测请求的第一响应结果,第一响应结果包括页面源代码;

解析模块14,用于根据虚拟解析器对页面源代码进行解析以得到第一解析页面;

检测模块15,用于根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。

具体地,用户请求中包括至少一个参数,获取模块11具体用于:

对每一个参数构造所述探针并发送带有探针的第一请求至Web服务器,且探针具有唯一性;

接收Web服务器针对所述第一请求的第二响应结果,并根据第二响应结果获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath。

可选地,第二响应结果包括页面源代码,获取模块11具体用于:

检测页面源代码中是否存在探针;

若存在,则确定探针所在的位置为目标输出点,同时确定探针所对应的参数为目标注入参数,同时确定探针所对应的参数为目标注入参数,并获取目标输出点的上下文信息及目标输出点的XPath。

可选地,第二响应结果包括页面源代码,获取模块11具体用于:

根据虚拟解析器对页面源代码进行解析以得到第二解析界面;

检测第二解析界面中是否存在探针;

若存在,则确定探针所在的位置为目标输出点,同时确定探针所对应的参数为目标注入参数,同时确定探针所对应的参数为目标注入参数,并获取目标输出点的上下文信息及目标输出点的XPath。

本发明实施例中基于虚拟解析的漏洞检测装置,先通过接收模块10接收客户端所发送的用户请求,通过获取模块11插入探针以获取目标注入参数、目标输出点、目标输出点的上下文信息及目标输出点的XPath,再通过构造模块12根据目标输出点的上下文信息构造目标特征值,之后,针对目标注入参数,通过发送模块13向Web服务器发送带有目标特征值的处理请求,接着,通过接收模块10接收Web服务器对处理请求的第一响应结果,并通过解析模块14根据虚拟解析器对页面源代码进行解析以得到第一解析页面,最后通过检测模块15根据目标输出点的XPath对第一解析页面进行特征值检测以得到XSS漏洞。即,本发明实施例提出了一种结合探针预检测技术定位输出点XPath,并在响应检测阶段通过XPath精确确认XSS漏洞的机制,从而提高了漏洞检测的准确性。

需要说明的是,本发明实施例装置的具体工作流程已在前述方法流程部分做了像是,故在此不再赘述。

以上结合最佳实施例对本发明进行了描述,但本发明并不局限于以上揭示的实施例,而应当涵盖各种根据本发明的本质进行的修改、等效组合。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1