一种注入漏洞检测方法及装置与流程

文档序号:16514662发布日期:2019-01-05 09:33阅读:128来源:国知局
一种注入漏洞检测方法及装置与流程

本申请涉及互联网技术领域,尤其涉及一种注入漏洞检测方法及装置。



背景技术:

注入漏洞是编写代码的时候,没有对用户输入数据的合法性进行判断产生的。目前在注入漏洞检测中相似度检测是一种常见的方法。

现有的相似度检测,主要是利用相似算法(如局部敏感哈希算法simhash、最小哈希算法minhash等)计算真逻辑(sql真逻辑)请求返回的页面内容与假逻辑(sql假逻辑)请求返回的页面内容的相似度值。当相似度值大于预设阈值时,则认为这两个页面相似,不存在注入漏洞,当相似度值小于预设阈值时,则认为这两个页面不相似,存在注入漏洞。

然而,由于很多页面本身就是动态变化的,还有些页面在多次请求时返回的页面内容是动态变化的,因此,通过计算两个页面的相似度值来判断是否存在注入漏洞,存在大量的误报。



技术实现要素:

本申请实施例提供一种注入漏洞检测方法及装置,可以减少误报的次数,提高检测注入漏洞的准确性。

第一方面,本申请实施例提供了一种注入漏洞检测方法,该方法包括:

获取第一参数集合,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,该第一页面为服务器针对第一逻辑类型的第一请求返回的页面,该第二页面为所述服务器针对第二逻辑类型的第二请求返回的页面;

向所述服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求分别返回的n个第三页面和针对该m个第四请求分别返回的m个第四页面,其中第三请求为在用于注入漏洞检测的目标请求中插入该第一逻辑类型的任一字段得到的请求,第四请求为在该目标请求中插入该第二逻辑类型的任一字段得到的请求;

获取第二参数集合,该第二参数集合中包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数;

若该第一参数集合中存在至少一个页面参数不在该第二参数集合中,则确定该服务器中存在注入漏洞。

结合第一方面,在一种可能的实施方式中,在向服务器发送n个第三请求和m个第四请求之前,该方法还包括:

针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的统一资源定位符url的参数字段中形成一个第三请求;针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的url的参数字段中形成一个第四请求。

结合第一方面,在一种可能的实施方式中,在向服务器发送n个第三请求和m个第四请求之前,该方法还包括:

针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第三请求;针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第四请求。其中,该目标字段包括host字段、referer字段、cookie字段中的一种或多种。

结合第一方面,在一种可能的实施方式中,上述页面参数包括文档对象模型dom节点;获取第二参数集合,包括:

获取该第一页面按照dom进行解析后得到的第一节点集合和该第二页面按照该dom进行解析后的第二节点集合;将该n个第三页面按照该dom进行解析,得到n个第三节点集合;将该m个第四页面按照该dom进行解析,得到m个第四节点集合;将该n个第三节点集合和该第一节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中;将该m个第四节点集合和该第二节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中。其中,一个页面对应一个节点集合,一个节点集合包括至少一个dom节点。

结合第一方面,在一种可能的实施方式中,在获取第二参数集合之后,该方法还包括:将该第一参数集合中的各个页面参数与该第二参数集合中的各个页面参数之间进行匹配,确定该第一参数集合中的每个页面参数是否都在该第二参数集合中。在另一种可能的实施方式中,在获取第二参数集合之后,该方法还包括:将该第一参数集合中的各个dom节点与该第二参数集合中的各个dom节点之间进行匹配,确定该第一参数集合中的每个dom节点是否都在该第二参数集合中。

结合第一方面,在一种可能的实施方式中,该方法,还包括:若该第一参数集合中每个页面参数都在该第二参数集合中,则确定该服务器中不存在该注入漏洞。在另一种可能的实施方式中,在确定该服务器中不存在该注入漏洞时,可以输出安全提示信息,该安全提示信息可以用于提示该服务器已被检测且不存在该注入漏洞。

结合第一方面,在一种可能的实施方式中,在确定该服务器中存在注入漏洞之后,还包括:输出报警提示信息,该报警提示信息用于提示该服务器中存在该注入漏洞。

第二方面,本申请实施例提供了一种注入漏洞检测装置,该装置包括:

第一获取模块,用于获取第一参数集合,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,该第一页面为服务器针对第一逻辑类型的第一请求返回的页面,该第二页面为该服务器针对第二逻辑类型的第二请求返回的页面;

收发模块,用于向该服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求分别返回的n个第三页面和针对该m个第四请求分别返回的m个第四页面,其中第三请求为在用于注入漏洞检测的目标请求中插入该第一逻辑类型的任一字段得到的请求,第四请求为在该目标请求中插入该第二逻辑类型的任一字段得到的请求;

第二获取模块,用于获取第二参数集合,该第二参数集合中包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数;

确定模块,用于当该第一参数集合中存在至少一个页面参数不在该第二参数集合中时,确定该服务器中存在注入漏洞。

结合第二方面,在一种可能的实施方式中,该装置还包括:

