一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种跨站脚本漏洞的检测方法和系统

2022-06-05 04:52:23 来源:中国专利 TAG:


1.本发明涉及漏洞检测技术领域,具体涉及一种跨站脚本漏洞的检测方法和系统。


背景技术:

2.随着互联网的飞速发展,各种web网站应运而出,人们利用网站上的web应用进行一系列活动,这些网站在给人们提供便利的同时,也具有一定的安全隐患,其中跨站脚本攻击(xss攻击)是危害性最大的漏洞之一。由于xxs漏洞注入简单、且传播迅速,成为web网站中危害性和影响力最大的漏洞之一,尤其是随着ajax技术的发展,使得xss攻击更加泛滥,如今的网络安全问题不仅仅是个人的问题,它关系到社会以及整个国家的稳定,因此研究xss漏洞检测技术具有重大的现实意义
3.xss漏洞检测技术主要分为静态检测与动态检测,静态分析方法虽然相对简单,但静态分析方法对白名单以及黑名单具有较强的依赖性,此外静态分析方法是直接分析源代码,实际上页面的源码并不容易获取,且误报率太高,静态检测最致命的缺陷在于它无法对漏洞的利用方法进行分析,局限性大。相比之下,动态检测的扩展性以及准确性就好得多,动态测试首先通过网络爬虫技术获取网站url,然后采用页面分析技术获取注入点,通过构造攻击向量对服务器进行模拟攻击,最后根据服务器响应信息判断是否存在漏洞。
4.目前对xss漏洞检测技术分为网络爬虫模块与xss漏洞检测模块,网络爬虫模块主要集中在研究网页去重技术,实际上经过url去重后的页面仍存在大量结构相似的页面,对于页面结构相似度很高的页面,处理的逻辑也基本一样,故对这类页面重复检测,并不能挖掘更多的漏洞,且严重降低漏洞检测的效率。


技术实现要素:

