CN102831345B - Sql注入漏洞检测中的注入点提取方法 - Google Patents
Sql注入漏洞检测中的注入点提取方法 Download PDFInfo
- Publication number
- CN102831345B CN102831345B CN201210268735.3A CN201210268735A CN102831345B CN 102831345 B CN102831345 B CN 102831345B CN 201210268735 A CN201210268735 A CN 201210268735A CN 102831345 B CN102831345 B CN 102831345B
- Authority
- CN
- China
- Prior art keywords
- webpage
- script
- sql
- sql injection
- test case
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种SQL注入漏洞检测中的注入点提取方法,用于解决现有的Web环境下SQL注入漏洞检测方法准确性差的技术问题。技术方案是首先对下载的网页进行预处理,将网页分为简单网页和复杂网页,对简单网页数据注入点进行提取,对复杂网页数据注入点进行提取,通过构建测试用例,提交测试用例,分析服务响应,建立存在SQL注入漏洞的判定规则。本发明从获取Web应用系统的数据注入点入手,通过构建有针对性的测试用例,使用的测试用例依据数据注入点的类型和参数构成,对字符串、数值、注释和延迟测试,有效应对URL参数和表单提交数据过滤不严造成注入漏洞的测试;通过分析响应,建立的SQL注入漏洞判定规则,提高了测试的准确性。
Description
技术领域
本发明属于Web应用系统安全漏洞检测领域,特别是涉及一种SQL注入漏洞检测中的注入点提取方法。
背景技术
结构化查询语言(以下简称SQL)注入攻击是一种应用广泛、具有很大威胁性的Web攻击技术,被列为OWASP(Open Web Application Security Project)十大Web应用系统安全威胁之首。其基本思想是通过猜解和验证目标系统的SQL执行逻辑,构造能够欺骗解释器的攻击载荷,执行攻击性的命令或者访问未被授权的数据。这种攻击方法隐蔽性强,受攻击后的Web应用系统可能会产生敏感信息的泄漏或破坏,给正常业务造成非常严重的影响。
传统SQL注入检测技术主要采用基于文档对象模型(以下简称DOM)的分析法,通过分析目标网页的DOM,找出向服务器提交数据的URL、Form和Cookies,构建注入点测试列表。以此为依据,依次构建相应的测试用例,通过对服务器响应数据进行特征匹配或差异化分析,构建漏洞列表来确定SQL注入漏洞。
随着Web2.0技术的广泛应用,SQL注入漏洞检测技术面临诸多的挑战,主要表现为:一是以AJAX为代表的Web2.0技术,通过Web浏览器中的XMLHttpRequest对象,实现HTTP请求和数据的异步交换。其请求发送过程、请求URL等均由浏览器客户端脚本动态生成,传统方法既无法对脚本内容和执行结果进行分析,也不能对该环境中的通信过程和数据流实施全面分析检查。二是浏览器客户端脚本的大量使用,给SQL注入点检测过程设置了很多障碍,从<a>标记中提取“href”属性标识链接地址的做法不再有效,客户端脚本可方便地与DOM元素绑定,从而完成链接跳转、属性改变等操作。在Web2.0环境中,链接的实现方式变得日趋多样和复杂,其概念也有了扩展和延伸。
对Web应用系统进行安全性检测主要采用基于源代码复查的白盒检测方法和基于渗透测试的黑盒检测方法。白盒检测法有针对性地对代码依赖关系进行分析,对变量和数据流进行跟踪。其分析方法主要有三种:基于字符串的模式匹配、词法标记匹配和基于抽象语法的数据流分析。其在复查代码上具有较高的检查效率,但缺点是误报率和漏报率都比较高,并且需要程序员进行复查。黑盒检测法主要通过构建测试用例,分析Web应用系统对不同输入的响应信息,以此来确认漏洞。由于黑盒检测法限制条件少,针对性强,检测准确率高,更适用于对Web应用系统进行安全性检测。本发明主要采用黑盒检测法。
学者已经提出了几种用于远程扫描Web应用系统SQL注入漏洞的方法,已经公开的黑盒检测方法有中国专利CN 101312393B和CN 102136051A等。CN 101312393B公开的方法是向服务器提交正常的访问请求数据和不同类型的SQL注入数据,接收服务器的返回结果,然后交叉比较不同请求的返回结果,并根据比较结果判断服务器对提交数据的处理是否存在SQL注入漏洞。在提交SQL注入数据时,定义了四种不同的攻击模板,模板既定义了注入SQL攻击命令的模式,也定义了返回结果交叉验证函数的组成,模板可以单独或组合使用。其公开的方法主要解决当服务器屏蔽出错信息时,依靠服务器返回状态码来判断是否存在漏洞的方法导致的漏报和通过关键字来判断服务器运行是否出错的方法导致的漏报和误报。CN 102136051A公开的方法通过定义模型驱动的测试框架,以框架中的SGM-SQL注入模型表达的信息为指导,定义SQL注入安全漏洞形式化定义和渗透测试用例的形式化表述体系,为渗透测试提供漏洞存在性准确判定准则和有序完备的测试用例,从而提高渗透测试准确度,弥补当前渗透测试准确度不高的缺点。但是,这两个专利所公开的方法都未涉及对Web2.0环境中复杂Web应用系统的SQL注入漏洞检测问题。
发明内容
为了克服现有的Web环境下SQL注入漏洞检测方法准确性差的不足,本发明提供一种SQL注入漏洞检测中的注入点提取方法。该方法从获取Web应用系统的数据注入点入手,通过构建有针对性的测试用例,对系统潜在的SQL注入漏洞进行全面检测。由于增加了对网页脚本的解析处理流程,对复杂网页中的URL进行准确提取,可以解决传统测试方法存在的漏报问题,提高测试的覆盖率;使用的测试用例依据数据注入点的类型和参数构成,对字符串、数值、注释和延迟测试,有效应对URL参数和表单提交数据过滤不严造成注入漏洞的测试;通过分析响应,建立的SQL注入漏洞判定规则,可以提高测试的准确性。
本发明解决其技术问题所采用的技术方案是:一种SQL注入漏洞检测中的注入点提取方法,其特点是包括以下步骤:
步骤1、根据被测试网站起始URL进行的预处理;分析页面Frame帧结构,下载帧集合中的所有帧页面;下载网页中链接的全部脚本文件;获取并存储测试网站设置的Cookies;
步骤2、根据网页HTML源码中的标记对或者关键字区分网页类型;网页HTML源码中不包含“<script></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注入漏洞的判定规则,确认注入点。
所述的表单提交向量是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注入漏洞判定规则,明显提高了测试的准确性。
下面结合附图和实施例对本发明作详细说明。
附图说明
图1是本发明方法对简单网页数据注入点提取流程图。
图2是本发明方法对复杂网页数据注入点提取流程图。
具体实施方式
本发明SQL注入漏洞检测中的注入点提取方法具体步骤如下:
1、预处理。
根据被测试网站的起始URL下载网页,对下载的网页进行预处理。预处理的目的是降低后续步骤的复杂度,同时提供后续处理所需的数据。预处理工作包括:分析Frame帧页面和获取Cookies两部分。如果网页包含帧集合,则将帧集合中的页面一并下载。同时,保存Web应用系统设置的Cookies,保存的Cookies在后续测试中作为构建HTTP数据包的素材。
2、网页类型区分。
为了简化处理,本方法在处理网页时,根据网页HTML源码中是否包含“<script></script>”标记对或者是否包含“<javascript:”关键字将网页分为简单网页和复杂网页。简单网页不包含任何脚本元素,因而其主要处理内容为网页中的超级链接和表单。复杂网页因包含脚本,因而其处理内容包括:脚本解析、运行结果评估、表单分析及超级链接处理。
3、简单网页数据注入点提取。
如图1所示,根据网页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>”元素的属性和全部子元素;对“<a>”元素的“href”属性值进行链接规范化处理和滤除重复后加入到URL列表;处理全部“<a>”元素,结束单页面的数据注入点提取。
链接规范化处理步骤:(1)删除锚点,由于锚点并不向服务器提交,仅为控制浏览器进行页面导航,所以在处理包含锚点的站内链接时统一将锚点删除;
(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.0.11:8080/info/exceed_fine_bulletin.php。分析该网页为简单网页,存在一个表单,需要用户提交一个关键字。分析表单的属性得到:action=“info_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中的字符进行编码。本实施例构建的表单提交向量具体为:
根据HTML4.01规范,“submit=检索”被编码为“submit=%E6%A3%80%E7%B4%A2”,编码字符集采用UTF-8。
遍历DOM树,得到16个“<a>”元素,这些链接为不带查询参数的站内链接,用来分析站点结构;得到1个站外链接,将该链接滤除;得到1个带查询参数的动态链接:<a href='/info/exceed_fine_bulletin.php?page=2'>下一页</a>。该链接指向自身,并提供查询参数“page=2”。因此将“http://192.168.0.11:8080/info/exceed_fine_bulletin.php?page=2”加入URL列表。待验证简单网页的数据注入点提取完毕。
4、复杂网页数据注入点提取。
如图2所示,根据HTML源代码,构建相应的DOM树。首先,根据提取要求,自定义DOM对象和BOM(浏览器对象模型)对象。通过脚本引擎提供的编程接口创建上述两类对象后,对其进行初始化,完成属性赋值等工作。其次,遍历DOM树,提取绑定脚本事件的DOM元素和具有“JavaScript”伪协议的“<a>”元素。为了分析评估绑定脚本事件DOM元素在执行脚本后的状态,提取该类元素的所有属性。第三,初始化脚本引擎。按照DOM树的遍历次序,建立脚本事件的运行队列。将脚本提交给脚本引擎解析,执行绑定在DOM元素上的脚本,分析脚本运行后网页DOM的变化。如果DOM树中子元素的属性发生变化,但并未产生跳转链接、HTTP异步请求,则该脚本不产生动态链接,仅对DOM元素属性进行变更。第四、对具有“JavaScript”伪协议的“<a>”元素,提取其运行函数的名称和参数。将函数及参数提交给脚本引擎,分析脚本运行后网页DOM的变化。如果产生跳转链接或HTTP异步请求,则提取出链接地址。对提取出的链接进行整形处理。整形的工作主要包括:协议过滤、文件类型过滤、链接去重等内容。将整形后的链接加入URL列表。最后,处理完运行队列中的其他脚本,结束复杂页面的数据注入点提取。
上述脚本引擎是开源JavaScript引擎,使用开源JavaScript引擎的主要目的是为了执行并评估网页中JavaScript脚本的执行效果。
上述自定义DOM对象和BOM对象是使用JavaScript引擎的编程接口创建的宿主对象,其目的是完成脚本分析执行及动态链接提取。
在上述对DOM树的评估过程中,DOM子元素均为自定义元素,仅配合脚本引擎完成脚本执行工作,以提取出动态链接为目标,在设计上可作相应简化。
本实施例定义待验证的网页地址为:http://192.168.0.12/cn/index.jsp。分析该网页为复杂网页,分析网页DOM树得到:1个表单,该表单包含3个“input”元素,其中1个“input”元素具有“hidden”属性。2个“select”元素,其中1个“select”元素绑定了“onchange”脚本事件;3个绑定“onmouseover”和“onmouseout”事件的“<a>”元素;1个绑定“onchange”事件的select元素;24个具有“JavaScript”伪协议的“<a>”元素。
首先:分析表单,绑定“onchange”脚本事件的“<select>”元素属性为:“name='departmentType′id='select′style='width:130px′onchange="changeBumen()”。其事件句柄“changeBumen()”是不带参数的名称为“changeBumen”的脚本函数。该“<select>”元素包含8个“option”子元素,子元素取值分别为:value=0,value=1,value=2,value=3,value=4,value=5,value=6,value=7。根据“onchange”事件的触发机制,为评估“changeBumen()”的执行效果,将“<select>”元素的缺省值由0置为2,即令“departmentType=2”。将事件句柄“changeBumen()”提交给脚本引擎。脚本执行后,先评估绑定脚本事件的“<select>”元素,再评估DOM树的变化情况。评估结果为:绑定了“onchange”事件的“<select>”元素属性未改变;DOM树中只有表单的另一个“<select>”元素属性发生改变,该“<select>”元素增加了2个“option”子元素,子元素的取值分别为:value=0,value=125,value=124。
按照步骤3的处理流程,在提取表单所有子元素的属性,并为属性为“name="keyword″value=″″size=″15″type=″text″”的文本输入框赋值“xxxxxx”后得到的表单提交向量为:
其次:分析绑定了“onmouseover”和“onmouseout”事件的“<a>”元素。提取该元素的全部属性,得到其事件句柄。将事件句柄提交脚本引擎,执行脚本函数。“onmouseover”事件的句柄执行后,变更了其宿主“<a>”的属性“class”。“onmouseout”事件的句柄执行后,其宿主“<a>”的“class”属性复原。因此可以知道,这3个绑定了事件的“<a>”元素仅使用脚本更改了元素的外观,并未产生链接跳转或HTTP异步请求等。
第三:分析绑定“onchange”事件的“<select>”元素。提取该元素的全部属性,得到其事件句柄。其事件句柄为单行脚本“onChange=javascript:window.open(this.options[this.selectedIndex].value)”。脚本中的“window”对象为BOM顶层对象,在自定义“window”对象时将其“open”方法简化设计为提取参数值,“open”方法的参数值即为动态链接。将事件句柄提交脚本引擎,执行脚本函数。分析DOM树的变化情况,得到“window”对象的“location”、“history”等属性发生变化,即脚本执行后产生了跳转链接,链接值为“open”方法的参数“this.options[this.selectedIndex].value”。该“<select>”元素包含12个“<option>”子元素,提取的跳转链接数量为11个。
第四:分析24个具有JavaScript伪协议的“<a>”元素。提取该元素的全部属性,得到其脚本函数。脚本函数共有4个,分别是:<a href=’javascript:sourceType(′xxx')’>;<a href=’javascript:newsView(xxxxxx)’>;<a href=’javascript:sourceView(xxxxxx)’>和<ahref=’javascript:otherNewsView(xxxxxx)’>。依次将脚本函数提交给脚本引擎,执行脚本函数,评估脚本执行的效果。
两个“<a>”元素具有<a href=’javascript:sourceType(′xxx')’>格式的JavaScript伪协议,其脚本函数sourceType(‘xxx’)执行后,表单元素的属性改变,表单执行了提交操作。因此脚本函数的作用是对表单进行定制,然后提交表单。通过提取脚本函数执行后表单子元素的属性,得到两个表单提交向量,分别是:
由于表单提交向量中仅“FormData”中的一处参数值不同,因此可将其视为同构向量,在后续测试中仅测试一个即可满足测试要求。
剩余的3类脚本函数,都使用了“open”方法,且执行后仅改变“windows”元素的“location”、“history”等属性,因此剩余的22个“<a>”元素仅产生3个URL。即具有相同脚本函数的“<a>”元素,其生成的动态链接具有重复性,应将重复链接滤除。生成的3个URL分别为:
“http://grs.nwpu.edu.cn/cn/dtxx/info_NewsView.jsp?newsID=xxxxxx”、
“http://grs.nwpu.edu.cn/cn/zyk/source_SourceView.jsp?sourceID=xxxxxx”和
“http://grs.nwpu.edu.cn/cn/dtxx/info_OtherNewsView.jsp?newsID=xxxxxx”,将其加入URL列表。
第五:执行网页中的其他脚本块,脚本执行后网页中DOM树中的子元素属性发生变化,但未生成跳转链接及HTTP异步请求,页面的所有脚本解析结束。
第六:参照本实施例步骤3,处理未绑定脚本的“<a>”元素,将得到的链接加入到URL列表。复杂网页的数据注入点提取结束。
5、构建测试用例。
根据测试要求,测试用例应能确认提取出的数据注入点是否存在SQL注入漏洞。为了提高测试准确性,应根据Web应用系统使用的编程语言和后台数据库的类型有针对性地构建测试用例。具体而言,编程语言和数据库中的注释符、连接符、界定符,以及目标数据库中的默认表等是重要的构建素材。
本实施例构造测试用例的主要素材见表1。
表1测试用例素材
常用字符 | 用法 |
′or″ | 字符串标识符 |
(or) | 标识逻辑运算元素 |
--or# | 单行注释符 |
/*…*/ | 多行注释符 |
+ | 加法操作符、连接符 |
|| | 连接符(Oracle) |
% | 通配符 |
variable | 局部变量 |
variable | 全局变量 |
waitfor delay′0:0:10′ | 延时函数(SQL Server) |
本实施例针对字符型查询参数的具体测试用例、其变形式及预期的测试结果见表2。
表2针对字符型参数的测试用例
测试用例 | 用例变形 | 预期结果 |
触发错误。期望数据库返回一个错误 | ||
1′or′1′=′1 | 1′)or(′1′=′1 | 永真条件。期望数据库返回表中的所有行 |
value′or′1′=′2 | value')or(′1′=′2 | 空条件。期望数据库返回与原始内容相同的结果 |
1′and′1′=′2 | 1′)and (′1′=′2 | 永假条件。期望数据库不返回表中的任何行 |
1′or′ab′=′a′+′b | 1′)or (′ab′=′a′+′b | SQL Server连接字符串。期望返回与永真条件相同的信息 |
1′or′ab′=′a′′b | 1′)or (′ab′=′a′′b | MySQL连接字符串。期望返回与永真条件相同的信息 |
1′or′ab′=′a′||′b | 1′)or (′ab′=′a′||′b | Oracle连接字符串。期望返回与永真条件相同的信息 |
本实施例针对数值型查询参数的具体测试用例、其变形式及预期的测试结果见表3。
表3针对数值型参数的测试用例
测试用例 | 用例变形 | 预期结果 |
触发错误。期望数据库返回一个错误 | ||
1+1 | 5-3 | 期望返回与操作相同的内容 |
value+0 | 期望返回与原始请求相同的内容 | |
1or 1=1 | 1)or (1=1 | 永真条件。期望数据库返回表中的所有行 |
value or 1=2 | value)or(1=2 | 空条件。期望数据库返回与原始值相同的结果 |
1and 1=2 | 1)and(1=2 | 永假条件。不返回表中的任何行 |
1or′ab′=′a′+′b′ | 1)or(′ab′=′a′+′b′ | SQL Server连接字符串。期望返回与永真条件相同的信息 |
1or′ab′=′a′′b′ | 1)or (′ab′=′a′′b | MySQL连接字符串。期望返回与永真条件相同的信息 |
1or′ab′=′a′||′b′ | 1)or(′ab′=′a′||′b′ | Oracle连接字符串。期望返回与永真条件相同的信息 |
本实施例针对数据库注释符构建的测试用例、其变形式及预期的测试结果见表4。
表4针对数据库注释符的测试用例
测试用例 | 用例变形 | 预期结果 |
admin'-- | admin')-- | 期望返回数据库中的admin行来绕过身份验证机制 |
admin'# | admin')# | MySQL注释。返回数据库中的admin行来绕过身份验证机制 |
1-- | 1)-- | 注释注入位置之后的查询子句。期望清除WHERE等过滤器 |
1or 1=1-- | 1)or 1=1-- | 注入一个数值参数。期望返回所有行 |
′or′1′=′1′-- | ′)or′1′=′1′-- | 注入一个字符串参数。期望返回所有行 |
-1and 1=2-- | -1)and 1=2-- | 注入一个数值参数。不返回任何行 |
′and′1′=′2′-- | ′)and′1′=′2′-- | 注入一个字符串参数。不返回任何行 |
1/*comment*/ | 将注入注释掉。期望成功后的结果不影响原始请求 |
本实施例使用延时代码构建的测试用例、目标数据库类型及预期的测试结果见表5。
表5使用特定的延迟代码构建的测试用例
6、提交测试用例,分析服务响应。
分析服务器响应包括对服务器出错信息的分析、异常内容与原始内容的比较以及响应的时间延迟测量等内容。分析服务器的出错信息,主要基于关键字的匹配和HTTP响应代码。当注入的代码引起数据库系统产生错误时,会返回详细的出错信息。如:“Invalid parameter type”,“You have an error in your SQL syntax;check the manual thatcorresponds to your MySQL server version for the right syntax to use near′$somestring′atline linenum”,“ERROR 1286(42000):Unknown table engine′InnoDB′”等等。同时,HTTP响应代码为500,表示服务器内部错误。通常情况下,Web应用系统会隐藏上述详细的出错信息,并进行一定的异常处理。在无法分析详细出错信息的情况下,需要对异常内容与正常响应时的原始内容进行比较,或者是测量响应的延迟时间。此外,为应对可能存在的SQL盲注入,应准备一些会引起应用产生异常的无效请求,包括参数类型替换、参数缺失等内容,用来对Web应用系统的错误处理机制进行初步检测。在处理请求中的多个参数时,应保证除了待测试参数外,其他参数都是合法有效的。
上述分析服务响应包括如下内容:
(1)基于关键字的匹配和HTTP响应代码的服务器出错信息分析;
(2)异常响应内容与原始响应内容的比较;
(3)测量响应的延迟时间。
本实施例定义待验证的网页地址为http://192.168.0.11:8080/info/exceed_fine_bulletin.php,根据步骤3得到的表单提交向量,将“FormData”中的参数值作为数据注入点,向服务器提交测试用例,分析服务器响应信息。由于“ForData”包含3个参数:s_type、q和submit,应对3个参数都进行测试。表6给出了针对这3个参数的测试用例及服务器响应信息。
表6测试用例及服务器响应信息
序号 | 测试参数 | 测试用例 | HTTP响应代码 | 网页哈希值 |
1 | s_type | s_type=certid’ | 200 | 改变 |
2 | q | q=xxxxxx’ | 500 | 改变 |
3 | submit | submit=%E6%A3%80%E7%B4%A2%27 | 200 | 未变 |
4 | s_type | s_type=random string | 200 | 未变 |
5 | s_type | s_type=random number | 200 | 未变 |
6 | q | q=random string1 | 200 | 改变 |
7 | q | q=random string2 | 200 | 改变 |
8 | submit | submit=random string1 | 200 | 未变 |
9 | submit | submit=random string2 | 200 | 未变 |
7、建立存在SQL注入漏洞的判定规则。
方法使用下列规则来确认SQL注入漏洞的存在:
1)注入命令后引起数据库出错,响应信息中包含出错类型及代码位置等信息;
2)注入命令后数据库运行正常,响应信息与原始信息相同。例如注入永真条件或空条件时;
3)Web应用系统响应时间受注入的延时参数影响,与原始响应时延不一致;
4)注入无效命令后,响应总定位到某个固定位置或内容,可能存在盲注入漏洞;
5)如果没有规则能够确认SQL注入漏洞存在,则当前的检测项被认为是疑似漏洞,待详细分析。
根据步骤6的测试结果,2号测试中,服务器响应代码为500,表示注入符号后响应信息中包含出错信息。依据本步骤给出的判定规则1),待验证网址http://192.168.0.11:8080/info/exceed_fine_bulletin.php表单中的查询参数“q”存在注入漏洞,表单提交参数“q”为该SQL注入漏洞的注入点。
在上述SQL注入漏洞检测方法中,公开了一种在Web2.0环境下进行SQL注入漏洞检测的注入点提取方法,该方法可应用于Web2.0网站安全性检测中,以便对包含脚本的复杂网页进行SQL注入漏洞检测。
由于本发明中使用开源JavaScript解析引擎的主要目的是为了执行并评估网页中JavaScript脚本的执行效果。因此,为了提高JavaScript解析引擎的执行效率,创建的主要宿主对象通过引擎提供的编程接口创建。该方法的优点是可以在对象中编写本地函数来操作对象本身,方便对象的操作。同时重点分析与提取任务有关的对象,对于其他对象及其方法进行简化设计。在实际处理流程中,重点是获得脚本执行后得到的URL参数,此参数即动态链接。例如仅实现其接口而不执行任何类似浏览器的操作,从而加快提取复杂网页数据注入点的速度。
根据本发明公开的脚本解析和数据注入点提取方法,解决了传统方法无法正确获取Web2.0网站上的数据注入点等问题,提高了检测覆盖率。同时通过构建有针对性的测试用例,对系统潜在的SQL注入漏洞进行全面检测,总结的5条判定规则可使得检测结果的分析更加快速高效,与传统方法相比,其准确度更高。另外,随着Web2.0技术等的发展,更多更复杂的交互内容将呈现在客户端网页中,其分析处理难度加大,传统的检测技术需要完善和改进,因此本发明可以很好地应用于富客户端的网页内容中。
Claims (7)
1.一种SQL注入漏洞检测中的注入点提取方法,其特征在于包括以下步骤:
步骤1、根据被测试网站起始URL进行的预处理;分析页面Frame帧结构,下载帧集合中的所有帧页面;下载网页中链接的全部脚本文件;获取并存储测试网站设置的Cookies;
步骤2、根据网页HTML源码中的标记对或者关键字区分网页类型;网页HTML源码中不包含“<script></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.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的表单提交向量是Host、Port、PageURL、ActionURL、Method、FormData、Cookies或者Charset;其中,Host是待测试Web应用系统的主机IP地址;Port是Web服务器的端口号;PageURL是包含表单的网页地址;ActionURL是表单实际请求的URL;Method是表单请求的方法;FormData是表单提交的数据实体;Cookies是访问网页时Web应用系统设置的Cookies;Charset是网页的编码字符集。
3.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的链接规范化处理步骤包括:删除锚点,过滤协议,将链接到压缩文件、文档、图像、视频、音频以及二进制文件的链接过滤。
4.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的脚本引擎是开源JavaScript引擎。
5.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的自定义DOM对象和BOM对象是使用JavaScript引擎的编程接口创建的宿主对象。
6.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的分析服务响应包括:基于关键字的匹配和HTTP响应代码的服务器出错信息分析;异常响应内容与原始响应内容的比较;测量响应的延迟时间。
7.根据权利要求1所述的SQL注入漏洞检测中的注入点提取方法,其特征在于所述的SQL注入漏洞的判定规则是:注入命令后引起数据库出错,响应信息中包含出错类型及代码位置信息;注入命令后数据库运行正常,响应信息与原始信息相同;Web应用系统响应时间受注入的延时参数影响,与原始响应时延不一致;注入无效命令后,响应总定位到某个固定位置或内容,可能存在盲注入漏洞;如果没有规则能够确认SQL注入漏洞存在,则当前的检测项被认为是疑似漏洞,待详细分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210268735.3A CN102831345B (zh) | 2012-07-30 | 2012-07-30 | Sql注入漏洞检测中的注入点提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210268735.3A CN102831345B (zh) | 2012-07-30 | 2012-07-30 | Sql注入漏洞检测中的注入点提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102831345A CN102831345A (zh) | 2012-12-19 |
CN102831345B true CN102831345B (zh) | 2015-01-28 |
Family
ID=47334478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210268735.3A Expired - Fee Related CN102831345B (zh) | 2012-07-30 | 2012-07-30 | Sql注入漏洞检测中的注入点提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102831345B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077348B (zh) * | 2012-12-28 | 2016-03-02 | 华为技术有限公司 | 一种Web站点漏洞扫描方法和装置 |
CN104657659B (zh) * | 2013-11-20 | 2019-02-05 | 腾讯科技(深圳)有限公司 | 一种存储跨站攻击脚本漏洞检测方法、装置及系统 |
CN104778070B (zh) * | 2014-01-15 | 2018-07-06 | 富士通株式会社 | 隐藏变量抽取方法和设备以及信息提取方法和设备 |
CN104881355A (zh) * | 2014-02-27 | 2015-09-02 | 国际商业机器公司 | 一种用于检测测试覆盖的方法和系统 |
CN105072095B (zh) * | 2015-07-20 | 2019-03-26 | 北京神州绿盟信息安全科技股份有限公司 | 一种检测sql注入漏洞的方法及装置 |
CN107704377B (zh) * | 2016-09-28 | 2020-09-11 | 华侨大学 | 二阶污点传播型漏洞的检测方法 |
CN106790195B (zh) * | 2016-12-30 | 2019-11-19 | 北京神州绿盟信息安全科技股份有限公司 | 一种sql注入检测方法及装置 |
CN106845248A (zh) * | 2017-01-18 | 2017-06-13 | 北京工业大学 | 一种基于状态转换图的xss漏洞检测方法 |
CN108573152A (zh) * | 2017-03-14 | 2018-09-25 | 北京京东尚科信息技术有限公司 | 检测sql注入攻击的方法、装置、服务器和存储介质 |
CN108319822B (zh) * | 2018-01-05 | 2020-05-12 | 武汉斗鱼网络科技有限公司 | 一种保护网页代码的方法、存储介质、电子设备和系统 |
CN108521392B (zh) * | 2018-01-25 | 2020-10-16 | 华东师范大学 | 一种双向流量的sql注入攻击检测方法 |
CN108446224B (zh) * | 2018-03-06 | 2021-12-28 | 福建天泉教育科技有限公司 | 移动端上应用程序的性能分析方法、存储介质 |
CN108810032B (zh) * | 2018-07-24 | 2020-05-01 | 百卓网络科技有限公司 | 一种基于代理的Web跨站安全处理方法 |
WO2020034212A1 (zh) * | 2018-08-17 | 2020-02-20 | 华为技术有限公司 | 检测web网页安全性的方法和装置 |
CN109005192A (zh) * | 2018-09-03 | 2018-12-14 | 杭州安恒信息技术股份有限公司 | 一种检测crlf注入漏洞的方法及装置 |
CN109688130A (zh) * | 2018-12-24 | 2019-04-26 | 北京奇虎科技有限公司 | 网页劫持检测方法、装置及计算机存储介质 |
CN110363008B (zh) * | 2019-07-11 | 2021-08-06 | 北京长亭未来科技有限公司 | 一种sql时间盲注的漏洞检测方法、装置和存储设备 |
CN110460606B (zh) * | 2019-08-16 | 2021-10-12 | 中国银行股份有限公司 | 一种二阶sql注入漏洞检测方法、装置及设备 |
CN110912776B (zh) * | 2019-11-27 | 2021-09-28 | 中国科学院信息工程研究所 | 一种实体路由器管理协议的自动化模糊测试方法及装置 |
CN111064735B (zh) * | 2019-12-25 | 2021-10-15 | 南开大学 | 一种电力信息系统sql注入漏洞检测方法及系统 |
CN111258892B (zh) * | 2020-01-12 | 2022-11-18 | 大连理工大学 | 基于组合变异的sql注入测试用例生成方法 |
CN111770079B (zh) * | 2020-06-24 | 2022-09-02 | 绿盟科技集团股份有限公司 | 一种web框架注入漏洞检测方法及装置 |
CN112699373A (zh) * | 2020-12-24 | 2021-04-23 | 山东鲁能软件技术有限公司 | 一种sql注入漏洞批量检测的方法及装置 |
CN113872965B (zh) * | 2021-09-26 | 2023-05-09 | 国网四川省电力公司乐山供电公司 | 一种基于Snort引擎的SQL注入检测方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101312393A (zh) * | 2007-05-24 | 2008-11-26 | 北京启明星辰信息技术有限公司 | 一种sql注入漏洞检测方法及系统 |
-
2012
- 2012-07-30 CN CN201210268735.3A patent/CN102831345B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101312393A (zh) * | 2007-05-24 | 2008-11-26 | 北京启明星辰信息技术有限公司 | 一种sql注入漏洞检测方法及系统 |
Non-Patent Citations (2)
Title |
---|
《基于改进网络爬虫技术的SQL注入漏洞检测》;彭庚等;《计算机应用研究》;20100731;第27卷(第7期);第2605-2607页 * |
周琰.《SQL注入检测方法的研究与实现》.《中国优秀硕士学位论文全文数据库(信息科技辑)》.2012,(第05期),第15-25页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102831345A (zh) | 2012-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102831345B (zh) | Sql注入漏洞检测中的注入点提取方法 | |
US10855696B2 (en) | Variable runtime transpilation | |
CN101964025B (zh) | Xss检测方法和设备 | |
CN103559235B (zh) | 一种在线社交网络恶意网页检测识别方法 | |
CN103530564B (zh) | 一种sql注入漏洞测试与验证方法及系统 | |
CN104766014A (zh) | 用于检测恶意网址的方法和系统 | |
CN103279710B (zh) | Internet信息系统恶意代码的检测方法和系统 | |
CN107659570A (zh) | 基于机器学习与动静态分析的Webshell检测方法及系统 | |
US20110239294A1 (en) | System and method for detecting malicious script | |
Pellegrino et al. | jäk: Using dynamic analysis to crawl and test modern web applications | |
CN103065095A (zh) | 一种基于指纹识别技术的web漏洞扫描方法和漏洞扫描器 | |
KR101952248B1 (ko) | 2차원 코드를 해석하는 방법 및 장치, 컴퓨터 판독 가능한 저장 매체, 컴퓨터 프로그램 제품 및 단말기 장치 | |
CN109347882B (zh) | 网页木马监测方法、装置、设备及存储介质 | |
CN101312393A (zh) | 一种sql注入漏洞检测方法及系统 | |
CN111835777B (zh) | 一种异常流量检测方法、装置、设备及介质 | |
CN106909846B (zh) | 一种基于虚拟解析的漏洞检测方法及其装置 | |
CN104881607A (zh) | 一种基于模拟浏览器行为的xss漏洞检测系统 | |
CN102999420A (zh) | 基于dom的跨站脚本漏洞测试方法和系统 | |
CN104956372A (zh) | 使用运行时和静态代码分析来确定动态安全扫描的覆盖率 | |
CN104063401A (zh) | 一种网页样式地址合并的方法和装置 | |
CN105488400A (zh) | 一种恶意网页综合检测方法及系统 | |
CN106250761B (zh) | 一种识别web自动化工具的设备、装置及方法 | |
CN106845248A (zh) | 一种基于状态转换图的xss漏洞检测方法 | |
CN103902913A (zh) | 一种用于对web应用进行安全处理的方法与设备 | |
CN104717226A (zh) | 一种针对网址的检测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150128 Termination date: 20150730 |
|
EXPY | Termination of patent right or utility model |