第一插入模块,用于针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的统一资源定位符url的参数字段中形成一个第三请求;

该第一插入模块,还用于针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的url的参数字段中形成一个第四请求。

结合第二方面,在一种可能的实施方式中,该装置还包括:

第二插入模块,用于针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第三请求;

该第二插入模块,还用于针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第四请求。其中,该目标字段包括host字段、referer字段、cookie字段中的一种或多种,该在该目标请求的目标字段中每插入一个字段得到一个请求。

结合第二方面,在一种可能的实施方式中,上述页面参数包括文档对象模型dom节点;上述第二获取模块具体用于:

获取该第一页面按照dom进行解析后得到的第一节点集合和该第二页面按照该dom进行解析后的第二节点集合;将该n个第三页面按照该dom进行解析,得到n个第三节点集合;将该m个第四页面按照该dom进行解析,得到m个第四节点集合;将该n个第三节点集合和该第一节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中;将该m个第四节点集合和该第二节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中。其中,一个页面对应一个节点集合,一个节点集合包括至少一个dom节点。

结合第二方面,在一种可能的实施方式中,该装置还包括:

匹配模块,用于将该第一参数集合中的各个页面参数与该第二参数集合中的各个页面参数之间进行匹配,确定该第一参数集合中的每个页面参数是否都在该第二参数集合中。在一种可能的实施方式中,该匹配模块具体用于将该第一参数集合中的各个dom节点与该第二参数集合中的各个dom节点之间进行匹配,确定该第一参数集合中的每个dom节点是否都在该第二参数集合中。

结合第二方面,在一种可能的实施方式中,上述确定模块还用于当该第一参数集合中每个页面参数都在该第二参数集合中时,确定该服务器中不存在该注入漏洞。

结合第二方面,在一种可能的实施方式中,该装置还包括:

输出模块,用于在确定该服务器中存在注入漏洞之后,输出报警提示信息,该报警提示信息用于提示该服务器中存在该注入漏洞。

第三方面,本申请实施例提供了一种终端,包括处理器、输入设备、输出设备和存储器,该处理器、输入设备、输出设备和存储器相互连接,其中,该存储器用于存储支持终端执行上述方法的计算机程序,该计算机程序包括程序指令,该处理器被配置用于调用该程序指令,执行上述第一方面的注入漏洞检测方法。

第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行上述第一方面的注入漏洞检测方法。

本申请实施例通过获取第一参数集合,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,向服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面,再获取第二参数集合,该第二参数集合包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数,当该第一参数集合中存在至少一个页面参数不在该第二参数集合中时,则确定该服务器中存在注入漏洞,可以减少误报的次数,提高检测注入漏洞的准确性。

附图说明

为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是http请求的数据结构的示意图;

图2是本申请实施例提供的一种注入漏洞检测方法的一示意流程图;

图3a是htmldom树的示意图;

图3b是第三节点集合和第一节点集合的示意图;

图3c是第四节点集合和第二节点集合的示意图;

图4是本申请实施例提供的一种注入漏洞检测方法的另一示意流程图;

图5a是第一页面的dom树结构的示意图;

图5b是第一dom节点的示意图;

图5c是第二页面的dom树结构的示意图;

图5d是第二dom节点的示意图;

图6是本申请实施例提供的一种注入漏洞检测装置的一示意性框图;

图7是本申请实施例提供的一种终端的一示意性框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应当理解,本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

还应当理解,在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置展示该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

本申请实施例中的目标请求、第一请求、第二请求、第三请求、第四请求可以分别为不同的超文本传输协议(hypertexttransferprotocol,http)请求。http请求可以指从客户端到服务器端的请求消息。如图1所示,图1为http请求的数据结构的示意图。其中,http请求由三个部分组成:请求行、请求头部、请求体(请求数据)。http请求行中包含请求方法(如get或post等)、请求对应的统一资源定位符(uniformresourcelocator,url)以及使用的协议名称/版本号;http请求头部中包含很多头部字段名和值,如host字段、referer字段、cookie字段等;http请求体中包含客户提交的查询字符串信息。host字段用于表示请求访问的服务器的域名(ip地址)和端口号;referer字段用于告诉服务器请求是从哪个页面链接过来的;cookie字段用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。为方便描述,下面将以http请求为例进行说明。

本申请实施例提供的注入漏洞检测方法可适用于智能手机、平板电脑、台式电脑等终端。可选的,本申请实施例提供的注入漏洞检测方法可由上述任一类型的任一终端执行,也可为上述任一类型的任一终端中的功能模块(比如浏览器等)执行,在此不做限制。为方便描述,下面将以终端为例进行说明。

下面将结合图2至图7,对本申请实施例提供的注入漏洞检测方法及装置进行说明。

参见图2,是本申请实施例提供一种注入漏洞检测方法的一示意流程图,如图1所示,该注入漏洞检测方法可包括:

s201,终端获取第一参数集合。

