专利名称:一种sql注入漏洞检测方法及系统的制作方法
技术领域:
本发明涉及一种SQL ( Structured Queiy Language)注入漏洞4企测方法及系 统,是一种电数字数据处理,阻止越权使用的保护方法及系统,应用于网络系 统中,属于一种作为网络安全重要产品之一的主机脆弱性扫描系统的关键技 术。
背景技术:
随着Internet的发展,客户端/服务器(B/S)模式得到了越来越广泛的应用。 B/S模式中经常出现用户与后台数据库服务器之间进行数据交互的地方,即用 户在客户端的网页上通"单输入并提交数据,服务端的应用程序根据用户提 交的数据构造SQL语句,提交到数据库服务器进行处理,并向用户返回处理 结果。在开发B/S模式的应用程序时,许多开发者忽略了对用户输入数据的合 法性进行判断,使应用程序存在安全隐患。攻击者可以提交一段数据库查询代 码,根据程序返回的结果,窃取某些他想得知的数据,这就是SQL注入(SQL Injection)攻击4支术,攻击者所利用的网页漏洞称为SQL注入漏洞。
目前的主机脆弱性扫描系统主要关注目标主机在TCP/IP端口的分配、开 放的服务、服务软件版本和这些服务及软件呈现在Internet上的安全漏洞,较 少关注该网站某个具体网页上的SQL注入漏洞。之前也有关于SQL注入漏洞 检测的技术和工具,主要有以下两种运行方式
1. 通过精心构造特殊的访问请求去尝试引起数据库服务器运行出错,根据 服务器返回的状态码(status code)判断其运行是否出错,从服务器返回的错 误提示信息中获取感兴趣的内容。
2. 首先制订关键字列表,然后构造特殊的SQL注入攻击语句并提交到数据库服务器,根据服务器返回的内容和关键字列表判断服务器运行是否出错,
若出错则存在SQL注入漏洞。
但这两种检测技术存在以下局限性
1. 依靠服务器返回状态码来判断是否存在漏洞的方法过于筒单,而且当服 务器端通过自定义错误信息屏蔽运行错误提示时,将不能进行正常判断,从而 导致漏报。
2. 通过关键字来判断服务器运行是否出错的方法不够准确,当服务器运行 正常,但返回网页'f^出现了预定义的关键字,或者服务器运行出错,但设定 的返回内容不包括预定义的关键字时,都不能进行准确的判断,从而导致漏报 和误报。
发明内容
为克服现有技术的缺点,本发明提出一种针对HTTP (HyperText Transfer Protocol)服务器上的SQL注入漏洞进行检测的方法和系统。所述的方法首先 向服务器提交正常的访问请求数据和不同类型的SQL注入数据,接收服务器 的返回结果,然后交叉比较不同请求的返回结果,并根据比较结果判断服务器 对提交数据的处理是否存在SQL注入漏洞。并根据这种方法设计了安装在网 络用户终端的系统实现了对SQL注入漏洞的简便、有效的4全测。
本发明的目的是这样实现的
一种SQL注入漏洞检测方法,包括待-^i正网页定义单元、SQL注入攻 击模板选择单元、交叉验证单元,其特征在于所述的步骤
① 待验证网页定义单元设置待验证网页;
② 判断是否所有网页都处理完毕,是则结束,否则转步骤③;
③ 提取一个尚未处理网页;@在SQL注入攻击模板选择单元中选择攻击模板;
⑤ 依据该网页的攻击模板,构造SQL注入攻击语句,并提交到服务器;
⑥ 在交叉比较单元中对服务器返回的结果集进行交叉验证,然后转步骤②。
一种SQL注入漏洞检测系统,所述系统安装在互联网的用户终端上,其 特征在于,至少有一个与网络服务器连接的待验证网页定义单元;至少有一个 与待验证网页定义单元连接,可以提供四种攻击模板子单元的SQL注入攻击 模板选择单元,至少有一个从SQL注入攻击模板选择单元获得支持并与网络 服务器连接的交叉验证单元。
本发明产生的有益效果是
1. 可以实现对整个网站所有网页SQL注入漏洞的自动扫描。例如,用户
有包含表单项的网页,然后验证这些网页上是否存在注入漏洞。
2. 可以在服务器屏蔽运行错误提示的情况下进行SQL注入漏洞检测,避 免了因无法获取服务器返回的运行错误的状态码而导致漏报。
3. 无需制订服务器运行4晉误关键字列表,即可判断服务器的运行是否出 错,避免了因关键字列表不准确、不完备导致的误报和漏报。
4. 可以根据不同网页内容,由用户选择不同的注入攻击模板,提高了 SQL 注入漏洞检测的效率和准确性。
下面结合附图和实施例对本发明作进一步说明。 图1为SQL注入漏洞4企测方法运4亍示意图;图2为交叉验证方法运行示意图3为SQL注入漏洞检测系统结构示意图。
具体实施例方式
实施例一
本实施例为SQL注入漏洞检测方法的具体实时方式,主要运行过程如图1 所示。本实施例的基本思路是它提供了一系列SQL注入攻击模板,其中每 个模板都由数个可能导致服务器返回不同结果的SQL注入语句、该模板对应 的交叉^函数组成。对于服务器上每个待扫描的网页,本SQL注入漏洞检 测系统都会根据选定的模板,向该网页发送正常SQL访问请求、特定SQL注 入语句,并接收服务器的返回结果。由于每个访问请求都是事先构造的,若这 些访问请求能够在服务器上执行,将会返回不同的返回结果。交叉验证函数通 过相互比较这些返回结果,判断提交的SQL注入语句是否在服务器上得到了 执行。若验证的结果表明这些SQL注入语句已被服务器执行,即可断定服务 器上的应用程序对用户提交数据的处理存在SQL注入漏洞。本实施例所涉及 的硬件包括互联网、区域网、局域网、网络中提供各种网页的服务器、用户 终端等等与网络有关的设施。在用户终端中安装了 SQL注入漏洞检测系统, 该系统中包括待验证网页定义单元、SQL注入攻击模板选择单元、交叉验证 单元。
本实施例的具体过程是
(1) 设置待-5Hi网页;
(2) 判断是否所有网页都处理完毕,是则结束,否则转步骤3;
(3) 提^L一个尚未处理的网页;
(4 )依据该网页的攻击模板,构造SQL注入攻击语句,并提交到服务器;
(5 )对服务器返回的结果集进行交叉验证,然后转步骤2。 设置待-^S正网页的过程是选择要验证的网页,通常需要验证的网页有三种 情况验证所有的网页;验证一些有特殊属性的网页;用户特定的网页。或可 以解释为自动、半自动、手动设置三种,对应这三种情况设置待验证网页有三 种方法
1. 通过网页爬虫程序检测目标网站的所有网页,抽取包含表单内容和 需要^:交Cookie (服务器传送到客户端本地的小的数据文件)的网页,构成待 验证网页链表。这是因为SQL注入漏洞一般存在于处理用户提交的表单数据 或客户端提交的Cookie数据的程序中,因此通常情况下需要—5Ht含有表单内 容的网页。这是一种自动^殳置网页的方法。
2. 提供浏览器插件,用户在浏览器插件中手动点击待验证的网页,后 台处理程序抽取包含表单内容和需要提交Cookie的网页,构成待验证网页链 表。这是一种半自动i殳置网页的方法。
3. 由用户手工输入待-^ii的网页。用户能够添加可能存在SQL注入漏 洞的网页,并能修改和删除网页爬虫程序的结果。这是手动^:置网页的方法。
依据设定的网页的在数据库中提起相应的攻击模板,攻击模板有四种不 同的攻击模板选择模板、插入模板、修改模板和删除模板,每个模板由针对 该种操作的SQL注入攻击模式、返回结果交叉验证函数组成。
交叉验证是本实施例的关键部分,用以判断待验证网页上是否存在SQL 注入漏洞。交叉验"ii方法,如图2所示
①向待验证网页提交正常的访问数据,并接收返回结果;② 判断当前攻击模板中是否存在尚未使用的SQL注入模式,是则转步骤 ③,否则转步骤⑥;
③ 从当前攻击模板中提取一个尚未使用的SQL注入模式,将其附加在步 骤①中的正常访问数据后面,构成SQL注入访问语句并提交至服务器;
判断服务器的返回状态码是否正常,是则转步骤⑤,否则转步骤⑧; 保存服务器的返回内容,转步骤②;
⑥ 调用该攻击模板中的交叉验证函数,对服务器的正常返回结果和异常 返回结果进行交叉比较;
⑦ 根据交叉比较的结果判断步骤③中构造的SQL注入访问语句是否在服 务器上被执行,是则转步骤⑧,否则转步骤⑨;
⑧ 判定待验证网页存在SQL注入漏洞,转步骤⑩;
⑨ 判定待验i正网页不存在SQL注入漏洞,转步骤⑩;
⑩ 结束对待验i正网页的-验i正过程。 SQL注入漏洞检测交叉-睑证方法举例
我们定义待验i正的网页地址为http: 〃192. 168. 0. 1/pagel. asp,该网页上 存在表单l,需要用户输入一个字符串并提交。则
(1) 设置SQL注入攻击模板为SELECT型模板,该模板包含三种攻击模式 和一个交叉-验i正函数。
(2) 输入正常的数据并提交,可以看到客户端向服务器提交了如下访问 请求http: 〃 192. 168. 0. 1/page2. asp para=abc。保存服务器的返回结果。
(3) 交叉验证模块从SELECT型模板中提取第一个攻击模式",or 1=", 附加在步骤2中的正常请求后面,构成一个SQL注入攻击语句"http:〃192. 168. 0. 1/page2. asp para=abc,or+l=",该注入攻击语句可能会被服务器 执行,也可能会被服务器检测到并过滤。若在服务器上执行,将引起服务器运 行错误,服务器可能会返回错误信息,也可能通过屏蔽错误信息返回其他内容。 若服务器返回错误信息,则判定该网页存在SQL注入漏洞,结束判断过程;若 未返回错误信息,则保存服务器返回结果,继续执行后续操作。
(4) 交叉验证模块从SELECT型模板中提取第二个攻击模式",or 1=1 一",附加在步骤2中的正常请求后面,构成一个SQL注入攻击语句"http: 〃 192. 168. 0. 1/page2. asp para=abc,or+l=l+—",该注入攻击语句若在服务器 上执行,将不引起服务器运行错误。保存服务器返回结果。
(5) 交叉验证模块从SELECT型模板中提取第三个攻击模式",or 1!=1 —,,,附加在步骤2中的正常请求后面,构成一个SQL注入攻击语句"http: 〃 192. 168. 0. 1/page2. asp para=abc,or+l !=1+--",该注入攻击语句若在服务器 上执行,将不引起服务器运行错误,但返回结果不同于步骤4的返回结果。
(6 ) SELECT型攻击模板的交叉lHi函数比较步骤2 ~ 5的返回结果,因为 我们提交的SQL注入攻击语句会触发服务器返回不同的返回结果,所以通过比 较这些返回结果是否相同,即可判断这些SQL注入攻击语句是否在服务器上被 执行。若被执行则表明服务器对用户提交数据的处理存在SQL注入漏洞,判断 过程结束。
实施例二
本实施例是实现实施例所述方法的系统,系统结构示意图见图1所示。即 一种SQL注入漏洞检测系统,所述系统安装在互联网的用户终端上,至少有 一个与网络服务器连接的待验证网页定义单元。至少有一个与待I^JE网页定义单元连接,可以提供四种攻击模板子单元的SQL注入攻击模板选择单元。至 少有一个从SQL注入攻击模板选择单元获得支持并与网络服务器连接的交叉 验证单元。该系统包括
1. 待验证网页定义单元定义一 系列可能包含SQL注入漏洞的网页地址。
2. SQL注入攻击模板选择单元列出可用的SQL注入攻击模板,供用 户进行选择。
3. 交叉比较单元根据用户选定的模板,对待验证网页发送不同的访 问数据,通过相互比较几个返回结果判断该网页上是否存在注入漏洞。 基本思路与实施例相似 一种作为网络安全的重要产品之一的主机脆弱性
扫描系统的关键技术——SQL注入漏洞检测技术。系统的待验证网页定义单元 和SQL注入攻击模板选择单元向服务器提交正常的访问请求数据和不同类型 的SQL注入数据,接收服务器的返回结果。然后交叉!Hit单元交叉比较不同 请求的返回结果,并根据比较结果判断服务器对提交数据的处理是否存在SQL 注入漏洞。可以交叉一险证单元通过网页爬虫方式、浏览器插件方式和手工输入 方式定义待验证的网页地址。SQL注入攻击模板选择单元从四种不同类型的攻 击模板中选择一个或多个模板,检测待验证网页上是否存在SQL注入漏洞。 可以在服务器屏蔽错误信息的情况下,交叉-睑证单元通过交叉比较正常访问请 求和SQL注入语句的返回结果,判断服务器对用户提交数据的处理是否存在 SQL注入漏洞。
下面对各个功能单元进行详细的说明。
待验证网页定义单元该单元定义了一系列可能包含SQL注入漏洞的网页地址。待验证网页定 义单元包含有三个子单元用以不同情况下应对用户的不同需要
① 通过网页爬虫程序检测目标构成待验证网页链表个子单元;
② 通过浏览器插件中手动点击待验证的网页构成待^SiL网页链表子单元;
③ 用户手工输入待验证的网页的界面子单元。 SQL注入攻击模板选择单元
四种攻击模板子单元是选择模板子单元、插入模板子单元、修改模板子 单元和删除模板子单元,每个子单元由针对该种操作的SQL注入攻击模式、 返回结果交叉验证函数组成。
这里提供四种SQL注入攻击模板,与服务端对用户提交数据的处理有关。 在B/S模式中,服务端的数据库系统对记录的处理可分为四种操作方式选择、 插入、修改和删除。在与数据库进行数据交互时,对用户提交的表单数据,月l 务器上的处理程序会提糾目关内容构造SQL语句,而构造后的SQL语句将被 用于执行四种操作方式中的一种。对于数据库不同的操作方式,用于实现SQL 注入攻击的语句也不相同,因此本实施例提供了四种不同的攻击模板选择模 板、插入模板、修改模板和删除模板,每个模板由针对该种操作的SQL注入 攻击模式、返回结果交叉验证函数组成。用户可根据当前的表单内容选择相应 的模板。如果用户不了解服务器对所提交的表单数据进行了何种操作,可以选 择多个或全部攻击模板进行逐一验证。
交叉验证单元包含的子单元
向待验证网页提交正常的访问数据,并接收返回结杲子单元; 判断当前攻击模板中是否存在尚未使用的SQL注入模式子单元;从当前攻击模板中提取一个尚未使用的SQL注入模式,将其附加在正常 的访问数据后构成SQL注入访问语句并提交至服务器子单元; 判断服务器的返回状态码是否正常子单元; 保存服务器的返回内容子单元;
调用该攻击模板中的交叉验证函数,对服务器的正常返回结果和异常返回 结果进行交叉比较子单元;
根据交叉比较的结果判断子单元; 判定待验证网页存在SQL注入漏洞子单元; 判定待验证网页不存在SQL注入漏洞子单元。
权利要求
1. 一种SQL注入漏洞检测方法,包括待-睑i正网页定义单元、SQL注入 攻击模板选择单元、交叉验证单元,其特征在于所述的步骤① 待验证网页定义单元设置待验证网页;② 判断是否所有网页都处理完毕,是则结束,否则转步骤③;③ 提取一个尚未处理网页;④ 在SQL注入攻击模板选择单元中选择攻击模板;⑤ 依据该网页的攻击模板,构造SQL注入攻击语句,并提交到服务器; 在交叉比较单元中对服务器返回的结果集进行交叉验证,然后转步骤②。
2. 才艮据权利要求1所述的一种SQL注入漏洞检测方法,其特征在于所述 的设置待验证网页的三种方法① 通过网页爬虫程序检测目标网站的所有网页,抽取包含表单内容和需要 提交Cookie的网页,构成待验证网页链表;② 提供浏览器插件,用户在浏览器插件中手动点击待^iJL的网页,后台处 理程序抽取包含表单内容和需要提交Cookie的网页,构成待验证网页M;③ 用户手工输入待IHiL的网页。
3. 根据权利要求1或2所述的一种SQL注入漏洞检测方法,其特征在于 所迷的攻击模板有四种不同的攻击模板选择模板、插入模板、修 夂模板和删 除模板,每个模板由针对该种操作的SQL注入攻击模式、返回结果交叉验证 函数组成。
4. 才艮据权利要求3所述的一种SQL注入漏洞检测方法,其特征在于所述 的交叉驺3正方法的步骤① 向待验证网页提交正常的访问数据,并接收返回结果;② 判断当前攻击模板中是否存在尚未使用的SQL注入^t式,是则转步骤 ③,否则转步骤⑥;③ 从当前攻击模板中提取一个尚未使用的SQL注入模式,将其附加在步 骤①中的正常访问数据后面,构成SQL注入访问语句并提交至服务器;④ 判断服务器的返回状态码是否正常,是则转步骤⑤,否则转步骤⑧;⑤ 保存服务器的返回内容,转步骤②;⑥ 调用该攻击模板中的交叉验证函数,对服务器的正常返回结果和异常返 回结果进行交叉比较;⑦ 根据交叉比较的结果判断步骤③中构造的SQL注入访问语句是否在服 务器上被执行,是则转步骤⑧,否则转步骤⑨;⑧ 判定待马Hi网页存在SQL注入漏洞,转步骤⑩;⑨ 判定待验证网页不存在SQL注入漏洞,转步骤⑩;⑩ 结束对待验证网页的驺SE过程。
5. —种SQL注入漏洞检测系统,所迷系统安装在互联网的用户终端上, 其特征在于,至少有一个与网络服务器连接的待验证网页定义单元;至少有一 个与待验证网页定义单元连接,可以提供四种攻击模板子单元的SQL注入攻 击模板选择单元,至少有一个从SQL注入攻击模板选择单元获得支持并与网 络服务器连接的交叉验证单元。
6. 根据权利要求5所述的一种SQL注入漏洞检测系统,其特征在于,所 述的待验证网页定义单元包含有三个子单元①通过网页爬虫程序检测目标构成待验证网页链表个子单元;② 通过浏览器插件中手动点击待马t证的网页构成待验证网页链表子单元;③ 用户手工输入待验证的网页的界面子单元。
7. 根据权利要求5所述的一种SQL注入漏洞检测系统,其特征在于,所 述的四种攻击模板子单元是选择模板子单元、插入模板子单元、修改模板子 单元和删除才莫^1子单元,每个子单元由针对该种梯:作的SQL注入攻击模式、 返回结果交叉验证函数组成。
8. 根据权利要求5所述的一种SQL注入漏洞检测系统,其特征在于,所 述的交叉验证单元包含的子单元向待验证网页提交正常的访问数据,并接收返回结果子单元; 判断当前攻击模板中是否存在尚未使用的SQL注入才莫式子单元; 从当前攻击模板中提取一个尚未使用的SQL注入模式,将其附加在正常 的访问数据后构成SQL注入访问语句并提交至服务器子单元; 判断服务器的返回状态码是否正常子单元; 保存服务器的返回内容子单元;调用该攻击模板中的交叉验证函数,对服务器的正常返回结果和异常返回 结果进行交叉比较子单元;根据交叉比较的结果判断子单元; 判定待-^i正网页存在SQL注入漏洞子单元; 判定待验证网页不存在SQL注入漏洞子单元。
全文摘要
本发明公开了一种作为网络安全的重要产品之一的主机脆弱性扫描系统的关键技术——SQL注入漏洞检测技术。特征是向服务器提交正常的访问请求数据和不同类型的SQL注入数据,接收服务器的返回结果,然后交叉比较不同请求的返回结果,并根据比较结果判断服务器对提交数据的处理是否存在SQL注入漏洞。可以通过网页爬虫方式、浏览器插件方式和手工输入方式定义待验证的网页地址。可以从四种不同类型的攻击模板中选择一个或多个模板,检测待验证网页上是否存在SQL注入漏洞。可以在服务器屏蔽错误信息的情况下,通过交叉比较正常访问请求和SQL注入语句的返回结果,判断服务器对用户提交数据的处理是否存在SQL注入漏洞。
文档编号H04L29/06GK101312393SQ20071009953
公开日2008年11月26日 申请日期2007年5月24日 优先权日2007年5月24日
发明者叶润国, 涛 周, 骆拥政 申请人:北京启明星辰信息技术有限公司