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

文档序号:16381662发布日期:2018-12-22 09:32阅读:226来源:国知局
本发明涉及网络安全
技术领域
:,特别涉及一种检测sql注入漏洞的方法及装置。
背景技术
:结构化查询语言(structuredquerylanguage,sql)注入是web应用安全中的常见漏洞,也是黑客对数据库进行攻击的常用手段之一。在存在sql注入的web应用中,攻击者可利用该web应用的代码缺陷,通过将sql命令插入到任何能够影响数据库查询的应用程序参数值中,欺骗服务器执行插入的恶意sql命令,从而获取该web应用的敏感信息甚至控制该web应用的整个服务器。随着b/s模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。例如有些恶意攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得非法的数据。现有的检测sql注入漏洞方法大多会出现一定概率的漏报、误报,并且在检测过程中可能会出现有损检测,例如泄露出数据库类型,数据库版本,用户信息甚至于密码等信息。同时可能对数据库中的数据进行修改甚至删除操作,进而损害数据库中的数据。因此,需要设计精准有效的sql注入检测方法来检测sql注入漏洞,以防止sql注入攻击。技术实现要素:本公开实施例提供一种检测sql注入漏洞的方法及装置,能够减少或避免相关技术中sql注入检测的漏报或误报率,提高sql注入漏洞检测的精准性。所述技术方案如下:根据本公开实施例的第一方面,提供一种检测sql注入漏洞的方法,应用于终端,其所述方法包括:确定sql结构化查询语言语句的注入环境,所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;根据所述sql语句的注入环境生成所述sql语句的有效载荷,所述有效载荷用于指示执行对应的命令并在执行成功后返回预设字符;向服务器发送所述sql语句的有效载荷;接收所述服务器发送的反馈信息;在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。在一个可选实施例中,所述系统类型包括以下至少一种:内容管理系统cms、自动化办公系统oa;所述确定sql结构化查询语言语句的注入环境包括:接收预设指纹校验识别并确定对应的操作系统。在一个可选实施例中,所述数据库类型包括以下至少一种:mysql数据库、mssql数据库、oracle数据库。在一个可选实施例中,根据所述sql语句的注入环境生成所述sql语句的有效载荷包括:根据所述注入环境确定相对应的预设执行规则;根据所述预设执行规则,生成所述sql语句的有效载荷。本实施例公开的sql注入漏洞检测的技术方案根据注入环境的不同构造不同检测载荷进行检测,提高了通过sql注入漏洞检测的精准性。根据本公开实施例的第二方面,提供一种检测sql注入漏洞的方法,应用于服务器,其所述方法包括:接收终端发送的sql语句的有效载荷;其中,所述有效载荷根据确定的所述sql语句的注入环境生成;所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;根据所述有效载荷,执行所述有效载荷指示的对应命令;向所述终端发送执行结果的反馈信息;其中,在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。根据本公开实施例的第三方面,一种检测sql注入漏洞的装置,应用于终端,所述装置包括:确定模块、生成模块、通讯模块和判断模块;其中,所述确定模块,用于确定sql结构化查询语言语句的注入环境,所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;所述生成模块,用于根据所述sql语句的注入环境生成所述sql语句的有效载荷,所述有效载荷用于指示执行对应的命令并在执行成功后返回预设字符;所述通讯模块,用于向服务器发送所述sql语句的有效载荷;所述通讯模块,还用于接收所述服务器发送的反馈信息;所述判断模块,用于在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。在一个可选实施例中,所述确定模块确定的系统类型包括以下至少一种:内容管理系统cms、自动化办公系统oa;所述确定模块,用于确定sql结构化查询语言语句的注入环境包括:接收预设指纹校验识别并确定对应的操作系统。在一个可选实施例中,所述确定模块确定的数据库类型包括以下至少一种:mysql数据库、mssql数据库、oracle数据库。在一个可选实施例中,所述生成模块具体用于:根据所述注入环境确定相对应的预设执行规则;根据所述预设执行规则,生成所述sql语句的有效载荷。根据本公开实施例的第四方面,一种检测sql注入漏洞的装置,应用于服务器,所述装置包括:,所述装置包括:通讯模块和执行模块;其中,所述通讯模块,用于接收终端发送的sql语句的有效载荷;其中,所述有效载荷根据确定的所述sql语句的注入环境生成;所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;所述执行模块,用于根据所述有效载荷,执行所述有效载荷指示的对应命令;所述通讯模块,还用于向所述终端发送执行结果的反馈信息;其中,在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。本公开实施例的检测sql注入漏洞的方法和装置相较相关技术对不同sql注入类型、不同数据库在sql注入漏洞检测时进行区别判断,通过编写相对应的、精准的检测载荷payload来实现sql注入漏洞检测的精准性。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。图1是本公开实施例提供的一种检测sql注入漏洞的方法的流程图;图2是本公开实施例提供的一种检测sql注入漏洞的方法的流程图;图3是本公开实施例提供的一种检测sql注入漏洞的装置的逻辑层结构示意图。图4是本公开实施例提供的一种检测sql注入漏洞的装置的逻辑层结构示意图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。以下示例性实施例中出现的第一和第二仅为了区分对象便于表述,不具有任何次序或流程的限制。本公开实施例提供一种检测sql注入漏洞的方法,应用于终端,如图1所示,该检测方法包括以下步骤:101、确定sql结构化查询语言语句的注入环境,所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;102、根据所述sql语句的注入环境生成所述sql语句的有效载荷,所述有效载荷用于指示执行对应的命令并在执行成功后返回预设字符;103、向服务器发送所述sql语句的有效载荷并接收所述服务器发送的反馈信息;104、在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。本实施例公开的sql注入漏洞检测的技术方案根据注入环境的不同构造不同检测载荷进行检测,提高了通过sql注入漏洞检测的精准性。在一个可选实施例中,在生成有效检测载荷之前还包括,调用预定程序语言库,例如python库,确定注入环境的管理系统,设置url(uniformresourcelocator,统一资源定位符).在一个可选实施例中,所述系统类型包括以下至少一种:内容管理系统cms、自动化办公系统oa;所述确定sql结构化查询语言语句的注入环境包括:接收预设指纹校验识别并确定对应的操作系统。例如,通过指纹扫描鉴别fingerprint等的方法来进行指纹识别,当接收的指纹与预存储的指纹信息匹配成功,则识别出对应的内容管理系统cms或者自动办公系统oa等系统。在一个可选实施例中,所述数据库类型包括以下至少一种:mysql数据库、mssql数据库、oracle数据库。上述两个实施例公开的技术方案相较相关技术对不同sql注入类型、不同数据库在sql注入漏洞检测时进行区别判断,通过编写相对应的、精准的payload来实现sql注入漏洞检测的精准性。同时,本检测方法降低了插件编写的难度及编写的时间,从而解决了传统检测中应对突发事件不及时的问题。在一个可选实施例中,根据所述sql语句的注入环境生成所述sql语句的有效载荷包括:根据所述注入环境确定相对应的预设执行规则;根据所述预设执行规则,生成所述sql语句的有效载荷。预设规则包括以下至少一种:预设编码数据和编码方式、预设加密数据和加密方式,例如md5算法。本公开实施例提供一种检测sql注入漏洞的方法,应用于服务器,如图2所示,该检测方法包括以下步骤:201、接收终端发送的sql语句的有效载荷;其中,所述有效载荷根据确定的所述sql语句的注入环境生成;所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;202、根据所述有效载荷,执行所述有效载荷指示的对应命令;203、向所述终端发送执行结果的反馈信息;其中,在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。基于图1和2分别对应的实施例和上述可选实施例公开的技术方案,为了对本公开的
发明内容进行进一步的充分公开,以下实施例进一步公开了本发明所述的漏洞检测方法的实现过程。第一步、终端确定sql结构化查询语言语句的操作系统。首先导入预定程序语言库,例如python库,接收与原预设指纹信息匹配的目标指纹信息,识别出各预设指纹信息对应的内容管理系统cms或者自动办公系统oa等系统。第二步,终端构建初始检测载荷。根据所述sql语句的注入环境设置目标url并生成第一检测载荷。第三步,终端确定sql结构化查询语言语句的数据库类型。根据mysql、mssql、oracle等不同数据库的sql语句,将第二步初始检测载荷构建生成第二检测载荷。第四步、终端根据所述sql语句的不同的注入环境下预设的相对应的编码规则或加密规则,对第二检测载荷进行编码生成有效检测载荷。第五步、终端向服务器发送所述sql语句的有效载荷。第六步、服务器按照上述预设规则执行有效载荷指示,对有效载荷进行解析计算,并将解析计算的反馈消息发送给终端第七步、终端接收所述服务器发送的反馈信息。第六步、终端判断在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。为了更清楚来的介绍,在以下实施例中将结合不同数据库对应的sql语句生成的有效载荷payload来说明漏洞检测的实现过程。示例一、注入环境为mysql数据库时,简要实现过程如下:生成对应的有效载荷,即按照预设md5规则构建的有效载荷:xajax=livemessage&xajaxargs[0][name]=1',(select1from(selectcount(*),concat(floor(rand(0)*2),(selectmd5(233)))afrominformation_schema.tablesgroupbya)b),”,”,”,'1','127.0.0.1','2')#服务器执行所述有效载荷指示的对应命令,即服务器对上述有效载荷执行解析得到反馈信息,具体为服务器对“233”进行md5计算得到值。判断服务器sql注入漏洞:输出结果计算值e165421110ba03099a1c0393373c5b43,判断在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。示例二、注入环境为mssql数据库,简要实现过程如下:生成对应的有效载荷,即按照预设md5规则构建的有效载荷:payload='kingdee/disk/get_file.jsp?file_id=11)and1=2unionselect1,2,3,4,5,6,7,sys.fn_varbintohexstr(hashbytes('md5','1234')),9,10--'服务器执行所述有效载荷指示的对应命令,即服务器对上述有效载荷执行解析得到反馈信息,具体为服务器对“1234”进行md5计算。判断服务器sql注入漏洞:输出结果计算值md5(1234),判断在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。示例二、注入环境为oracle数据库,简要实现过程如下:生成对应的有效载荷,即按照预设md5规则构建的有效载荷:fereport/chartlist.jsp?delid=1&reportid=1unionallselectnull,null,null,null,null,null,null,null,null,null,null,null,null,null,bvuegrsycgaonod,null,null,nullfromdual--由于oracle中对输入md5值实现起来较为复杂,这里采用连续输出几个随机的字符来使判断字符串随机化。也就是对一个字符串进行编码后。转换后的有效载荷payload为:fereport/chartlist.jsp?delid=1&reportid=1unionallselectnull,null,null,null,null,null,null,null,null,null,null,null,null,null,chr(98)||chr(118)||chr(117)||chr(101)||chr(103)||chr(114)||chr(115)||chr(121)||chr(99)||chr(103)||chr(97)||chr(111)||chr(110)||chr(111)||chr(100),null,null,nullfromdual—服务器执行上述转化后的有效载荷指示的对应命令进行解析。判断服务器sql注入漏洞:输出结果bvuegrsycgaonod,则判断在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。上述实施例公开的sql注入漏洞检测的技术方案通过对payload进行编码或加密的方式,报错和有回显类注入使用的是编码或加密后的数据来判断,直接在结果中输出一个编码或加密后的值,例如md5。而不会将数据库信息或者数据库中的内容返回到页面显示出来,造成信息泄露和数据库相关数据泄露,实现了注入检测过程中数据保密,防止了恶意攻击对数据的篡改,从而达到无损检测。基于上述图1相应的实施例中所描述的检测文件上传漏洞的方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。所述实施例提供一种漏洞检测装置,如图3所示,该装置包括:301确定模块、302生成模块、303通讯模块和304判断模块;其中,所述确定模块,用于确定sql结构化查询语言语句的注入环境,所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;所述生成模块,用于根据所述sql语句的注入环境生成所述sql语句的有效载荷,所述有效载荷用于指示执行对应的命令并在执行成功后返回预设字符;所述通讯模块,用于向服务器发送所述sql语句的有效载荷;所述通讯模块,还用于接收所述服务器发送的反馈信息;所述判断模块,用于在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。在一个可选实施例中,所述确定模块确定的系统类型包括以下至少一种:内容管理系统cms、自动化办公系统oa;所述确定模块,用于确定sql结构化查询语言语句的注入环境包括:接收预设指纹校验识别并确定对应的操作系统。在一个可选实施例中,所述确定模块确定的数据库类型包括以下至少一种:mysql数据库、mssql数据库、oracle数据库。在一个可选实施例中,所述生成模块具体用于:根据所述注入环境确定相对应的预设执行规则;根据所述预设执行规则,生成所述sql语句的有效载荷。基于上述图2相应的实施例中所描述的检测文件上传漏洞的方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。所述实施例提供一种漏洞检测装置,如图4所示,该装置包括::401通讯模块和402执行模块;其中,通讯模块,用于接收终端发送的sql语句的有效载荷;其中,所述有效载荷根据确定的所述sql语句的注入环境生成;所述sql语句的注入环境用于指示所述sql语句待注入的系统类型、数据库类型中的至少一项;执行模块,用于根据所述有效载荷,执行所述有效载荷指示的对应命令;通讯模块,还用于向所述终端发送执行结果的反馈信息;其中,在所述反馈信息包含所述预设字符时,确定所述服务器存在漏洞。基于上述图1和2分别对应的实施例中所描述的检测sql注入漏洞的方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:readonlymemory,rom)、随机存取存储器(英文:randomaccessmemory,ram)、cd-rom、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1和2分别对应的实施例中所描述的数据传输方法,此处不再赘述。本公开实施例的检测sql注入漏洞的方法和装置相较相关技术对不同sql注入类型、不同数据库在sql注入漏洞检测时进行区别判断,通过编写相对应的、精准的有效检测载荷payload来实现sql注入漏洞检测的精准性。同时,本实施例公开的sql注入漏洞检测的技术方案通过对有效检测载荷payload进行编码或加密的方式,报错和有回显类注入使用的是编码或加密后的数据来判断,不会泄露数据库相关数据,实现了注入检测过程中数据保密,防止了恶意攻击对数据的篡改,从而达到无损检测。同时本检测方法降低了插件编写的难度及编写的时间,从而解决了传统检测中应对突发事件不及时的问题。本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1