在一些可行的实施方式中,终端可以发送真逻辑的第一请求和假逻辑的第二请求,并接收该第一请求返回的第一页面和该第二请求返回的第二页面。终端利用页面相似度算法(如局部敏感哈希算法simhash、最小哈希算法minhash等)计算该第一页面与该第二页面之间的相似度值,并可以判断该相似度值是否小于预设的相似度阈值(如95%)。若是,即该相似度值小于预设的相似度阈值,说明服务器中可能存在注入漏洞,终端可以获取第一参数集合。但此时的相似度值小于预设的相似度阈值可能是因为页面本身是动态变化的,或某些页面在多次请求时返回的页面是动态变化的,因此,通过计算两个页面的相似度值不能确定服务器中是否存在注入漏洞。

在一些可行的实施方式中,终端可以从本地存储或服务器中获取第一参数集合。其中,该第一参数集合可以以集合、列表等形式存在。该第一参数集合中可以包括第一页面和第二页面之间不同的页面参数,该第一页面可以为针对第一逻辑类型的第一http请求返回的页面,该第二页面可以为针对第二逻辑类型的第二http请求返回的页面。该第一逻辑类型可以为真逻辑,该第二逻辑类型可以为假逻辑。该第一逻辑类型的第一http请求可以由在用于注入漏洞检测的目标http请求中插入该第一逻辑类型的第一字段确定,该第二逻辑类型的第二http请求可以由在该目标http请求中插入该第二逻辑类型的第二字段确定。例如,第一逻辑类型的字段为“or1=1”、“or1<2”或“or2=2”等恒真的结构化查询语言(structuredquerylanguage,sql)语句,第二逻辑类型的字段为“and1=2”、“and1>2”或“and21=12”等恒假的sql语句。

在一些可行的实施方式中,终端可以利用层级解析工具(如dom4j)将服务器针对第一逻辑类型的第一http请求返回的第一页面按照文档对象模型(documentobjectmodel,dom)进行解析,得到包括至少一个第一dom节点的第一节点集合,并可以将服务器针对第二逻辑类型的第二http请求返回的第二页面按照dom进行解析,得到包括至少一个第二dom节点的第二节点集合。再比较该第一节点集合和该第二节点集合的对应dom节点之间是否相同,将该第一节点集合和该第二节点集合的对应dom节点之间不相同的dom节点记录至第一参数集合。

需要说明的是,dom可通过解析超文本标记语言(hypertextmarkuplanguage,html)文档,为html文档在逻辑上建立一个树模型。根据万维网联盟(w3c)的htmldom(超文本标记语言文档对象模型)标准,html文档中的所有内容都是节点,整个文档是一个文档节点,每个html元素是元素节点,html元素内的文本是文本节点,每个html属性是属性节点,注释是注释节点。如图3a所示,是htmldom树的示意图。其中,根元素即根节点,元素即子节点。每个html文档都可以按照dom被解析为一个根元素和一个或多个元素。

s202,终端向服务器发送n个第三请求和m个第四请求,并接收服务器针对n个第三请求分别返回的n个第三页面和针对m个第四请求分别返回的m个第四页面。

在一些可行的实施方式中,终端可以在用于注入漏洞检测的目标http请求中插入该第一逻辑类型的n个字段,得到该第一逻辑类型的n个第三http请求,并可以在该目标http请求中插入该第二逻辑类型的m个字段,得到该第二逻辑类型的m个第四http请求。终端可以向服务器发送该n个第三http请求和该m个第四http请求,服务器在接收到该n个第三http请求和该m个第四http请求后,针对每个http请求服务器返回该http请求对应的页面,终端可以接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面。其中,在该目标http请求中每插入一个字段可得到一个http请求。该n和该m均可以为大于或等于1的整数,该n和该m的大小可以相等,也可以不相等,本申请实施例不做限定。该第一逻辑类型的字段可以为真逻辑的结构化查询语言(structuredquerylanguage,sql)语句,该第二逻辑类型的字段可以为假逻辑的sql语句。例如,第一逻辑类型的字段为“or1=1”、“or1<2”或“or2=2”等恒真的sql语句,第二逻辑类型的字段为“and1=2”、“and1>2”或“and21=12”等恒假的sql语句。

在一些可行的实施方式中,url的结构通常为“协议://服务器名称(ip地址)/路径/文件名?参数”,例如,一个url为:http://xxx.pingna.com/sql.php?id=1,其中,id=1表示这个url的参数字段,url的参数字段由参数名和参数值组成,id表示参数名,1表示参数值,参数值可为数字、字母(包括大小写)、特殊字符(指除数字、字母之外的字符)和/或它们的组合。问号“?”字符用于分隔url中的文件名和参数。终端可以从用于注入漏洞检测的目标http请求中提取该目标http请求携带的url,再可以在该url的参数字段中插入真逻辑的n个sql语句,得到真逻辑的n个第三http请求,并可以在该url的参数字段中插入假逻辑的m个sql语句,得到假逻辑的m个第四http请求。终端可以向服务器发送该n个第三http请求和该m个第四http请求,服务器在接收到该n个第三http请求和该m个第四http请求后,针对每个http请求服务器返回该http请求对应的页面,终端可以接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面。其中,终端在该url的参数字段中每插入一个sql语句就得到一个http请求。该n个真逻辑的sql语句可以各不相同,也可以一部分不相同;该m个假逻辑的sql语句可以各不相同,也可以一部分不相同,本申请实施例不做限定。可选的,终端可以预设多个真逻辑的sql语句和多个假逻辑的sql语句,终端在该url的参数字段中插入真逻辑的sql语句时,可以从预设的多个真逻辑的sql语句任选一个真逻辑的sql语句进行插入。同理终端在该url的参数字段中插入假逻辑的sql语句时,也可以从预设的多个假逻辑的sql语句任选一个假逻辑的sql语句进行插入。

