一种漏洞检测方法、装置、电子设备及存储介质与流程

未命名 08-26 阅读:105 评论:0
1.本技术涉及网络安全
技术领域
:,具体而言,涉及一种漏洞检测方法、装置、电子设备及存储介质。
背景技术
::2.sql注入(sqlinjection)是发生在web程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在web应用程序中事先定义好的sql语句中添加额外的sql语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。简而言之,sql注入就是在用户输入的字符串中加入sql语句,如果在设计不良的程序中忽略了检查,那么这些注入的sql语句就会被数据库服务器误认为是正常的sql语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据。3.常规的检测方法都是通过人工review代码的方式来防止代码sql注入问题,需要耗费大量的人力资源,而且因为开发的人员的代码能力各不相同,对可能存在的sql注入问题,可能因为代码能力差、经验不足而导致漏排查的情况发生。技术实现要素:4.本技术实施例的目的在于提供一种漏洞检测方法、装置、电子设备及存储介质,利用探针在数据库sql执行方法中添加sql语句校验逻辑的方式来实现sql注入漏洞的检查,无需修改项目源代码且确保检查的全面性,解决了现有方法容易漏排查的问题。5.本技术实施例提供了一种漏洞检测方法,所述方法包括:6.分别获取用户参数注入前后的sql执行语句;7.基于sql语法对所述sql执行语句进行抽象语法树解析;8.根据解析结果判断是否存在sql注入漏洞。9.在上述实现过程中,利用探针在数据库sql执行方法中添加sql语句校验逻辑的方式来实现sql注入漏洞的检查,无需修改项目源代码,因为所有的sql语句的执行都会到进入到jdbc的executeupdate或者executequery函数,因此该方法确保了检查的全面性,解决了现有方法容易漏排查的问题。10.进一步地,在所述分别获取用户参数注入前后的sql执行语句的步骤之前,所述方法还包括:11.将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。12.在上述实现过程中,在检测之前,需要将检测探针对应的源码添加至待检测源码,即将探针项目打包,依附到需要检查的主程序上去,使得两者同步运行。13.进一步地,所述将检测探针源码添加至待检测源码,以与所述待检测源码同步运行,包括:14.获取待检测源码;15.将所述待检测源码编译成项目jar包;16.接收用户创建的检测探针源码;17.在所述待检测源码的数据库sql执行方法中添加检测探针;18.将所述检测探针源码编译成探针jar包;19.将所述探针jar包添加至所述项目jar包,以与所述项目jar包同步启动运行。20.在上述实现过程中,将检测探针对应的sql语句校验逻辑添加到数据库sql执行方法中,以实现漏洞检测。21.进一步地,所述根据解析结果判断是否存在sql注入漏洞,包括:22.若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析出错,则存在sql注入漏洞。23.在上述实现过程中,将获取到的sql执行语句,通过sql语法进行抽象语法树解析,如果解析出错,则表明该sql执行语句中可能存在因为传入异常数据导致的sql语句出错,即可能存在sql注入问题。24.进一步地,所述根据解析结果判断是否存在sql注入漏洞,包括:25.若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;26.对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;27.将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;28.若所述关键字段一致,则不存在sql注入漏洞。29.在上述实现过程中,可根据注入前后的关键字段对比,可确定是否有sql注入,若有sql注入,即可能存在漏洞。30.本技术实施例提供一种漏洞检测装置,所述装置包括:31.数据获取模块,用于分别获取用户参数注入前后的sql执行语句;32.解析模块,用于基于sql语法对所述sql执行语句进行抽象语法树解析;33.判断模块,用于根据解析结果判断是否存在sql注入漏洞。34.在上述实现过程中,利用探针在数据库sql执行方法中添加sql语句校验逻辑的方式来实现sql注入漏洞的检查,无需修改项目源代码,因为所有的sql语句的执行都会到进入到jdbc的executeupdate或者executequery函数,因此该方法确保了检查的全面性,解决了现有方法容易漏排查的问题。35.进一步地,所述装置还包括:36.探针添加模块,用于将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。37.在上述实现过程中,在检测之前,需要将检测探针对应的源码添加至待检测源码,即将探针项目打包,依附到需要检查的主程序上去,使得两者同步运行。38.进一步地,所述判断模块包括:39.注入后列表获取模块,用于若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;40.注入前列表获取模块,用于对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;41.对比模块,用于将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;42.判定模块,用于若所述关键字段一致,则不存在sql注入漏洞。43.在上述实现过程中,可根据注入前后的关键字段对比,可确定是否有sql注入,若有sql注入,即可能存在漏洞。44.本技术实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行上述中任一项所述的漏洞检测方法。45.本技术实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述中任一项所述的漏洞检测方法。附图说明46.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。47.图1为本技术实施例提供的一种漏洞检测方法的流程图;48.图2为本技术实施例提供的漏洞检测的具体实现流程图;49.图3为本技术实施例提供的检测探针添加流程图;50.图4为本技术实施例提供的具体的漏洞判断流程图;51.图5为本技术实施例提供的一种漏洞检测装置的结构框图;52.图6为本技术实施例提供的另一种漏洞检测装置的结构框图。53.图标:54.100-数据获取模块;101-探针添加模块;200-解析模块;300-判断模块;301-第一判定模块;302-注入后列表获取模块;303-注入前列表获取模块;304-对比模块;305-第二判定模块。具体实施方式55.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。56.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。57.实施例158.请参看图1,图1为本技术实施例提供的一种漏洞检测方法的流程图。该方法具体包括以下步骤:59.步骤s100:分别获取用户参数注入前后的sql执行语句;60.步骤s200:基于sql语法对所述sql执行语句进行抽象语法树解析;61.步骤s300:根据解析结果判断是否存在sql注入漏洞。62.该方法通过比较用户参数注入前后的抽象语法树的关键字段来判断是否存在sql注入,从而进行漏洞检测。如图2所示,为漏洞检测的具体实现流程图。63.如图3所示,为检测探针添加流程图,具体地,在步骤s100之前,该方法还包括以下步骤:64.将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。65.具体包括:66.步骤s101:获取待检测源码;67.示例地,可以从项目代码管理平台通过gitclone命令获取项目源码,即为待检测源码。68.步骤s102:将所述待检测源码编译成项目jar包;69.具体地,可通过mvncleanpackage命令将项目源码编译成能够独立运行的jar包或者war包。70.步骤s103:接收用户创建的检测探针源码;71.用户可创建java探针项目,在java探针项目中基于javainstrumentationapi创建java探针文件和方法,即为检测探针源码,用于漏洞检测。72.步骤s104:在所述待检测源码的数据库sql执行方法中添加检测探针;73.通过重写premain的方法,实现在java程序还没有开始运行之前先运行该方法体内容,在该方法体内通过aop(面向切面编程)的方法对程序中的数据库访问层jdbc中的数据库执行相关方法(如executeupdate[可以执行数据insertdelete相关语句],executequery[可以执行数据库select查询语句]),在两种数据库的sql执行方法中添加sql语句校验检查逻辑,记录当前执行的sql语句,并对该sql语句是否存在注入风险进行校验。[0074]步骤s105:将所述检测探针源码编译成探针jar包;[0075]具体地,通过mvncleanpackage命令将java探针项目构建编译成能独立运行的jar包。[0076]步骤s106:将所述探针jar包添加至所述项目jar包,以与所述项目jar包同步启动运行。[0077]在通过jar命令运行项目jar包时,同时添加javaagentjava探针项目的jar包命令使java探针项目attach到jar项目上一起启动,即将java探针项目打包,依附到需要检测的主程序(项目jar包)上去。[0078]对程序中可能存在的数据库操作接口进行sql注入测试。[0079]用户参数即在数据库操作接口增加可能导致数据库sql注入的输入例如,添加deletetable等危险sql操作,查询条件中增加or等语法关键字扩大查询范围。[0080]如图4所示,为具体的漏洞判断流程图,步骤s300具体包括以下步骤:[0081]步骤s301:若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析出错,则存在sql注入漏洞;[0082]检测探针通过aop切面获取executeupdate和executequery函数中的sql执行语句,将获取到的sql执行语句,通过sql语法进行抽象语法树解析,如果解析出错,则表明该语句中可能存在因为传入异常数据导致的sql语句出错,进而导致sql无法执行的sql注入问题。[0083]步骤s302:若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;[0084]通过sql语法进行抽象语法树解析,如果解析成功,则继续分析解析后的抽象语法树,分析抽象语法树中的ddlcomamnt节点和dmlcomant节点。[0085]步骤s303:对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;[0086]同时对未注入用户参数的sql执行语句基于sql语法进行抽象语法树解析,分析抽象语法树中的ddlcomamnt节点和dmlcomant节点。[0087]步骤s304:将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;[0088]步骤s305:若所述关键字段一致,则不存在sql注入漏洞。[0089]将注入了用户参数的sql语句中的ddlcommamnd节点和dmlcommand节点与没有注入用户参数的sql语中的ddlcommamnd和dmlcommand节点进行对比,对比节点下的keyword,如果keyword一致,则表明不存在sql注入,否则说明存在sql注入漏洞。[0090]该方法基于java探针的方式,利用aop(面向切面编程)对程序中的数据库访问层jdbc中的数据库执行相关方法(executeupdate[可以执行数据insertdelete相关语句],executequery[可以执行数据库select查询语句]),在两种数据库的sql执行方法中添加sql语句校验检查逻辑的方式实现sql注入漏洞的检测。因此该方法能够在不修改源代码的前提下实现sql注入漏洞的检测;因为所有的sql语句的执行都会到进入到jdbc的executeupdate或者executequery函数,因此,该方法能够确保sql注入漏洞的检测的全面性。[0091]实施例2[0092]本技术实施例提供一种漏洞检测装置,应用于实施例1所述的漏洞检测方法,如图5所示,为一种漏洞检测装置的结构框图,该装置包括但不限于:[0093]数据获取模块100,用于分别获取用户参数注入前后的sql执行语句;[0094]解析模块200,用于基于sql语法对所述sql执行语句进行抽象语法树解析;[0095]判断模块300,用于根据解析结果判断是否存在sql注入漏洞。[0096]如图6所示,为另一种漏洞检测装置的结构框图,所述装置还包括:[0097]探针添加模块101,用于将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。[0098]具体地:[0099]获取待检测源码;[0100]将所述待检测源码编译成项目jar包;[0101]接收用户创建的检测探针源码;[0102]在所述待检测源码的数据库sql执行方法中添加检测探针;[0103]将所述检测探针源码编译成探针jar包;[0104]将所述探针jar包添加至所述项目jar包,以与所述项目jar包同步启动运行。[0105]所述判断模块300包括:[0106]第一判定模块301,用于若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析出错,则存在sql注入漏洞;[0107]注入后列表获取模块302,用于若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;[0108]注入前列表获取模块303,用于对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;[0109]对比模块304,用于将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;[0110]第二判定模块305,用于若所述关键字段一致,则不存在sql注入漏洞。[0111]该装置利用探针在数据库sql执行方法中添加sql语句校验逻辑的方式来实现sql注入漏洞的检查,无需修改项目源代码,因为所有的sql语句的执行都会到进入到jdbc的executeupdate或者executequery函数,因此该方法确保了检查的全面性,解决了现有方法容易漏排查的问题。[0112]本技术实施例还提供一种电子设备,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行实施例1所述的漏洞检测方法。[0113]本技术实施例还提供一种可读存储介质,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行实施例1所述的漏洞检测方法。[0114]在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。[0115]另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。[0116]所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0117]以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。[0118]以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。[0119]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。当前第1页12当前第1页12
技术特征:
1.一种漏洞检测方法,其特征在于,所述方法包括:分别获取用户参数注入前后的sql执行语句;基于sql语法对所述sql执行语句进行抽象语法树解析;根据解析结果判断是否存在sql注入漏洞。2.根据权利要求1所述的漏洞检测方法,其特征在于,在所述分别获取用户参数注入前后的sql执行语句的步骤之前,所述方法还包括:将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。3.根据权利要求2所述的漏洞检测方法,其特征在于,所述将检测探针源码添加至待检测源码,以与所述待检测源码同步运行,包括:获取待检测源码;将所述待检测源码编译成项目jar包;接收用户创建的检测探针源码;在所述待检测源码的数据库sql执行方法中添加检测探针;将所述检测探针源码编译成探针jar包;将所述探针jar包添加至所述项目jar包,以与所述项目jar包同步启动运行。4.根据权利要求1所述的漏洞检测方法,其特征在于,所述根据解析结果判断是否存在sql注入漏洞,包括:若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析出错,则存在sql注入漏洞。5.根据权利要求1所述的漏洞检测方法,其特征在于,所述根据解析结果判断是否存在sql注入漏洞,包括:若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;若所述关键字段一致,则不存在sql注入漏洞。6.一种漏洞检测装置,其特征在于,所述装置包括:数据获取模块,用于分别获取用户参数注入前后的sql执行语句;解析模块,用于基于sql语法对所述sql执行语句进行抽象语法树解析;判断模块,用于根据解析结果判断是否存在sql注入漏洞。7.根据权利要求6所述的漏洞检测装置,其特征在于,所述装置还包括:探针添加模块,用于将检测探针源码添加至待检测源码,以与所述待检测源码同步运行。8.根据权利要求7所述的漏洞检测装置,其特征在于,所述判断模块包括:注入后列表获取模块,用于若对所述用户参数注入后的sql执行语句进行抽象语法树解析时,解析成功,则分析解析后的抽象语法树,以获得抽象语法树中的注入后ddlcomamnt/dmlcomant列表;
注入前列表获取模块,用于对所述用户参数注入前的sql执行语句进行抽象语法树解析,获得解析后的抽象语法树中的注入前ddlcomamnt/dmlcomant列表;对比模块,用于将所述注入后ddlcomamnt/dmlcomant列表和所述注入前ddlcomamnt/dmlcomant列表进行关键字段对比;判定模块,用于若所述关键字段一致,则不存在sql注入漏洞。9.一种电子设备,其特征在于,所述电子设备包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行计算机程序以使所述电子设备执行根据权利要求1至5中任一项所述的漏洞检测方法。10.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行权利要求1至5任一项所述的漏洞检测方法。

技术总结
本申请实施例提供一种漏洞检测方法、装置、电子设备及存储介质,涉及网络安全技术领域。该方法包括分别获取用户参数注入前后的SQL执行语句;基于SQL语法对所述SQL执行语句进行抽象语法树解析;根据解析结果判断是否存在SQL注入漏洞。该方法利用探针在数据库SQL执行方法中添加SQL语句校验逻辑的方式来实现SQL注入漏洞的检查,无需修改项目源代码且确保检查的全面性,解决了现有方法容易漏排查的问题。问题。问题。


技术研发人员:周小亮
受保护的技术使用者:平安银行股份有限公司
技术研发日:2023.06.06
技术公布日:2023/8/24
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