Sql注入漏洞检测中的注入点提取方法

文档序号:6374224阅读:429来源:国知局
专利名称:Sql注入漏洞检测中的注入点提取方法
技术领域
本发明属于Web应用系统安全漏洞检测领域,特别是涉及ー种SQL注入漏洞检测中的注入点提取方法。
背景技术
结构化查询语言(以下简称SQL)注入攻击是ー种应用广泛、具有很大威胁性的Web 攻击技术,被列为 OWASP(Open Web Application Security Project)十大 Web 应用系统安全威胁之首。其基本思想是通过猜解和验证目标系统的SQL执行逻辑,构造能够欺骗解释器的攻击载荷,执行攻击性的命令或者访问未被授权的数据。这种攻击方法隐蔽性强,受攻击后的Web应用系统可能会产生敏感信息的泄漏或破坏,给正常业务造成非常严重的影响。传统SQL注入检测技术主要采用基于文档对象模型(以下简称D0M)的分析法,通过分析目标网页的D0M,找出向服务器提交数据的URL、Form和Cookies,构建注入点测试列表。以此为依据,依次构建相应的测试用例,通过对服务器响应数据进行特征匹配或差异化分析,构建漏洞列表来确定SQL注入漏洞。随着Web2. O技术的广泛应用,SQL注入漏洞检测技术面临诸多的挑战,主要表现为ー是以AJAX为代表的Web2. O技术,通过Web浏览器中的XMLHttpRequest对象,实现HTTP请求和数据的异步交換。其请求发送过程、请求URL等均由浏览器客户端脚本动态生成,传统方法既无法对脚本内容和执行结果进行分析,也不能对该环境中的通信过程和数据流实施全面分析检查。ニ是浏览器客户端脚本的大量使用,给SQL注入点检测过程设置了很多障碍,从<a>标记中提取“href”属性标识链接地址的做法不再有效,客户端脚本可方便地与DOM元素绑定,从而完成链接跳转、属性改变等操作。在Web2. O环境中,链接的实现方式变得日趋多样和复杂,其概念也有了扩展和延伸。对Web应用系统进行安全性检测主要采用基于源代码复查的白盒检测方法和基于渗透测试的黑盒检测方法。白盒检测法有针对性地对代码依赖关系进行分析,对变量和数据流进行跟踪。其分析方法主要有三种基于字符串的模式匹配、词法标记匹配和基于抽象语法的数据流分析。其在复查代码上具有较高的检查效率,但缺点是误报率和漏报率都比较高,并且需要程序员进行复查。黑盒检测法主要通过构建测试用例,分析Web应用系统对不同输入的响应信息,以此来确认漏洞。由于黑盒检测法限制条件少,针对性强,检测准确率高,更适用于对Web应用系统进行安全性检测。本发明主要采用黑盒检测法。学者已经提出了几种用于远程扫描Web应用系统SQL注入漏洞的方法,已经公开的黑盒检测方法有中国专利CN 101312393B和CN 102136051A等。CN 101312393B公开的方法是向服务器提交正常的访问请求数据和不同类型的SQL注入数据,接收服务器的返回结果,然后交叉比较不同请求的返回結果,并根据比较结果判断服务器对提交数据的处理是否存在SQL注入漏洞。在提交SQL注入数据时,定义了四种不同的攻击模板,模板既定义了注入SQL攻击命令的模式,也定义了返回结果交叉验证函数的组成,模板可以单独或组合使用。其公开的方法主要解决当服务器屏蔽出错信息时,依靠服务器返回状态码来判断是否存在漏洞的方法导致的漏报和通过关键字来判断服务器运行是否出错的方法导致的漏报和误报。CN 102136051A公开的方法通过定义模型驱动的测试框架,以框架中的SGM-SQL注入模型表达的信息为指导,定义SQL注入安全漏洞形式化定义和滲透测试用例的形式化表述体系,为渗透测试提供漏洞存在性准确判定准则和有序完备的测试用例,从而提高渗透测试准确度,弥补当前渗透测试准确度不高的缺点。但是,这两个专利所公开的方法都未涉及对Web2. O环境中复杂Web应用系统的SQ L注入漏洞检测问题。