例如,目标http请求携带的url为http://xxx.pingna.com/sql.php?id=1,假设n=2,m=2。终端在该url的参数字段“id=1”后插入一个预设的真逻辑的sql语句“or1=1”,得到一个真逻辑的第三http请求,此时该第三http请求中的url为http://xxx.pingna.com/sql.php?id=1or1=1;终端再在该url的参数字段“id=1”后插入另一预设的真逻辑的sql语句“or1<2”,得到另一个真逻辑的第三http请求,此时该第三http请求中的url为http://xxx.pingna.com/sql.php?id=1or1<2。同理,终端在该url的参数字段“id=1”后插入一个预设的假逻辑的sql语句“and1>2”,得到假逻辑的第四http请求,此时该第四http请求的url为http://xxx.pingna.com/sql.php?id=1and1>2;终端再在该url的参数字段“id=1”后插入另一个预设的假逻辑的sql语句“and12=21”,得到另一个假逻辑的第四http请求,此时该第四http请求的url为http://xxx.pingna.com/sql.php?id=1and12=21。

在一些可行的实施方式中,终端可以在用于注入漏洞检测的目标http请求的目标字段中插入真逻辑的n个sql语句,得到真逻辑的n个第三http请求,并可以在该目标http请求的该目标字段中插入假逻辑的m个sql语句,得到假逻辑的m个第四http请求。终端可以向服务器发送该n个第三http请求和该m个第四http请求,服务器在接收到该n个第三http请求和该m个第四http请求后,针对每个http请求服务器返回该http请求对应的页面,终端可以接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面。该目标字段可以包括host字段、referer字段、cookie字段中的一种或多种。其中,第三http请求和第四http请求分别由在目标http请求的同一字段中插入不同逻辑类型的sql语句确定。

假设目标http请求的host字段为“ulog.jd.com”,referer字段为http://xx.xx.xx.com/xx.html,cookie字段为“_jda=1387505529”。以host字段为例,假设n=3,m=2。终端在该目标http请求的host字段“ulog.jd.com”后插入一个预设的真逻辑sql语句“or1=1”,得到一个真逻辑的第三http请求,此时该第三http请求的host字段为“ulog.jd.comor1=1”;再在该host字段“ulog.jd.com”后插入另一个预设的真逻辑sql语句“or2=2”,得到另一个真逻辑的第三http请求,此时该第三http请求的host字段为“ulog.jd.comor2=2”;再在该host字段“ulog.jd.com”后插入又一个预设的真逻辑sql语句“or1<2”,得到又一个真逻辑的第三http请求,此时该第三http请求的host字段为“ulog.jd.comor1<2”。同理,终端在该目标http请求的host字段“ulog.jd.com”后插入一个预设的假逻辑sql语句“and12=21”,得到一个假逻辑的第四http请求,此时该第四http请求的host字段为“ulog.jd.comand12=21”;再在该host字段“ulog.jd.com”后插入另一个预设的假逻辑sql语句“and2>112”,得到另一个假逻辑的第四http请求,此时该第四http请求的host字段为“ulog.jd.comand2>112”。

在一些可行的实施方式中,终端在向服务器发送n个第三http请求和m个第四http请求时,可以交叉发送,如发送一个第三http请求,再发送一个第四http请求,接着发送另一个第三http请求,再发送另一个第四http请求,直至所有的http请求发送完毕。终端还可以顺序发送n个第三http请求和m个第四http请求,例如当n个第三http请求发送完毕之后再发送第四http请求。本申请实施例对此不做限定。其中,多个http请求之间可以以预设的时间间隔定时发送,也可以尽可能快的发送,本申请实施例对发送多个http请求之间的时间间隔也不做限定。

s203,终端获取第二参数集合。

在一些可行的实施方式中,终端在接收到上述服务器针对上述n个第三请求返回的n个第三页面和针对上述m个第四请求返回的m个第四页面之后,可以利用层级解析工具(如dom4j)对该n个第三页面中的每个第三页面按照dom进行解析,得到n个dom树,再从该n个dom树中提取n个第三节点集合,每个第三节点集合中包括至少一个dom节点。同理,终端可以利用dom4j对该m个第四页面中的每个第四页面按照dom进行解析,得到m个dom树,再从该m个dom树中提取m个第四节点集合,每个第四节点集合中包括至少一个第四dom节点。一个dom树对应一个节点集合。终端可以比较该n个第三节点集合和上述第一节点集合中每两个节点集合之间的dom节点是否相同,将该n个第三节点集合和该第一节点集合中每两个节点集合之间不同的dom节点记录到第二参数集合中。同理,可以比较该m个第四节点集合和上述第二节点集合中每两个节点集合之间的dom节点是否相同,将该m个第四节点集合和该第二节点集合中每两个节点集合之间不同的dom节点也记录到第二参数集合中。