5.针对现有技术中存在的上述技术问题,本发明提供一种跨站脚本漏洞的检测方法和系统,对待检测的网址及其相应的网址集合进行聚类,防止对结构相似的页面进行重复检测,提高检测效率。
6.本发明公开了一种跨站脚本漏洞的检测方法,所述检测方法包括:获取待检测网址;获取待检测网址页面中的网址,获得网址集合;对所述网址集合进行聚类,获得一个或多个类簇;从所述类簇中选择一个或多个网址,获得第一网址;采用攻击向量对所述第一网址进行检测。其中,网址集合包括了待检测网址及其下一层级的网址,但不限于此。
7.优选的,聚类的方法包括:
8.对网址的页面进行预处理;
9.根据页面的标签,建立页面树;
10.根据页面树的节点层级和同层级节点数量,为叶子节点分配权值;
11.判断两颗页面树的节点是否满足第一条件,所述第一条件包括:标签名、子节点的数量、节点在页面树中的层级均相同;
12.若满足,所述节点为相似节点,根据相似节点的叶子节点权值,计算两个节点的相
似度;
13.若不满足,所述节点为相异节点,相似度为零;
14.根据节点的相似度,获得根节点的相似度;
15.判断两颗页面树的根节点相似度是否大于第一域值;
16.若大于或等于第一域值,两颗页面树属于同一类簇;
17.若小于第一域值,两颗页面树分别属于不同的类簇。
18.优选的,通过相异度进行聚类的方法:
19.根据所述相似度,获得两个页面树的差异度;
20.根据所述差异度,获取两个类簇的距离;
21.判断所述距离是否小于第二域值;
22.若小于第二域值,将所述类簇合并。
23.优选的,两个页面或页面树的差异度表示为:
24.diff(s,t)=n-sim(s,t)
ꢀꢀꢀ
(1)
25.其中,sim(s,t)表示为页面s和t的相似度,diff(s,t)表示为页面s和t的差异度,n表示为常数;
26.类簇距离表示为:
[0027][0028]
其中,ci和cj表示为类簇,i表示为类簇ci的页面数量,j表示为类簇cj的页面数量。
[0029]
优选的,采用攻击向量对所述第一网址进行检测的方法包括:
[0030]
提取所述第一网址及其页面的注入点及其输出点;
[0031]
判断所述注入点是否具有输出点;
[0032]
若具有输出点,选取所述输出点类型相应的攻击相量进行检测。
[0033]
优选的,获取输出点的方法包括:
[0034]
从注入点注入探测字符串;
[0035]
利用正则匹配定位输出点的位置;
[0036]
根据输出点的位置,利用xpath技术获取输出点路径。
[0037]
优选的,所述攻击向量的基本组成单元包括:标签、属性、事件、伪协议和攻击载荷;
[0038]
所述攻击向量包括以下任一类别或它们的组合:
[0039]
第一类别包括:不带转义字符的普通标签、触发事件和攻击载荷;
[0040]
第二类别包括:不带转义字符的普通标签、特殊属性、伪协议和攻击载荷;
[0041]
第三类别包括:不带转义字符的script标签和攻击载荷;
[0042]
第四类别包括:需转义的textarea标签和攻击载荷;
[0043]
第五类别包括:需闭合的原属性或者原标签,需添加的新属性、新事件或者新标签,和需添加的攻击载荷;
[0044]
第六类别包括:伪协议和攻击载荷;
[0045]
第七类别包括:事件类型的标签和属性中,需添加的攻击载荷。
[0046]
优选的,通过构造函数生成攻击向量的方法:
[0047]
根据攻击向量组成单元,生成攻击向量组成单元库;
[0048]
根据攻击向量的类别,定义构造函数,所述构造函数用于:遍历所述组成单元库,选取符合攻击向量类别条件的组合。
[0049]
优选的,攻击向量变异的方法:
[0050]
获取攻击向量的变异位置;
[0051]
结合所述变异位置和变异规则,定义攻击向量的变异方式及其实现方式;
[0052]
选取变异方式对攻击向量进行变异,获得变异攻击向量;
[0053]
对变异攻击向量进行测试,并保存测试成功的变异攻击向量。
[0054]
本发明还提供一种用于实现上述检测方法的系统,包括网址获取子模块、聚类子模块和检测模块,所述网址获取子模块用于获取待检测网址及其页面中的网址,获得网址集合;所述聚类子模块用于对所述网址集合进行聚类,获得一个或多个类簇;所述检测模块用于从所述类簇中选择一个或多个网址,获得第一网址,并采用攻击向量对所述第一网址进行检测。
[0055]
与现有技术相比,本发明的有益效果为:通过对网址集合进行聚类,将相似度较高的网址作为同一类簇;同一类簇的结构相似、且属性相似度高,采用其中一个或多个网址进行漏洞检测,缩小了xss漏洞检测的范围,避免同类网址或页面进行重复检测,从而提高漏洞检测效率。
附图说明
[0056]
图1是本发明的跨站脚本漏洞的检测方法流程图;
[0057]
图2是获得网址集合的方法流程图;
[0058]
图3是dom树的示意图;
[0059]
图4是权值分配的示意图;
[0060]
图5是变异位置的示意图;
[0061]
图6是攻击向量变异的方法流程图;
[0062]
图7是提取注入点的方法流程图;
[0063]
图8是获取输出点的方法流程图;
[0064]
图9是本发明的系统逻辑框图。
具体实施方式
[0065]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0066]
下面结合附图对本发明做进一步的详细描述:
[0067]
一种跨站脚本漏洞的检测方法,如图1所示,所述检测方法包括:
[0068]
步骤s1:获取待检测网址url。
[0069]
步骤s2:获取待检测网址页面中的网址,获得网址集合。
[0070]
可以采用网络爬虫技术,下载url页面及其源码,解析、并提取页面中的网址;可以
对网址集合进行格式化处理、去重。应当指出的是网址或网页的层级通常较多,可以根据检测的范围,获取多个层级的网址。
[0071]
步骤s3:对所述网址集合进行聚类,获得一个或多个类簇。可以根据网址中标签、属性和结构的特点,对网址进行聚类。
[0072]
步骤s4:从所述类簇中选择一个或多个网址,获得第一网址。
[0073]
步骤s5:采用攻击向量对所述第一网址进行检测,生成检测报告。
[0074]
通过对网址集合进行聚类,将相似度较高的网址作为同一类簇;同一类簇的结构相似、且属性相似度高,采用其中一个或多个网址进行漏洞检测,缩小了xss漏洞检测的范围,避免同类网址或页面进行重复检测,从而提高漏洞检测效率。
[0075]
步骤s3中,聚类的方法包括:
[0076]
步骤301:对网址的页面进行预处理。页面预处理用于清洗无用数据,一个完整的html页面包含文本、脚本、注释、标签等,决定页面结构的是页面标签,因此可以对html页面中除标签之外的其他元素进行清洗。
[0077]
步骤302:根据页面的标签,建立页面树(dom tree,dom树)。
[0078]
dom树的建立是根据html页面中的标签之间的关系,标签之间的关系包括嵌套关系与并列关系,对应在dom树中的关系为父子节点关系与兄弟节点关系。比如页面中《ul》《li》《/li》《/ul》,标签li嵌套在标签ul中,标签li是标签ul的子标签,对应在dom树中li是节点ul的子节点。再比如《h1》《/h1》《p》《/p》不存在嵌套关系,并列属于根节点的子节点,也就是并列关系。对应在dom树中节点p是节点h1的右兄弟。一个具体的页面树如图3所示。
[0079]
步骤303:根据页面树的节点层级和同层级节点数量,为叶子节点分配权值。例如,根据节点深度与同层级的邻近兄弟节点数量,将权值分配给叶子节点,最后采用递归的方式计算两个页面中所有节点的权值,最后得到根节点的权值,具体的权值分配如图4所示。
[0080]
步骤304:判断两颗页面树的节点是否满足第一条件,所述第一条件包括:标签名、子节点的数量、节点在页面树中的层级均相同。
[0081]
若满足,执行步骤305:所述节点为相似节点,根据所述相似节点的叶子节点权值,计算两个节点的相似度。
[0082]
叶子节点没有子节点,为页面树节点分支的末端。相似节点具有相同的层级和子节点数量,因此权值也相同,将权值作为相似度;相似节点的子节点数量越多、层级越浅,则权值越高,对页面树的相似度贡献也越大。
[0083]
若不满足,执行步骤306:所述节点为相异节点,相似度为零。即相异节点对页面树的相似度贡献为零。
[0084]
步骤307:根据节点的相似度,获得根节点的相似度。相似节点的相似度为其子节点相似度之和,以此类推计算根节点的相似度,其中根节点的相似度作为页面树的相似度。具体的,先比较叶子节点的相似度,再层层向上计算各个父节点的相似度,直到计算出根节点的相似度,最终根节点的相似度即为两颗dom树的相似度。
[0085]
步骤308:判断两颗页面树的相似度是否大于第一域值。
[0086]
若大于或等于第一域值,步骤309:两颗页面树为同一类簇。
[0087]
若小于第一域值,步骤310:两颗页面树分别属于不同的类簇。
[0088]
步骤308中,还可以通过页面树的相异度进行聚类:
[0089]
执行步骤311:根据所述相似度,获得两个页面树的差异度。
[0090]
其中,两个页面或页面树的差异度表示为:
[0091]
diff(s,t)=n-sim(s,t)
ꢀꢀꢀ
(1)
[0092]
其中,sim(s,t)表示为页面s和t的相似度,diff(s,t)表示为页面s和t的差异度,n表示为常数,例如n=1。
[0093]
执行步骤312:根据所述差异度,获取两个类簇的距离。其中,类簇包括一个或多个页面树。
[0094]
其中,类簇距离表示为:
[0095][0096]
其中,ci和cj分别表示为类簇,i表示为类簇ci的页面数量,j表示为类簇cj的页面数量。利用平均距离法计算两个类簇之间的距离。
[0097]
执行步骤313:判断两个类簇的距离是否小于第二域值。
[0098]
若小于第二域值,执行步骤314:将所述类簇合并。
[0099]
若大于第二域值,两个类簇为相异类簇。
[0100]
在一个具体实施例中,将各个url作为一个单独的类簇,即一个类簇权具有一个页面,再执行步骤311,对类簇进行聚类;最终随机选择类簇的一个或多个页面进行xss漏洞检测。
[0101]
步骤s5中,采用攻击向量对所述第一网址进行检测的方法包括:
[0102]
步骤501:提取所述第一网址及其页面的注入点及其输出点。
[0103]
注入点主要提取url以及源码中包含的注入点,常见的注入点有两种类型:带有参数的url以及表单中存在用户交互的地方。url中所有参数都是一个潜在的注入点,故需要全部提取,表单中的潜在注入点通过selenium webdriver获取页面中的form元素。
[0104]
步骤502:判断所述注入点是否具有输出点。
[0105]
只有存在输出点的注入点才有可能实施xss攻击,故输出点分析子模块主要判断获取的注入点是否存在输出点,剔除不存在输出点的注入点,进一步缩小了漏洞检测的范围,避免对无效的注入点进行漏洞检测。
[0106]
若具有输出点,步骤503:选取所述输出点类型相应的攻击相量进行检测。
[0107]
若不具有输出点,所述注入点为无效注入点。
[0108]
根据输出点的类型对攻击向量进行区分,并采用相应的攻击向量进行针对性的检测,降低冗余度、提高准确低,提高检测效率,保证攻击向量的有效性。
[0109]
步骤501中,如图7所示,提取注入点的方法包括:
[0110]
步骤511:获取网址的参数;
[0111]
步骤512:替换所述参数的参数值后,发送http请求;
[0112]
步骤513:判断http请求的响应页面是否替换字符;
[0113]
若替换,执行步骤514:所述参数为可注入点。遍历所述网址的参数,以提取全部可注入点。
[0114]
若没有替换字符,所述参数不是注入点。
[0115]
步骤501中,如图8所示,获取输出点的方法包括:
[0116]
步骤521:从注入点注入探测字符串。
[0117]
步骤522:利用正则匹配定位输出点的位置。
[0118]
步骤523:根据输出点的位置,利用xpath技术获取输出点路径。
[0119]
步骤524:选择输出点,并使用所述输出点类别相应的攻击向量进行测试,获得所述注入点相应的攻击向量。
[0120]
若所述注入点不具有输出点,为无效注入点,不需要进行xss漏洞检测。通过剔除不存在输出点的注入点,进一步缩小了漏洞检测的范围,避免对无效的注入点进行漏洞检测。
[0121]
具体的,攻击向量的基本组成单元至少包括:标签、属性、事件、伪协议和攻击载荷。为了保证构造的攻击向量能正确执行,必须要满足输出点语境,所以攻击向量还应包含闭合字符。
[0122]
所述攻击向量包括以下任一类别或它们的组合:
[0123]
第一类别包括:不带转义字符的普通标签、触发事件和攻击载荷。对于不需要转义的普通标记之间,因此不添加闭合字符,并且注入的攻击向量在页面加载时正常执行。比如《img src=#onload=alert(123)/》。
[0124]
第二类别包括:不带转义字符的普通标签、特殊属性、伪协议和攻击载荷。比如《a href=javascript:alert(123)》click《/a》。
[0125]
第三类别包括:不带转义字符的script标签和攻击载荷,比如《script》alert(123)《/script》。
[0126]
第四类别包括:需转义的textarea标签和攻击载荷,比如《/textarea》《script》alert(123)《/script》《textarea》。输出位置位于特殊标签之间,需要先利用闭合字符将标签闭合,才能成功的执行xss攻击。
[0127]
第五类别包括:需闭合的原属性或者原标签,需添加的新属性、新事件或者新标签,和需添加的攻击载荷。对于普通的属性,不能直接执行javascript代码,比如:“》《img src=2onload=alert(123)》《”,其中“》”和“《”为添加的闭合标签字符,双引号为添加的用于闭合属性的字符。
[0128]
第六类别包括:伪协议和攻击载荷。当标签的属性是特殊属性时,此类攻击向量可以直接通过伪协议与攻击载荷构成。比如javascript:confirm(123)。
[0129]
第七类别包括:事件类型的标签和属性中,需添加的攻击载荷。当标签属性为事件类型时,可以直接通过添加攻击载荷就可以进行xss攻击,比如comfirm(123)。
[0130]
本发明还包括通过构造函数生成攻击向量的方法:
[0131]
步骤531:根据攻击向量组成单元,生成攻击向量组成单元库。
[0132]
步骤532:根据攻击向量的类别,定义构造函数,所述构造函数用于:遍历所述组成单元库,选取符合攻击向量类别条件的组合。
[0133]
比如当遍历的标签为