发明内容
为了克服现有的Web环境下SQL注入漏洞检测方法准确性差的不足,本发明提供ー种SQL注入漏洞检测中的注入点提取方法。该方法从获取Web应用系统的数据注入点入手,通过构建有针对性的测试用例,对系统潜在的SQL注入漏洞进行全面检测。由于增加了对网页脚本的解析处理流程,对复杂网页中的URL进行准确提取,可以解决传统测试方法存在的漏报问题,提高测试的覆盖率;使用的测试用例依据数据注入点的类型和參数构成,对字符串、数值、注释和延迟测试,有效应对URL參数和表单提交数据过滤不严造成注入漏洞的测试;通过分析响应,建立的SQL注入漏洞判定规则,可以提高测试的准确性。本发明解决其技术问题所采用的技术方案是ー种SQL注入漏洞检测中的注入点提取方法,其特点是包括以下步骤步骤I、根据被测试网站起始URL进行的预处理;分析页面Frame帧结构,下载帧集合中的所有帧页面;下载网页中链接的全部脚本文件;获取并存储测试网站设置的
しookies ;步骤2、根据网页HTML源码中的标记对或者关键字区分网页类型;网页HTML源码中不包含“〈scriptX/script〉”标记对或“ javascript: ”关键字的网页为简单网页;网页HTML源码中包含“〈scriptX/script〉”标记对或“ javascript: ”关键字的网页为复杂网页;步骤3、提取简单网页中的数据输入点;根据网页HTML源码,建立相应的DOM树;遍历DOM树,提取“〈form〉”元素的属性和全部子元素;根据“〈form〉”元素及其子元素的属性,建立表单提交向量;遍历DOM树,提取“<a>”元素的属性和全部子元素;对“〈&>”元素的“href”属性值进行链接规范化处理和滤除重复后加入到URL列表;步骤4、提取复杂网页中的数据输入点;根据网页HTML源码,建立相应的DOM树;建立并初始化自定义DOM对象和BOM对象;遍历DOM树,提取所有绑定脚本事件的DOM元素;提取所有具有“JavaScript”伪协议的“<a>”元素;初始化脚本引擎,按照DOM树的遍历次序,建立脚本事件的运行队列;执行绑定在DOM元素上的脚本,分析脚本运行后网页DOM的变化;对具有“ JavaScript”伪协议的“<a>”元素,提取其运行函数的名称和參数;将函数及參数提交给脚本引擎,分析脚本运行后网页DOM的变化;如果脚本运行后产生跳转链接或HTTP异步请求,则提取出链接地址;对提取出的链接进行整形处理,将整形后的链接加入URL列表;处理完运行队列中的其他脚本,结束复杂页面的数据输入点提取;步骤5、根据数据数据输入点构建测试用例;使用编程语言和数据库中的注释符、连接符、界定符、数据库中的默认表素材构建测试用例;建立基于字符串、数值、注释语句和延时测试的测试用例;步骤6、提交测试用例,分析服务响应;步骤7、建立存在SQL注入漏洞的判定规则,确认注入点。所述的表单提交向量是Host、Port、PageURL> ActionURL、Method、FormData、Cookies或者Charset ;其中,Host是待测试Web应用系统的主机IP地址;Port是Web服务器的端口号;PageURL是包含表单的网页地址;ActionURL是表单实际请求的URL ;Method是表单请求的方法;FormData是表单提交的数据实体;Cookies是访问网页时Web应用系统设置的Cookies ;Charset是网页的编码字符集。所述的链接规范化处理步骤包括删除锚点,过滤协议,将链接到压缩文件、文档、图像、视频、音频以及ニ进制文件的链接过滤。
所述的脚本引擎是开源JavaScript引擎。所述的自定义DOM对象和BOM对象是使用JavaScript引擎的编程接ロ创建的宿
主对象。所述的分析服务响应包括基于关键字的匹配和HTTP响应代码的服务器出错信息分析;异常响应内容与原始响应内容的比较;测量响应的延迟时间。所述的SQL注入漏洞的判定规则是注入命令后引起数据库出错,响应信息中包含出错类型及代码位置信息;注入命令后数据库运行正常,响应信息与原始信息相同;Web应用系统响应时间受注入的延时參数影响,与原始响应时延不一致;注入无效命令后,响应总定位到某个固定位置或内容,可能存在盲注入漏洞;如果没有规则能够确认SQL注入漏洞存在,则当前的检测项被认为是疑似漏洞,待详细分析。本发明的有益效果是由于从获取Web应用系统的数据注入点入手,通过构建有针对性的测试用例,对系统潜在的SQL注入漏洞进行全面检测。由于增加了对网页脚本的解析处理流程,对复杂网页中的URL进行准确提取,解决了传统测试方法存在的漏报问题,提高了测试的覆盖率;使用的测试用例依据数据注入点的类型和參数构成,对字符串、数值、注释和延迟测试,有效应对URL參数和表单提交数据过滤不严造成注入漏洞的测试;通过分析响应,建立的SQL注入漏洞判定规则,明显提高了测试的准确性。下面结合附图和实施例对本发明作详细说明。