例如,如图3b所示,是第三节点集合和第一节点集合的示意图。其中,n=2,第三节点集合1中包括的dom节点为:“根元素<bookstore>:西西弗书店、元素<book>:书籍、元素<title>:harrypotter、元素<author>:jk.rowling、元素<year>:2005、元素<price>:29.99”。第三节点集合2中包括的dom节点为:“根元素<bookstore>:西西弗书店、元素<book>:书籍、元素<title>:harrypotter、元素<author>:jk.rowling、元素<year>:2005、元素<price>:28.9”。第一节点集合中包括的dom节点为:“根元素<bookstore>:西西弗书店、元素<book>:书籍、元素<title>:harrypotter、元素<author>:jk.rowling、元素<year>:2005、元素<price>:29.99”。终端比较第一节点集合和第三节点集合1之间是否存在不相同的dom节点,并比较第一节点集合和第三节点集合2之间是否存在不相同的dom节点,还比较第三节点集合1和第三节点集合2之间是否存在不相同的dom节点,由图3b可知,将不同的dom节点“元素<price>”记录至第二参数集合中。如图3c所示,是第四节点集合和第二节点集合的示意图。其中,m=2。同理,终端比较第二节点集合和第四节点集合1之间是否存在不相同的dom节点,并比较第二节点集合和第四节点集合2之间是否存在不相同的dom节点,还比较第四节点集合1和第四节点集合2之间是否存在不相同的dom节点,由图3c可知,将不同的dom节点“元素<year>”记录至第二参数集合中。此时,第二参数集合中包括“元素<year>和元素<price>”这两个dom节点。

s204,若第一参数集合中存在至少一个页面参数不在第二参数集合中,则终端确定服务器中存在注入漏洞。

在一些可行的实施方式中,终端可以将上述获取到的第一参数集合中的各个dom节点与上述获取到的第二参数集合中的各个dom节点进行比较,从而确定该第一参数集合中的每个dom节点是否都在该第二参数集合中,若否,说明该第一参数集合中存在至少一个dom节点不在该第二参数集合中,终端就可以确定上述服务器中存在注入漏洞。本申请实施例通过比较第一参数集合(包括真逻辑请求和假逻辑请求返回的页面之间不同的dom节点)中的所有dom节点是否都在第二参数集合(包括多个真逻辑请求返回的页面之间不同的dom节点和多个假逻辑请求返回的页面之间不同的dom节点)中,可以排除因为页面本身动态变化或多次请求动态返回引起的注入漏洞误报的情况,减少了注入漏洞的误报次数,提高了检测注入漏洞的准确度。

例如,第一参数集合中包括“元素<title>、元素<author>以及元素<price>”,第二参数集合中包括“元素<year>和元素<price>”。终端查找第一参数集合中的“元素<title>”是否在第二参数集合中,并查找第一参数集合中的“元素<author>”是否在第二参数集合中,再查找第一参数集合中的“元素<price>”是否在第二参数集合中,显然,第一参数集合中的“元素<title>、元素<author>”不在第二参数集合中,第一参数集合中的“元素<price>”在第二参数集合中,那么因为第一参数集合中存在2个dom节点(“元素<title>、元素<author>”)不在第二参数集合中,终端就可以确定服务器中存在注入漏洞。可选的,终端可以在第一参数集合中查找到任一个dom节点不在第二参数集合中后,对第一集合中未查找的dom节点,不再进行查找,从而提高处理效率。如终端查找第一参数集合中的“元素<title>”是否在第二参数集合中,若否,则终端直接确定服务器中存在注入漏洞,而不再查找第一参数集合中的“元素<author>以及元素<price>”是否在第二参数集合中。

本申请实施例通过获取第一参数集合,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,向服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面,再获取第二参数集合,该第二参数集合包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数,当该第一参数集合中存在至少一个页面参数不在该第二参数集合中时,则确定该服务器中存在注入漏洞,可以减少误报的次数,提高检测注入漏洞的准确性。

参见图4,是本申请实施例提供的一种注入漏洞检测方法的另一示意流程图,如图4所示,该注入漏洞检测方法可包括:

s401,终端确定用于注入漏洞检测的目标请求。

在一些可行的实施方式中,终端可以获取用户预设的一个或多个用于检测服务器是否存在注入漏洞的目标http请求。该目标http请求中携带的url可以为该服务器中存在的url,即终端通过该url可以正常访问该服务器。

s402,终端根据目标请求确定出第一请求和第二请求。