img’,属性为

src’,伪协议为:

javascript’,攻击载荷为:

alert(

xss’)’,最终构造的攻击向量为:《img src=javascrit:alert(

xss’)/》,通过嵌套调用构造函数的方式,得到包含不同种类的xss攻击向量库。
[0134]
如图6所示,本发明还包括攻击向量变异的方法:
[0135]
步骤541:获取攻击向量的变异位置。xss攻击向量根据其作用位置不同,选取的变
异方式也有所不同,因此对xss攻击向量的作用位置进行分析,在一个具体实施例中,攻击向量的变异位置如图5所示,变异位置的说明如下表所示:
[0136][0137]
步骤542:结合所述变异位置和变异规则,定义攻击向量的变异方式及其实现方式。攻击向量变异方式以及实现方法如下表所示:
[0138]
变异方式限定变异位置具体实现方式f121删除闭合标签右侧括号f28,9,10,11,15,16html实体编码f310,16unicode编码f410,11,12url编码f52,4,8,14大小写混合编码f63,13插入特殊字符f72,3插入重复字符f81,3,4,5,6,13,14,18,19,2插入系统控制字符
[0139]
步骤543:选取变异方式对攻击向量进行变异,获得变异攻击向量。
[0140]
步骤544:对变异攻击向量进行测试,并保存测试成功的变异攻击向量,添加到变异攻击向量库。
[0141]
如图2所示,步骤s2中,获得网址集合的具体方法包括:
[0142]
步骤201:输入网站url入口,发送http请求;
[0143]
步骤202:网页源码下载,并解析,提取页面中包含的url;
[0144]
步骤203:将步骤202提取的url进行格式化处理,并进行url去重,将去重后的url添加至待爬取url队列中;
[0145]
步骤204:判断待爬取url队列是否为空,
[0146]
若为空,执行步骤205:网站url已经获取完毕,获得网址集合;
[0147]
若不为空,从url队列中弹出一条url,执行步骤202。
[0148]
通过对攻击向量的变异处理,保证攻击向量能成功绕过过滤器的过滤。
[0149]
本发明还提供一种用于实现上述检测方法的系统,如图9所示,包括网络爬虫模块1、检测模块2、攻击向量生成模块3和报告生成模块4,所述网络爬虫模块1包括网址获取子
模块11和聚类子模块12,检测模块2包括注入点提取子模块21、输出点识别子别模块22和应用子模块23,攻击向量生成模块3包括攻击向量实例化子模块31和攻击向量变异子模块32。
[0150]
其中,网址获取子模块11用于获取待检测网址及其页面中的网址,获得网址集合;聚类子模块12用于对所述网址集合进行聚类,获得一个或多个类簇。
[0151]
攻击向量生成模块3用于获取攻击向量,可以通过构造函数生成攻击向量。具体的,攻击向量化实例化子模块31用于攻击向量建模和生成初始攻击向量库,攻击向量变异子模块32用于根据变异规则生成变异攻击向量库。
[0152]
检测模块2用于从所述类簇中选择一个或多个网址,获得第一网址,并采用攻击向量对所述第一网址进行检测。具体的,注入点提取子模块21用于提取url的注入点,输出点识别子模块22用于识别所述注入点的输出点。应用子模块23用于:根据输出点的类别选择相应的攻击向量进行漏洞检测。
[0153]
报告生成模块4用于根据漏洞检测结果,生成测试报告。
[0154]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献