发明内容
本发明实施例针对现有技术缺陷,提供一种数据库类型的识别方法和装置,以快速准确地识别服务器的数据库类型。
本发明实施例提供一种数据库类型的识别方法,包括:
识别待进行sql注入漏洞检测的web系统的开发语言,根据语言-类型概率表获取与所述开发语言对应的、概率由大到小的数据库类型排序信息;所述语言-类型概率表包括多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率;
按照所述排序信息的顺序,应用与待识别数据库类型对应的第一标识进行所述web系统数据库类型的识别;其中,所述识别的过程包括:
在用户输入数据后面添加所述第一标识,分别获取仅提交所述用户输入数据而返回的第一页面信息,以及提交添加有所述第一标识的用户输入数据而返回的第二页面信息,根据所述第一页面信息与所述第二页面信息是否相同,判断所述web系统的数据库类型是否为所述待识别数据库类型。
如上所述的方法,其中,所述第一标识为内置函数或变量或表达式。
如上所述的方法,其中,所述根据所述第一页面信息与所述第二页面信息是否相同,判断所述web系统的数据库类型是否为所述待识别数据库类型包括:
在获知所述第一页面信息与所述第二页面信息相同之后,继续在所述用户输入数据后面添加与所述待识别数据库类型对应的第二标识,获取提交添加有所述第二标识的用户输入数据而返回的第三页面信息,若所述第一页面信息与所述第三页面信息相同,则识别出所述web系统的数据库类型为所述待识别数据库类型。
如上所述的方法,其中,所述第二标识为内置函数或变量或表达式。
如上所述的方法,其中,所述方法还包括:获取各种数据库类型应用各种开发语言进行开发的概率,生成所述语言-类型概率表。
本发明实施例提供一种数据库类型的识别装置,包括:
第一识别模块,用于识别待进行sql注入漏洞检测的web系统的开发语言,根据语言-类型概率表获取与所述开发语言对应的、概率由大到小的数据库类型排序信息并发送给第二识别模块;所述语言-类型概率表包括多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率;
第二识别模块,用于按照所述第一识别模块发送的所述排序信息的顺序,应用与待识别数据库类型对应的第一标识进行所述web系统数据库类型的识别;其中,所述识别的过程包括:
在用户输入数据后面添加所述第一标识,分别获取仅提交所述用户输入数据而返回的第一页面信息,以及提交添加有所述第一标识的用户输入数据而返回的第二页面信息,根据所述第一页面信息与所述第二页面信息是否相同,判断所述web系统的数据库类型是否为所述待识别数据库类型。
如上所述的识别装置,其中,所述第一标识为内置函数或变量或表达式。
如上所述的识别装置,其中,所述第二识别模块还用于:
在获知所述第一页面信息与所述第二页面信息相同之后,继续在所述用户输入数据后面添加与所述待识别数据库类型对应的第二标识,获取提交添加有所述第二标识的用户输入数据而返回的第三页面信息,若所述第一页面信息与所述第三页面信息相同,则识别出所述web系统的数据库类型为所述待识别数据库类型。
如上所述的识别装置,其中,所述第二标识为内置函数或变量或表达式。
如上所述的识别装置,其中,还包括:生成模块,用于获取各种数据库类型应用各种开发语言进行开发的概率,并生成所述语言-类型概率表。
本发明实施例提供的数据库类型的识别方法和装置,基于web应用程序和其对应数据库类型的概率统计进行数据库识别预处理,并基于数据库的对应标识来识别数据库类型,有效地提高了数据库类型识别的效率和概率,提高了sql注入漏洞扫描系统整体的执行效率。
具体实施方式
在进行sql注入漏洞检测的过程中,当服务器没有返回数据库错误信息的情况下,识别数据库类型需要利用不同类型数据库的注入规则进行注入,然后根据服务器的返回页面判断数据库类型,由于需要遍历每种数据库的注入规则,这样在识别数据库类型阶段会很耗时。针对现有sql注入漏洞扫描系统中对数据库类型识别的效率和概率较低的缺陷,本发明各实施例提供一种解决方案,即本发明实施例提供一种基于web应用和其对应数据库类型的概率统计模型进行数据库识别预处理,并基于数据库的对应标识来识别数据库类型的有效方法和装置。应用本发明实施例可以有效地提高数据库类型识别的效率和概率,提高sql注入漏洞扫描系统整体的执行效率。
图1为本发明数据库类型的识别方法实施例流程示意图,如图1所示,该方法包括:
步骤100、识别待进行sql注入漏洞检测的web系统的开发语言,根据语言-类型概率表获取与所述开发语言对应的、概率由大到小的数据库类型排序信息;
本发明实施例中,在对一待进行sql注入漏洞检测的web系统(以下简称:待测web系统)服务器的数据库类型进行识别的过程中,首先进行数据库类型识别的预处理,具体可以包括首先通过察看源代码等现有技术识别出该待测web系统的开发语言,然后基于开发语言在预先维护的语言-类型概率表中进行查找,获取到与该开发语言对应的、概率由大到小的数据库类型排序信息。所述的语言-类型概率表可以是sql注入漏洞扫描系统之前通过调用所获取到的各种数据库类型应用各种开发语言进行开发的概率而生成的。
本发明实施例中,sql注入漏洞扫描系统可以维护一个语言-类型概率表,该语言-类型概率表中包括如下信息:多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率。该语言-类型概率表可以通过对常用的web应用程序所用数据库的调研统计分析获得,如表1所示。
表1
本实施例中,表1中的数值是针对j sp、php、asp及asp.net的web应用程序开发经常搭配的数据库类型的概率。例如应用asp开发的web应用程序中选用access类型的数据库的概率为50%,选用sqlserver类型的数据库的概率为40%等。根据表1调研获得的web应用程序的四类常用开发语言和数据库类型对应关系进行建模,针对jsp、php、asp及asp.net等四种web开发语言,建立对应关系的模型如图2所示。例如从中可以得出与asp对应的、概率由大到小的数据库类型排序信息既为access—>sqlserver—>mysql—>oracle。当sql注入漏洞扫描系统识别出web应用程序的开发语言为表1所列的一种开发语言时,则可以将其对应数据库的类型按照概率进行大小排序,并根据排序的数据库类型进行依次验证,这样会大大提高数据库类型识别的效率。
步骤101、按照所述排序信息的顺序,应用与待识别数据库类型对应的第一标识进行所述web系统数据库类型的识别。
针对不同的待测web系统,分析出待测web系统的开发语言,若属于语言-类型概率表中的一种开发语言,则根据该开发语言所对应的数据库列表依次调用数据库识别子模块进行类型识别。当识别出数据库类型时,将不再调用其他未调用的数据库识别子模块,可以退出调用过程。每种类型的数据库对应一个利用其能够唯一对应的第一标识进行数据库识别的数据库识别子模块。该子模块可以利用每种类型的数据库特有的第一标识例如内置函数或变量或表达式进行注入检测,并根据服务器的页面返回判断其数据库的类型。
具体的识别过程可以为,概率最大的数据库类型(即待识别数据库类型)所对应的数据库识别子模块在用户输入数据后面添加与待识别数据库类型唯一对应的第一标识(包括内置函数或变量或表达式),然后分别获取仅提交用户输入数据而返回的第一页面信息,以及提交添加有第一标识的用户输入数据而返回的第二页面信息,根据第一页面信息与第二页面信息是否相同,判断所述待测web系统的数据库类型是否为所述待识别数据库类型。当第一页面信息与第二页面信息相同,则可以判定所述待测web系统的数据库类型为待识别数据库类型。当第一页面信息与第二页面信息不相同时,则可以根据概率由大到小的数据库类型排序信息依次进行识别,直到识别出所述待测web系统的数据库类型。
本发明实施例提供的数据库类型的识别方法,基于web应用程序和其对应数据库类型的概率统计进行数据库识别预处理,并基于数据库的对应标识来识别数据库类型,有效地提高了数据库类型识别的效率和概率;数据库类型识别的概率和效率提高后,根据识别的数据库类型可对sql盲注的注入规则进行排序,从而提高了sql盲注的效率。因此,提高了sql注入扫描系统的整体执行效率。
为了进一步准确地识别出服务器的数据库类型,在上述方法实施例中,在获知第一页面信息与第二页面信息相同之后,本发明实施例还可以继续在用户输入数据后面添加与待识别数据库类型能够唯一对应的第二标识(包括内置函数或变量或表达式),获取提交添加有第二标识的用户输入数据而返回的第三页面信息,若第一页面信息与第三页面信息相同,则可以确认web系统的数据库类型即为待识别数据库类型。
以下以mysql类型为例,详细介绍一下识别过程。图3为本发明数据库识别过程实施例示意图,如图3所示,该方法包括:
步骤300、获取用户通过客户端输入的用户输入数据,获取提交所述用户输入数据服务器返回的第一页面信息;
步骤301、在所述用户输入数据后面添加永真值,例如mysql的内置函数and connection_id()=connection_id();
步骤302、获取提交添加有永真值的所述用户输入数据后,服务器返回的第二页面信息;
步骤303、对比第一页面信息和第二页面信息是否相同,若相同,则执行步骤304;若不同,则确定待测web系统的数据库类型不是mysql类型,并按照概率由大到小的数据库类型排序信息重新选择下一个待识别数据库类型并返回执行步骤300;
步骤304、在所述用户输入数据后面添加另一个永真值,例如mysql的内置函数and user()=user();
步骤305、获取提交添加有另一个永真值的用户输入数据后,服务器返回的第三页面信息;
步骤306、对比第一页面信息和第三页面信息是否相同,若相同,则确定待测web系统的数据库类型是mysql类型;若不同,则确定待测web系统的数据库类型不是mysql类型,并按照概率由大到小的数据库类型排序信息重新选择下一个待识别数据库类型并返回执行步骤300。
在数据库类型识别过程中,通过如图2所示模型的基础上,调用数据库识别子模块的方法,相比较现有的没有优先顺序调用识别子模块的方法,在效率上有很大的提高。本发明实施例利用数据库的内置函数或变量或表达式的方法可以简单有效的识别出数据库的类型。以下列举其它数据库类型在该流程中所采用的内置函数或变量或表达式,详见表2。
表2
本发明实施例提供的数据库类型的识别方法,通过对常用的web应用程序开发语言(例如asp、j sp、php及asp.net)和常搭配的数据库类型进行配对建模,然后对数据库对应的识别子模块的调用顺序进行排序,提高了数据库识别的效率;在利用数据库内置函数、变量或表达式时,采用在注入参数后面添加“永真值”(比如“and connection_id()=connection_id()”)的方式,然后判断页面返回是否跟原始页面一致的方法,该方法能更精确地判断数据库类型,提高了数据库类型识别的效率。
图4为本发明数据库类型的识别装置实施例结构示意图,如图4所示,该装置包括第一识别模块41和第二识别模块,其中,第一识别模块41用于识别待进行sql注入漏洞检测的web系统的开发语言,根据语言-类型概率表获取与所述开发语言对应的、概率由大到小的数据库类型排序信息并发送给第二识别模块;所述语言-类型概率表包括多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率;第二识别模块42用于按照所述第一识别模块发送的所述排序信息的顺序,应用与待识别数据库类型对应的第一标识进行所述web系统数据库类型的识别;其中,所述识别的过程包括:在用户输入数据后面添加所述第一标识,分别获取仅提交所述用户输入数据而返回的第一页面信息,以及提交添加有所述第一标识的用户输入数据而返回的第二页面信息,根据所述第一页面信息与所述第二页面信息是否相同,判断所述web系统的数据库类型是否为所述待识别数据库类型。
具体地,在对待测web系统的服务器的数据库类型进行识别的过程中,首先通过第一识别模块41进行数据库类型识别的预处理,预处理过程包括首先通过察看源代码等现有技术获取到该待测web系统的开发语言,然后基于开发语言在预先维护的语言-类型概率表中进行查找,获取到与该开发语言对应的、概率由大到小的数据库类型排序信息。所述的语言-类型概率表中包括如下信息:多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率。然后通过第二识别模块42根据该开发语言所对应的数据库列表依次调用数据库识别子模块进行类型识别,具体是通过添加永真值(包括内置函数或变量或表达式)的方式,对比前后页面是否一致。
进一步地,第二识别模块42还用于在获知所述第一页面信息与所述第二页面信息相同之后,继续在所述用户输入数据后面添加与所述待识别数据库类型对应的第二标识(包括内置函数或变量或表达式),获取提交添加有所述第二标识的用户输入数据而返回的第三页面信息,若所述第一页面信息与所述第三页面信息相同,则识别出所述web系统的数据库类型为所述待识别数据库类型。
在上述装置实施例的基础上,还可以包括生成模块43用于获取各种数据库类型应用各种开发语言进行开发的概率,并生成所述语言-类型概率表。
本发明实施例提供的数据库类型识别方法和装置不仅可用在sql注入漏洞扫描系统开发中,也可将其应用于多漏洞检测的web扫描系统的开发,还可应用于渗透测试中人工进行sql注入漏洞的检测过程。
本发明实施例提供的数据库类型的识别装置,基于web应用程序和其对应数据库类型的概率统计进行数据库识别预处理,并基于数据库的对应标识来识别数据库类型,有效地提高了数据库类型识别的效率和概率;数据库类型识别的概率和效率提高后,根据识别的数据库类型可对sql盲注的注入规则进行排序,从而提高了sql盲注的效率。因此,提高了sql注入扫描系统的整体执行效率。
本发明另一个实施例提供一种数据库类型的识别装置,包括处理器,所述处理器用于识别待进行sql注入漏洞检测的web系统的开发语言,根据语言-类型概率表获取与所述开发语言对应的、概率由大到小的数据库类型排序信息;所述语言-类型概率表包括多种开发语言、多种数据库类型以及各种数据库类型应用各种开发语言进行开发的概率;按照所述排序信息的顺序,应用与待识别数据库类型对应的第一标识进行所述web系统数据库类型的识别;其中,所述识别的过程包括:在用户输入数据后面添加所述第一标识,分别获取仅提交所述用户输入数据而返回的第一页面信息,以及提交添加有所述第一标识的用户输入数据而返回的第二页面信息,根据所述第一页面信息与所述第二页面信息是否相同,判断所述web系统的数据库类型是否为所述待识别数据库类型。
在本发明所提供的若干实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。