在一些可行的实施方式中,终端可以在上述确定出的目标http请求中插入第一逻辑类型的字段,得到该第一逻辑类型的第一http请求,并可以在该目标http请求中插入第二逻辑类型的字段,得到该第二逻辑类型的第二http请求。其中,该第一逻辑类型可以表示真逻辑,第二逻辑类型可以表示假逻辑。该第一逻辑类型的字段可以为真逻辑的sql语句,该第二逻辑类型的字段可以为假逻辑的sql语句。例如,第一逻辑类型的字段为“or1=1”、“or1<2”或“or2=2”等恒真的sql语句,第二逻辑类型的字段为“and1=2”、“and1>2”或“and21=12”等恒假的sql语句。

在一些可行的实施方式中,终端可以在该目标http请求的目标字段中插入真逻辑的sql语句,得到真逻辑的第一http请求,并可以在该目标http请求的该目标字段中插入假逻辑的sql语句,得到假逻辑的第二http请求。该目标字段可以包括host字段、referer字段、cookie字段中的一种或多种。其中,该第一http请求和该第二http请求分别由在该目标http请求的同一字段中插入不同逻辑类型的sql语句确定。

在一些可行的实施方式中,终端可以从该目标http请求中提取该目标http请求携带的url,再可以在该url的参数字段中插入真逻辑的sql语句,得到真逻辑的第一http请求,并可以在该url的参数字段中插入假逻辑的sql语句,得到假逻辑的第二http请求。其中,终端可以预设多个真逻辑的sql语句和多个假逻辑的sql语句,终端在该url的参数字段中插入真逻辑的sql语句时,可以从预设的多个真逻辑的sql语句任选一个真逻辑的sql语句进行插入。同理终端在该url的参数字段中插入假逻辑的sql语句时,也可以从预设的多个假逻辑的sql语句任选一个假逻辑的sql语句进行插入。

s403,终端向服务器发送第一请求和第二请求,接收服务器针对第一请求返回的第一页面和针对第二请求返回的第二页面。

在一些可行的实施方式中,终端可以向上述服务器发送上述第一http请求和上述第二http请求,该服务器接收终端发送的该第一http请求和该第二http请求,并针对该第一http请求返回该第一http请求对应的第一页面,且针对该第二http请求返回该第二http请求对应的第二页面。终端可以接收该第一页面和该第二页面。

s404,终端将第一页面和第二页面之间不同的dom节点记录至第一参数集合。

在一些可行的实施方式中,终端可以利用层级解析工具(如dom4j)将上述接收到的第一页面按照dom进行解析,得到该第一页面的dom树结构,再可以从该第一页面的dom树结构中提取至少一个第一dom节点。同理,终端可以将上述接收到的第二页面按照dom进行解析,得到该第二页面的dom树结构,再可以从该第二页面的dom树结构中提取至少一个第二dom节点。终端可以将该至少一个第一dom节点中各个第一dom节点与该至少一个第二dom节点中对应的各个第二dom节点进行匹配,确定该至少一个第一dom节点与该至少一个第二dom节点之间不相同的dom节点,并可以将该不相同的dom节点记录至第一参数集合中。此时,第一参数集合中不同的dom节点可能是由于页面本身动态变化或页面在多次请求时的动态返回导致的,也可能是服务器中存在注入漏洞,步骤s402中插入的真逻辑的sql语句和假逻辑的sql语句被服务器当作sql查询语句执行,从而导致第一页面和第二页面之间存在不同的dom节点。

例如,终端对第一页面content1按照dom进行解析,得到content1的dom树结构,如图5a所示,是第一页面的dom树结构的示意图,dom树结构中的每个元素、文本都可称为一个节点。终端可以从content1的dom树结构中提取至少一个第一dom节点。如图5b所示,为第一dom节点的示意图。同理,终端对第二页面content2按照dom进行解析,得到content2的dom树结构,如图5c所示,是第二页面的dom树结构的示意图。终端可以从content2的dom树结构中提取至少一个第二dom节点。如图5d所示,为第二dom节点的示意图。终端可以分别比较该至少一个第一dom节点和该至少一个第二dom节点中文本节点的内容,元素节点(<title>、<author>、<year>以及<price>)的标签名称、标签类型,内容节点(<book>)的标签名称、标签类型、标签属性、子节点数量、子节点类型等是否相同。若某个文本节点的内容不相同,终端就可以确定该某个文本节点为该至少一个第一dom节点与该至少一个第二dom节点之间不相同的dom节点。若某个元素节点的标签名称和标签类型中任意一个不相同,终端就可以确定该某个元素节点为该至少一个第一dom节点与该至少一个第二dom节点之间不相同的dom节点。若某个内容节点的标签名称、标签类型、标签属性、子节点数量和子节点类型中任意一个不相同,终端就可以确定该某个内容节点为该至少一个第一dom节点与该至少一个第二dom节点之间不相同的dom节点。

s405,终端向服务器发送n个第三请求和m个第四请求,并接收服务器针对n个第三请求分别返回的n个第三页面和针对m个第四请求分别返回的m个第四页面。

s406,终端获取第二参数集合。