图I是本发明方法对简单网页数据注入点提取流程图。图2是本发明方法对复杂网页数据注入点提取流程图。
具体实施例方式本发明SQL注入漏洞检测中的注入点提取方法具体步骤如下I、预处理。根据被测试网站的起始URL下载网页,对下载的网页进行预处理。预处理的目的是降低后续步骤的复杂度,同时提供后续处理所需的数据。预处理工作包括分析Frame帧页面和获取Cookies两部分。如果网页包含帧集合,则将帧集合中的页面ー并下载。同时,保存Web应用系统设置的Cookies,保存的Cookies在后续测试中作为构建HTTP数据包的素材。2、网页类型区分。为了简化处理,本方法在处理网页时,根据网页HTML源码中是否包含“<script>〈/script>”标记对或者是否包含“〈javascript: ”关键字将网页分为简单网页和复杂网页。简单网页不包含任何脚本元素,因而其主要处理内容为网页中的超级链接和表単。复杂网页因包含脚本,因而其处理内容包括脚本解析、运行结果评估、表单分析及超级链接处理。3、简单网页数据注入点提取。如图I所示,根据网页HTML源代码,构建相应的DOM(文档对象模型)树。首先,判断“〈form〉”元素是否存在,如果存在,则提取“〈form〉”元素的“id”、“name'“method”和“action”属性,提取“〈form〉”元素包含的全部子元素。属性为“hidden”的不可见子元素,其数据仍会被表单提交,因此所有子元素都必须提取。提取子元素的“ id”、“name”、 “claSS”、“type”和“value”属性。根据“type”属性可预先对子元素赋值,并建立表单提交向量。其次,判断“<a>”元素是否存在,如果存在,则提取“<a>”元素的“ href”属性,其值即需要处理的链接URL地址。如果链接包含“#,,字符,则链接中包含锚点。如果锚点链接到该页面,则直接丢弃该URL ;如果锚点链接到其他页面,则应确定链接是否为站外链接,站外链接超出测试的范围直接丢弃。对站内链接进行URL规范化处理,内容包括删除锚点,由于锚点并不向服务器提交,仅为控制浏览器进行页面导航,所以在处理包含锚点的站内链接时统一将锚点删除;过滤协议,本方法仅处理HTTP协议及JavaScript伪协议链接,不考虑FTP、MMS等其他协议链接;过滤链接,将链接到压缩文件、文档、图像、视频、音频、ニ进制文件的链接过滤。由于静态链接不包含查询參数,因此静态链接只用来分析站点结构,并不包含数据注入点,为简化处理过程暂不考虑服务器端使用ReWrite技术后对URL的影响。滤除重复链接后,将其加入到URL列表中。处理重复链接时,重点分析URL中的“abs_path”和“query”两部分。通常将“abs_path”相同,“query”中參数名相同而參数值不同的两个或多个URL归类为重复链接。实际处理时,按照其格式取一个链接加入到URL列表中。最后,遍历DOM树,提取“<a>”元素的属性和全部子元素^寸“化^’元素的“^社”属性值进行链接规范化处理和滤除重复后加入到URL列表;处理全部“<a>”元素,结束单页面的数据注入点提取。链接规范化处理步骤(I)删除锚点,由于锚点并不向服务器提交,仅为控制浏览器进行页面导航,所以在处理包含锚点的站内链接时统一将锚点删除;(2)过滤协议,本方法仅处理HTTP协议及JavaScript伪协议链接,不考虑FTP、MMS等其他协议链接;(3)过滤链接,将链接到压缩文件、文档、图像、视频、音频、ニ进制文件的链接过滤。上述表单提交向量是Host、Port、PageURL、ActionURL、Method、FormData、Cookies或者Charset ;其中,Host是待测试Web应用系统的主机IP地址;Port是Web服务器的端口号;PageURL是包含表单的网页地址;ActionURL是表单实际请求的URL ;Method是表单请求的方法;FormData是表单提交的数据实体;Cookies是访问网页时Web应用系统设置的Cookies ;Charset是网页的编码字符集。
本实施例定义待验证的网页地址为http ://192. 168. O. 11:8080/info/exceed_fine_bulletin. php。分析该网页为简单网页,存在ー个表单,需要用户提交一个关键字。分析表单的属性得到action= “ inf o_search. php”、method= “get”。分析表单包含的子元素,得到ー个“〈select〉”和两个“〈input〉”元素。“〈select〉”元素的属性为class= “option”name =“s_type”,并包含两个“〈option〉”子元素,属性分别为:value= “certid”和value= “redrid”。由元素的属性可知,这是包含两个选项的下拉列表,其缺省值为“S_type=Certid”。两个表单子元素“〈input〉”的属性分别为type= “text”name= “q” 和 type= “submit”name= “submit” value= “检索”。属性为“submit”的“〈input〉”元素为表单的提交按钮,其缺省值为“submit=检索”。属性为“text”的“〈input〉”元素为表单的单行文本输入框,其缺省值为“q=””,即q为空串。由于表单的 提交方法为“ GET”,因此表单请求的URL由表单子元素的值以及“ action”属性构成。给文本输入框的“〈input〉”元素赋值,随机选择不超过其属性的数值或是字符串,例如6位随机数“798797”或6位随机字符串“ xxxxxx”。本实施例构建的表单提交向量格式为[Host,Port, PageURL, ActionURL, Method, FormData, Cookies, Charset]。其中,Host 为待测试Web应用系统的主机IP地址,Port为Web服务器的端口号,PageURL为包含表单的网页地址,ActionURL为表单实际请求的URL,Method为表单请求的方法,FormData为表单提交的数据实体,Cookies为访问网页时Web应用系统设置的Cookies, Charset为网页的编码字符集,字符集主要用于对DataString中的字符进行编码。本实施例构建的表单提交向量具体为
权利要求
1.ー种SQL注入漏洞检测中的注入点提取方法,其特征在于包括以下步骤步骤I、根据被测试网站起始URL进行的预处理;分析页面Frame帧结构,下载帧集合中的所有帧页面;下载网页中链接的全部脚本文件;获取并存储测试网站设置的Cookies ;步骤2、根据网页HTML源码中的标记对或者关键字区分网页类型;网页HTML源码中不包含“〈scriptX/script〉”标记对或“ javascript: ”关键字的网页为简单网页;网页HTML源码中包含“<script>〈/script>”标记对或“ javascript: ”关键字的网页为复杂网页;步骤3、提取简单网页中的数据输入点;根据网页HTML源码,建立相应的DOM树;遍历DOM树,提取“〈form〉”元素的属性和全部子元素;根据“〈form〉”元素及其子元素的属性,建立表单提交向量;遍历DOM树,提取“<a>”元素的属性和全部子元素;对“<a>”元素的“href”属性值进行链接规范化处理和滤除重复后加入到URL列表;步骤4、提取复杂网页中的数据输入点;根据网页HTML源码,建立相应的DOM树;建立并初始化自定义DOM对象和BOM对象;遍历DOM树,提取所有绑定脚本事件的DOM元素;提取所有具有“ JavaScript”伪协议的“<a>”元素;初始化脚本引擎,按照DOM树的遍历次序,建立脚本事件的运行队列;执行绑定在DOM元素上的脚本,分析脚本运行后网页DOM的变化;对具有“ JavaScript”伪协议的“<a>”元素,提取其运行函数的名称和參数;将函数及參数提交给脚本引擎,分析脚本运行后网页DOM的变化;如果脚本运行后产生跳转链接或HTTP异步请求,则提取出链接地址;对提取出的链接进行整形处理,将整形后的链接加入URL列表;处理完运行队列中的其他脚本,结束复杂页面的数据输入点提取;步骤5、根据数据数据输入点构建测试用例;使用编程语言和数据库中的注释符、连接符、界定符、数据库中的默认表素材构建测试用例;建立基于字符串、数值、注释语句和延时测试的测试用例;步骤6、提交测试用例,分析服务响应;步骤7、建立存在SQL注入漏洞的判定规则,确认注入点。
2.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的表单提交向量是 Host、Port、PageURL> ActionURL、Method、FormData、Cookies 或者Charset ;其中,Host是待测试Web应用系统的主机IP地址;Port是Web服务器的端ロ号;PageURL是包含表单的网页地址;ActionURL是表单实际请求的URL ;Method是表单请求的方法;FormData是表单提交的数据实体;Cookies是访问网页时Web应用系统设置的Cookies ;Charset是网页的编码字符集。
3.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的链接规范化处理步骤包括删除锚点,过滤协议,将链接到压缩文件、文档、图像、视频、音频以及ニ进制文件的链接过滤。
4.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的脚本引擎是开源JavaScript引擎。
5.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的自定义DOM对象和BOM对象是使用JavaScript引擎的编程接ロ创建的宿主对象。
6.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的分析服务响应包括基于关键字的匹配和HTTP响应代码的服务器出错信息分析;异常响应内容与原始响应内容的比较;测量响应的延迟时间。
7.根据权利要求I所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的SQL注入漏洞的判定规则是注入命令后引起数据库出错,响应信息中包含出错类型及代码位置信息;注入命令后数据库运行正常,响应信息与原始信息相同;Web应用系统响应时间受注入的延时參数影响,与原始响应时延不一致;注入无效命令后,响应总定位到某个固定位置或内容,可能存在盲注入漏洞;如果没有规则能够确认SQL注入漏洞存在,则当前的检测项被认为是疑似漏洞,待详细分析。
全文摘要
本发明公开了一种SQL注入漏洞检测中的注入点提取方法,用于解决现有的Web环境下SQL注入漏洞检测方法准确性差的技术问题。技术方案是首先对下载的网页进行预处理,将网页分为简单网页和复杂网页,对简单网页数据注入点进行提取,对复杂网页数据注入点进行提取,通过构建测试用例,提交测试用例,分析服务响应,建立存在SQL注入漏洞的判定规则。本发明从获取Web应用系统的数据注入点入手,通过构建有针对性的测试用例,使用的测试用例依据数据注入点的类型和参数构成,对字符串、数值、注释和延迟测试,有效应对URL参数和表单提交数据过滤不严造成注入漏洞的测试;通过分析响应,建立的SQL注入漏洞判定规则,提高了测试的准确性。
文档编号G06F11/36GK102831345SQ20121026873
公开日2012年12月19日 申请日期2012年7月30日 优先权日2012年7月30日
发明者蔡皖东, 马凯, 姚烨 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1