本申请实施例中上述步骤s405-步骤s406的实现方式可参考图2所示实施例的步骤s202-步骤s203所提供的实现方式,在此不再赘述。

s407,终端将第一参数集合中各个不同的dom节点与第二参数集合中各个不同的dom节点之间进行匹配,确定第一参数集合中的每个dom节点是否都在所述第二参数集合中。

s408,若第一参数集合中存在至少一个dom节点不在第二参数集合中,则终端确定服务器中存在注入漏洞。

s409,若第一参数集合中每个dom节点都在第二参数集合中,则终端确定服务器中不存在注入漏洞。

在一些可行的实施方式中,在一些可行的实施方式中,终端可以将上述获取到的第一参数集合中的各个dom节点与上述获取到的第二参数集合中的各个节点进行比较,从而确定该第一参数集合中的每个dom节点是否都在该第二参数集合中,若否,说明该第一参数集合中存在至少一个dom节点不在该第二参数集合中,终端就可以确定上述服务器中存在注入漏洞。若是,说明该第一参数集合中的每个dom节点都在该第二参数集合中,终端可以确定上述服务器中不存在注入漏洞。本申请实施例通过比较第一参数集合(包括真逻辑请求和假逻辑请求返回的页面之间不同的dom节点)中的所有dom节点是否都在第二参数集合(包括多个真逻辑请求返回的页面之间不同的dom节点和多个假逻辑请求返回的页面之间不同的dom节点)中,可以排除因为页面本身动态变化或多次请求动态返回引起的注入漏洞误报的情况,减少了注入漏洞的误报次数,提高了检测注入漏洞的准确度。

在一些可行的实施方式中,终端在确定上述服务器不存在注入漏洞之后,可以输出安全提示信息,该安全提示信息用于提示上述服务器中不存在注入漏洞,可以方便地查看到检测结果。终端在确定上述服务器中存在注入漏洞之后,可以输出报警提示信息,该报警提示信息可以包括上述目标http请求的url的参数字段,该报警提示信息可以用于提示编程人员对上述服务器中url的参数字段存在的注入漏洞进行处理,可以防止使用上述服务器的客户的信息被泄露,从而导致客户的财产损失。同时可以更快地发现服务器中存在注入漏洞的地方,进而使得编程人员可以更快地对服务器中存在注入漏洞的地方进行处理。

本申请实施例通过确定用于注入漏洞检测的目标请求,再根据目标请求确定出第一请求和第二请求,并向服务器发送第一请求和第二请求,接收服务器针对第一请求返回的第一页面和针对第二请求返回的第二页面;再将第一页面和第二页面之间不同的dom节点记录至第一参数集合,然后向服务器发送n个第三请求和m个第四请求,并接收服务器针对n个第三请求返回的n个第三页面和针对m个第四请求返回的m个第四页面,再获取第二参数集合;接着将第一参数集合中各个不同的dom节点与第二参数集合中各个不同的dom节点之间进行匹配,确定第一参数集合中的每个dom节点是否都在所述第二参数集合中,当第一参数集合中存在至少一个dom节点不在第二参数集合中时,则终端确定服务器中存在注入漏洞,当第一参数集合中每个dom节点都在第二参数集合中时,则终端确定服务器中不存在注入漏洞。不仅可以减少误报的次数,提高检测注入漏洞的准确性,还可以更快地发现服务器中存在注入漏洞的地方,提高检测的效率。

参见图6,是本申请实施例提供的一种注入漏洞检测装置的一示意框图。本实施例的注入漏洞检测装置包括:

第一获取模块10,用于获取第一参数集合。其中,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,该第一页面为服务器针对第一逻辑类型的第一请求返回的页面,该第二页面为服务器针对第二逻辑类型的第二请求返回的页面。

收发模块30,用于向服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求分别返回的n个第三页面和针对该m个第四请求分别返回的m个第四页面。其中第三请求为在用于注入漏洞检测的目标请求中插入该第一逻辑类型的任一字段得到的请求,第四请求为在该目标请求中插入该第二逻辑类型的任一字段得到的请求。

第二获取模块30,用于获取第二参数集合。其中,该第二参数集合中包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数。

确定模块40,用于当该第一参数集合中存在至少一个页面参数不在该第二参数集合中时,确定该服务器中存在注入漏洞。

在一些可行的实施方式中,该装置还包括第一插入模块50。该第一插入模块50,用于针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的统一资源定位符url的参数字段中形成一个第三请求;该第一插入模块50,还用于针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的url的参数字段中形成一个第四请求。

在一些可行的实施方式中,该装置还包括第二插入模块60。该第二插入模块60,用于针对该第一逻辑类型的n个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第三请求;该第二插入模块60,还用于针对该第二逻辑类型的m个字段中的任一字段,将该字段插入该目标请求的目标字段中形成一个第四请求。其中,该目标字段包括host字段、referer字段、cookie字段中的一种或多种。

在一些可行的实施方式中,上述页面参数包括文档对象模型dom节点。上述第二获取模块30具体用于:

获取该第一页面按照dom进行解析后得到的第一节点集合和该第二页面按照该dom进行解析后的第二节点集合;将该n个第三页面按照该dom进行解析,得到n个第三节点集合;将该m个第四页面按照该dom进行解析,得到m个第四节点集合;将该n个第三节点集合和该第一节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中;将该m个第四节点集合和该第二节点集合中每两个节点集合之间不同的dom节点记录至该第二参数集合中。其中,一个页面对应一个节点集合,一个节点集合包括至少一个dom节点。

在一些可行的实施方式中,该装置还包括匹配模块70。该匹配模块70,用于将该第一参数集合中的各个页面参数与该第二参数集合中的各个页面参数之间进行匹配,确定该第一参数集合中的每个页面参数是否都在该第二参数集合中。在一种可能的实施方式中,该匹配模块70具体用于将该第一参数集合中的各个dom节点与该第二参数集合中的各个dom节点之间进行匹配,确定该第一参数集合中的每个dom节点是否都在该第二参数集合中。

在一些可行的实施方式中,上述确定模块40还用于当该第一参数集合中每个页面参数都在该第二参数集合中时,确定该服务器中不存在该注入漏洞。

在一些可行的实施方式中,该装置还包括输出模块80。该输出模块80,用于在确定该服务器中存在注入漏洞之后,输出报警提示信息,该报警提示信息用于提示该服务器中存在该注入漏洞。在一种可能的实施方式中,该输出模块80还用于在确定该服务器中不存在该注入漏洞时,输出安全提示信息,该安全提示信息可以用于提示该服务器已被检测且不存在该注入漏洞。

具体实现中,上述注入漏洞检测装置可通过上述各个模块执行上述图2或者图4所提供的实现方式中各个步骤所提供的实现方式,实现上述各实施例中所实现的功能,具体可参见上述图2或图4所示的方法实施例中各个步骤提供的相应描述,在此不再赘述。

在本申请实施例中,注入漏洞检测装置可获取第一参数集合,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,向服务器发送n个第三请求和m个第四请求,并接收该服务器针对该n个第三请求返回的n个第三页面和针对该m个第四请求返回的m个第四页面,再获取第二参数集合,该第二参数集合包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数,当该第一参数集合中存在至少一个页面参数不在该第二参数集合中时,则确定该服务器中存在注入漏洞,可以减少误报的次数,提高检测注入漏洞的准确性。

参见图7,是本申请实施例提供的一种终端的一示意性框图。如图7所示,本申请实施例中的终端可以包括:一个或多个处理器701;一个或多个输入设备702,一个或多个输出设备703和存储器704。上述处理器701、输入设备702、输出设备703和存储器704通过总线705连接。存储器702用于存储计算机程序,该计算机程序包括程序指令,处理器701用于执行存储器702存储的程序指令。其中,上述处理器701被配置用于调用该程序指令执行:

获取第一参数集合。其中,该第一参数集合中包括第一页面和第二页面之间不同的页面参数,该第一页面为服务器针对第一逻辑类型的第一请求返回的页面,该第二页面为服务器针对第二逻辑类型的第二请求返回的页面。

上述输出设备703用于向服务器发送n个第三请求和m个第四请求。上述输入设备702,用于接收该服务器针对该n个第三请求分别返回的n个第三页面和针对该m个第四请求分别返回的m个第四页面。其中,第三请求为在用于注入漏洞检测的目标请求中插入该第一逻辑类型的任一字段得到的请求,第四请求为在该目标请求中插入该第二逻辑类型的任一字段得到的请求。

上述处理器701还被配置用于调用该程序指令执行:获取第二参数集合,该第二参数集合中包括该n个第三页面和该第一页面中每两个页面之间不同的页面参数,以及该m个第四页面和该第二页面中每两个页面之间不同的页面参数;

若该第一参数集合中存在至少一个页面参数不在该第二参数集合中,则确定该服务器中存在注入漏洞。

应当理解,在本申请实施例中,所称处理器701可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

输入设备702可以包括接收器、接收程序接口等,输出设备703可以包括发送器、发送程序接口等。

该存储器704可以包括只读存储器和随机存取存储器,并向处理器701提供指令和数据。存储器704的一部分还可以包括非易失性随机存取存储器。例如,存储器704还可以存储设备类型的信息。

具体实现中,本申请实施例中所描述的处理器701、输入设备702、输出设备703可执行本申请实施例提供的注入漏洞检测方法中所描述的实现方式,也可执行本申请实施例所描述的注入漏洞检测装置的实现方式,在此不再赘述。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时实现图2或图4所示的注入漏洞检测方法,具体细节请参照图2或图4所示实施例的描述,在此不再赘述。

上述计算机可读存储介质可以是前述任一实施例所述的注入漏洞检测装置或终端的内部存储单元,例如终端的硬盘或内存。该计算机可读存储介质也可以是该终端的外部存储设备,例如该终端上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,该计算机可读存储介质还可以既包括该终端的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该终端所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请是参照本申请实施例的方法、装置(终端)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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