|
|
|
联系客服020-83701501

SQL盲注攻击技术综述

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
SQL盲注攻击技艺综述

SQL盲注攻击技艺综述
coolswallow of Javaphile (coolswallow@shaolin.org.cn)
Blind SQL Injection Techniques: A Survey
Abstract: This paper gives a survey of current Blind SQL Injection Techniques. It first introduces the definition of SQL Injection and its risk, and reviews several solutions proposed to solve the problem and their each disadvantages. Then, the paper discusses that if detailed error messages are suppressed, how to identify SQL Injections based on minimal reaction of the server, and how to identify SQL Injection vulnerable parameters, to generate valid injection syntax and to build the required exploit. At last, an injection of UNION SELECT statements is described in detail, including how to count the columns and how to identify columns types. Although the provided examples in the paper refer to Microsoft SQL Server and Oracle only, the same techniques can be applied to other Databases as well. By the paper, we hope to make it clear that application level vulnerabilities must be handled by application level solutions, and that relying on suppressed error messages for protection from SQL Injection is eventually useless.
Key words: SQL Injection; Blind Injection; Database Attack; Web Application Security
摘 要: 本文对目前SQL注入攻击中哄骗的盲注技艺停止了综述。本文首先介绍了平凡SQL注入技艺的界说和陵犯,回首了几种已被提出的针对SQL注入的贯注身手及其各自的弱点,尔后探究了在过失动静被屏蔽或拆穿的状况下探测SQL注入破绽可否具有所需的效能器最小响应,以及如何必定注入点和必定切确的注入句法并结构行使代码。末了本文还以UNION SELECT语句为例,具体介绍了行使该语句在盲注条件下统计数据表的列数和判断列的数据样板的举措和步骤。本文中给出的例子都是针对Microsoft SQL Server和Oracle的,但同样的技艺也可能被行使到其他数据库系统。本文的目的是明确行使步伐级此外破绽只能经由行使步伐级此外办理伎俩解决,仅仅托付屏蔽过失动静来回避SQL注入攻击是无益的。
关键词: SQL注入;盲注;数据库攻击;Internet行使步伐平安
1 简介
1.1 平凡SQL注入技艺概述
目前不有对SQL注入技艺的标准界说,微软中国技艺中心从2个方面停止了描画[1]:
(1) 剧本注入式的攻击
(2) 歹意用户输出用来影响被执行的SQL剧本
依照Chris Anley的界说[2], 当一个攻击者经由在查询语句中插入一系列的SQL语句来将数据写入到行使步伐中,这种举措即可能界说成SQL注入。Stephen Kost[3]给出了这种攻击内容的另一个特色,“从一个数据库得到未经受权的会见和直接检索”,SQL注入攻击就其本质而言,它行使的工具是SQL的语法,针对的是行使步伐开辟者编程历程中的破绽,“当攻击者也许垄断数据,往行使步伐中插入一些SQL语句时,SQL注入攻击就产生了”。理论上,SQL注入是具有于常见的多连贯的行使步伐中一种破绽,攻击者经由生手使步伐中事先界说好的查询语句着末加之额外的SQL语句元素,欺骗数据库效能器执行非受权的恣意查询。这种行使步伐突出是Internet行使步伐(Web Application),它同意用户输出查询条件,并将查询条件嵌入SQL哀求语句

中,发送到与该行使步伐相干联的数据库效能器中去执行。经由结构一些畸形的输出,攻击者也许垄断这种哀求语句去得到事先未知的后果。
在侵陵方面,SQL注入攻击是位居火线的,与缓冲区溢出等破绽根柢至关。并且假如要实施缓冲区溢出攻击,攻击者必需首先能绕过站点的防火墙;而关于SQL注入攻击,因为防火墙为了哄骗户能会见Internet行使步伐,必需同意从Internet到Web效能器的正向连贯,因此一旦Internet行使步伐有注入破绽,攻击者即可能直接会见数据库进而甚至也许得到数据库所在的效能器的会见权,因此在某些状况下,SQL注入攻击的侵陵要高于部分其他破绽。
SQL注入攻击行使的是SQL语法,这使得这种攻击具有普及性。实际上说,关于部分基于SQL措辞标准的数据库软件征求SQL Server,Oracle,MySQL, DB2,Informix等以及与之连贯的Internet行使步伐征求Active/Java Server Pages, Cold Fusion Management, PHP或Perl等都是有效的。当然各类软件有大师的特性,理论的攻击代码或者不尽相同。SQL注入攻击的道理相对繁冗,且各类基于数据库系统的行使步伐被普及哄骗,介绍注入破绽和行使举措的果然出版物也大批问世,构成比年SQL注入攻击的数量不绝增长,注入攻击的内容也有被滥用的趋势。
关于针对MS SQL Server的平凡SQL注入技艺的具体介绍,可能参考Chris Anley所撰的“SQL Server行使步伐中的低级SQL注入”[2]一文和其时续“更多的低级SQL注入”[4],Cesar Cerrundo所撰的“行使SQL注入把持Microsoft SQL Server” [5]一文,以及SPI执行室的Kevin Spett撰写的白皮书“SQL注入 – 你的Internet行使步伐可否会受攻击?” [6];而针对Oracle的平凡SQL注入技艺介绍,可能参考Stephen Kost的“针对Oracle开辟职员的SQL注入攻击简介”[3]一文。
1.2 SQL注入攻击的贯注身手
因为愈来愈多的攻击行使了SQL注入技艺,也随之产生生机了许多试图解决注入破绽的办理。目前被提出的办理有:
(1) 在效能正直式处理过来对提交数据的合法性停止查抄;
(2) 封装客户端提交动静;
(3) 调换或删除飞快字符/字符串;
(4) 屏蔽出错动静。
办理(1)被公认是最基本的解决办理,在确认客户真个输出合法过来,效能端拒绝停止关键性的处理垄断,不过这需要开辟者也许以一种平安的编制来创立Internet行使步伐,虽然已有大批针对在Internet行使步伐开辟中如何平安地会见数据库的文档出版,但仍然有许多开辟者缺乏丰裕的平安理解,构成开收回的产品中依旧具有注入破绽;办理(2)的做法需要RDBMS的反对,目前只要Oracle采取该技艺;办理(3)则是一种不完全的解决步骤,譬喻,当客户真个输出为“…ccmdmcmdd…”时,在对飞快字符串“cmd”调换删除当前,剩下的字符恰恰是“…cmd…”;办理(4)是目前最常被采取的举措,许多平安文档都以为SQL注入攻击需要通差池误动静收集动静,有些甚至声称某些非凡的工作若缺乏具体的过失动静则不克不及完成,这使许多平安专家组成一种概念,即注入攻击在缺乏具体过失的状况下不克不及实施。
而理论上,屏蔽过失动静是在效能端处理结束当前停止弥补,攻击其实已经产生,只是操持阻止攻击者晓得攻击的后果罢了。本文所介绍SQL盲注技艺就是一些攻击者哄骗的新技艺,其在过失动静被屏蔽的状况下使攻击者仍能得到所需的动静,并继续实施注入攻击。
1.3 本文的结构结构
为了熟习盲注攻击,咱们首先将介绍必定SQL注入破绽所需的效能器的最小响应;其次,咱们将结构一个契合语法的SQL哀求,并可能将之调换成任何有效的SQL哀求;末了,咱们将探究在不有具体过失动静的状况下如何行使UNION SELECT语句。本文所探究的盲注攻击的条件是咱们在攻击前对Internet行使步伐、数据库样板、表结构等等动静都无所不知,这些动静都需要在注入的历程中经由探测得到。

2 必定注入破绽
要停止SQL注入攻击,首先当然是确认要攻击的Internet行使步伐具有注入破绽,因此攻击者首先必需能创设一些与效能器产生生机的过失相干的揭示样板。诚然过失动静大师已被屏蔽,Internet行使步伐仍然具有能辨别切确哀求和过失哀求的才具,攻击者只需要进修去辨认这些揭示,探究相干过失,并确认其可否和SQL相干。
2.1 辨认过失
一个Internet行使步伐次要会产生生机两种样板的过失,第一种是由Web效能器产生生机的代码非常(exception),相同于“500:Internal Server Error”,突出假如SQL注入语句出现语法过失,譬喻出现未闭合的引号,就会使效能器抛出这种非常。假如要屏蔽该类过失,突出会采取将默许的过失动静调换成一个开初定制的HTML页面,但只要考察到有这种响应出现,即可能确认其实是产生了效能器过失。在其他状况下,为了进一步屏蔽该类过失,有些效能器一出现非常,会繁冗地跳转到主页面或前一个会见过的页面, 大约阐扬分析一条繁冗的过失动静但不提供任何细节。
第二类过失是由行使步伐代码产生生机的,这代表其开辟者有较好的编程风气。这种行使步伐思索到或者会出现一些无效的状况,并别离为之产生生机了一个特定的过失动静。诚然出现这种过失突出会前往一个哀求有效的响应(200 OK),但页面仍然会跳转到主页面,大约采取某种隐藏动静的门径,相同于“Internal Server Error”。
为了辨别这两种过失,咱们看一个例子:有两个电子商务的行使步伐,A和B,两个行使步伐都哄骗抗衡个叫proddetails.asp的页面,该页面等待得到一个参数,叫ProdID。它得到该参数后,从数据库中提取响应的产品具体动静数据,尔后对前往的后果停止一些处理。两个行使步伐都是经由一个产品列表页面上的链接调用proddetails.asp,因此能保证ProdID不绝都是具有且有效的。行使步伐A以为多么就不会出现标题问题,因此对参数不做额外的查抄,而假如攻击者扭转了ProdID,插入了一个在数据表中不具有的id,数据库就会前往一个空纪录。因为行使步伐A不有猜度或者会出现空纪录,当它试图去处理该纪录中的数据时,即或者会出现非常,产生生机一个“500:Internal Server Error”。而行使步伐B,会在对纪录停止处理前确认纪录的巨细超过0,假如是空纪录,则会出现一个过失揭示“该产品不具有”,大约开辟者为了隐藏该过失,会将页面重新定位到产品的列表页面。
因此攻击者为了停止SQL盲注,会首先尝试提交一些无效的哀求,并考察行使步伐如那边理这些过失,以及假如出现SQL过失会产生什么状况。
2.2 定位过失
对要攻击的行使步伐有了末尾的理解后,攻击者会试图定位由待遇结构的输出而产生生机的过失动静。这时,攻击者就会哄骗标准的SQL注入测试技艺,譬喻增加一些SQL关键字(如OR,AND等)和一些META字符(如;或’等)。每一个参数都被独马上停止测试,而得到的响应将被测验用来判断可否产生生机了过失。经由一个拦挡代办代办署理效能器(intercepting proxy)大约相同的工具可能随便地辨认页面跳转和其他一些可猜测的隐藏过失,而任何一个前往过失的参数都有或者具有SQL注入破绽。而在零丁测试每个参数历程中,必需保证其他参数都是有效的,因为需要提防除注入之外任何其他或者的缘故起因所导致的过失影响了判断后果。测试的后果突出是一个可疑参数的列表,列表中的一些参数或者险些可能停止注入行使,此外一些参数则或者是由一些SQL无关的过失所构成,因此需要被剔除。攻击者接下来就需要从这些参数中筛选真正具有注入破绽的参数,咱们称之为必定注入点。
2.3 必定注入点
SQL字段可能被别离为三个次要样板:数字、字符串和日期。虽然每个样板都有其特性,但却与注入的历程无关。每一个从Internet行使步伐提交给SQL查询的参数都属于以上三个样板中的一类,此中数字参数被直接提交给效能器,而字符串和日期则需要加之引号才被提交,譬喻:
SELECT * FROM Products WHERE ProdID = 4与SELECT * FROM Products WHERE ProdName = ‘Book’
而SQL效能器,并不爱护它接受到的是什么样板的参数评释式,只要该评释式是相干的样板便可。而这个特性则使攻击者也许很繁冗地确认一个过失可否和SQL相干。假如是数字样板,最繁冗的处理门径是哄骗根柢的算术垄断,譬喻如下哀求:
/mysite/proddetails.asp?ProdID=4
测试该参数的一种门径是插入4’作为参数,另一种是哄骗3+1作为参数,假如这两个参数已直接被提交给SQL哀求语句,则将组成如下两个SQL哀求语句:
(1) SELECT * FROM Products WHERE ProdID = 4′
(2) SELECT * FROM Products WHERE ProdID = 3 + 1
第一个SQL语法有标题问题,将一定会产生生机一个过失,而第二个假如被得胜地执行,前往和最后的哀求(即ProdID等于4)同样的产品动静,这就揭示该参数是具有注入破绽的。
相同的技艺可能被行使于用一个吻合SQL语法的字符串评释式调换该参数,这里有两个区分:第一,字符串阐扬分析式是放在引号中的,因此需要阻断引号;第二,不同的SQL效能器连结字符串的语法不同,譬喻MS SQL Server哄骗标志+来连结字符串,而Oracle哄骗标志||来连结。譬喻如下哀求:
/mysite/proddetails.asp?ProdName=Book
要测试该ProdName参数可否有注入破绽,可能先其调换成一个无效的字符串譬喻Book’,尔后再调换成一个或者生成切确字符串的评释式,譬喻B’+’ook(关于Oracle,是B’||’ook)。这就会组成如下两个SQL哀求语句:
(1) SELECT * FROM Products WHERE ProdName = ‘Book”
(2) SELECT * FROM Products WHERE ProdID = ‘B’ + ‘ook’
则第一个仍然或者产生生机一个SQL过失,而第二个则或者前往和最后的哀求同样的值为Book的产品。
咱们把稳到,即便行使步伐已经由滤了’和+等META字符,咱们仍然可能在输出时过把字符转换成URL编码(即字符ASCII码的16进制)来绕过查抄,譬喻:
/mysite/proddetails.asp?ProdID=3+1就等于/mysite/proddetails.asp?ProdID=3%2B1
/mysite/proddetails.asp?ProdID=B’+’ook就等于/mysite/proddetails.asp?ProdID=B%27%2B%27ook
相同的,任何评释式均可能用来调换最后的参数。而非凡的系统函数也可能被用来提交以前往一个数字,一个字符串或一个日期,譬喻Oracle中sysdate前往一个日期评释式,而在SQL Server中,getdate()会前来日期评释式。其他的技艺同样可能被用来判断可否具有SQL注入破绽。
经由以上介绍可能创举,即便不有具体的过失动静,关于攻击者来说,判断可否具有SQL注入破绽仍然是一个迥殊繁冗的工作。
3 实施注入攻击
攻击者在必定注入点后,就要尝试停止注入行使,这需要其能必定吻合SQL语法的注入哀求评释式,判断出靠山数据库的样板,尔后结构出所需的行使代码。
3.1 必定切确的注入句法
这是SQL盲注攻击中最难也最有手法的步骤,假如最后的SQL哀求语句很繁冗,那么必定切确的注入语法也相对繁冗,而假如最后的SQL哀求语句较繁杂,那么要想突破其限定就需要多次的尝试,但停止这些尝试所需要的根柢技艺倒是迥殊繁冗。
必定根柢的句法的历程即经由标准的SELECT … WHERE语句,被注入的参数(即注入点)就是WHERE语句的一部门。为了必定切确的注入句法,攻击者必需也许在最后的WHERE语句后增加其他数据,使其能前往非预期的后果。对一些繁冗的行使步伐,仅仅加之OR 1=1即可能完成,但在大多数状况下假如想结构出战败的行使代码,多么做当然是不敷的。时常需要解决的标题问题是如何配对插入语标志(parenthesis,譬喻成对的括号),使之能与反面的已哄骗的标志,譬喻左括号成家。此外常见的标题问题是一个被扭转的哀求语句或者会导致行使步伐产生生机其他过失,这个过失时常难于和一个SQL过失相辨别,譬喻行使步伐一次假如只能处理一个纪录,在哀求语句后增加OR 1=1或者使数据库前往1000条纪录,这时就会产生生机过失。因为WHERE语句本质上是一串经由OR、AND或插入语标志连贯起来的值为TRUE或FALSE的评释式,因此要想必定切确的注入句法,关键就在于可否战败地突破插入语标志限定并能得胜地结束哀求语句,这就需要停止多次组合测试。譬喻,增加AND 1=2能将扫数评释式的值变成FALSE,而增加OR 1=2则不会对扫数评释式的值产生生机影响(除非垄断符有优先级)。
关于一些注入行使,仅仅改变WHERE语句就丰裕了,但关于其他状况,譬喻UNION SELECT注入或存储历程(stored procedures)注入,还需要能先得胜地结束扫数SQL哀求语句,尔后伎俩增加其他攻击者所需要的SQL语句。在这种状况下,攻击者可能选择哄骗SQL告白标志来结束语句,该标志是两个延续的破折号(–),它申请SQL Server疏忽其时抗衡行的部分输出。譬喻,一个登录页面需要会见者输出用户名和暗码,并将其提交给SQL哀求语句:
SELECT Username, UserID, Password FROM Users WHERE Username = ‘user’ AND Password = ‘pass’
经由输出john’–作为用户名,将会结构出如下WHERE语句:
WHERE Username = ‘john’ –‘AND Password = ‘pass’
这时,该语句岂但吻合SQL语法,并且还哄骗户跳过了暗码认证。但是假如是此外一种WHERE语句:
WHERE (Username = ‘user’ AND Password = ‘pass’)
把稳到这里出现了插入语标志,这时再哄骗john’–作为用户名,哀求语句就会过失:
WHERE (Username = ‘john’ –‘ AND Password = ‘pass’)
这是因为有未配对的插入语标志,哀求语句就不会被执行。
这个例子阐扬分析出哄骗告白标志也许用来判断哀求语句可否被得胜地结束了,假如增加了告白标志且不有产生生机过失,这就意味着告白标志前的语句已经得胜地被结束。假如出现了过失,这就需要攻击者停止更多的哀求尝试。
3.2 判断数据库样板
攻击者一旦必定了切确的注入句法后,就会初步行使注入去判断靠山数据库的样板,这个步骤比必定注入句法要繁冗许多。攻击者突出会哄骗如下几种手法,这些手法是基于不同样板数据库引擎在具体实现上的差别。下面只介绍如何辨别Oracle和MS SQL Server:
最繁冗的门径,就是反面提到的行使字符串的连结标志,在注入句法已经必定的状况下,攻击者可能对WHERE语句冷静地增加额外的评释式,那么即可能行使字符串的比较来辨别数据库,譬喻:
AND ‘xxx’ = ‘x’ + ‘xx’ (大约 AND %27xxx%27+%3D+%27x%27+%2B+%27xx%27)
经由将+调换成||,即可能判断出是数据库是Oracle还是MS SQL Server,大约是其他样板。
其他的门径是行使分号字符(即;),在SQL中,分号是用来将几个SQL语句连贯在抗衡行中。在注入时,也可能在注入代码中哄骗分号,但Oracle驱动步伐却不同意多么哄骗分号。假如在反面哄骗告白标志时不有出现过失,那么在告白标志前加之分号对MS SQL Server是不有影响的,但假如Oracle就会产生生机过失。此外,还可能哄骗COMMIT语句来确认可否同意在分号后再执行其他语句(譬喻,注入语句xxx’ ; COMMIT –),假如不有出现过失即可能以为同意多句执行。
末了,评释式还可能被调换成能前往切确值的系统函数,因为不同样板的数据库哄骗的系统函数也是不同的,因此也可能经由哄骗系统函数来必定数据库样板,譬喻2.3节提到的MS SQL Server的日期函数getdate()与Oracle的sysdate.
3.3 结构注入行使代码
当部分相干的动静都已得到后,攻击者即可能初步停止注入行使,并且在结构注入行使代码历程中也不再需要具体的过失动静,结构行使代码大师可能参考其他描画标准SQL注入攻击的文档。

因为关于平凡的SQL注入行使,已经有许多其他论文停止了具体的探究,故本文只会鄙人一节介绍一种UNION SELECT注入。
4 UNION SELECT注入
诚然经由扭转SELECT…WHERE语句来注入关于许多行使步伐迥殊有效,但在盲注状况下,攻击者仍然快活哄骗UNION SELECT语句,这是因为与WHERE语句所停止的垄断不同,哄骗UNION SELECT可能让攻击者在不有过失动静的状况下依旧能会见数据库中部分表。
停止UNION SELECT注入需要事先获知数据库的表中的字段个数和样板,而这些动静突出被以为在不有具体过失动静的揭示下是不或者得到的,但本文下面就将给出解决该标题问题的举措。www.91ri.org
此外需要把稳的是,停止UNION SELECT的前提是攻击者已经必定了切确的注入句法,本文的反面一节已经阐清楚这在盲注条件下是可能实现的,并且在哄骗UNION SELECT语句过来,SQL语句中部分的插入语标志都理应已经完成配对,从而可能冷静地哄骗UNION大约其他指令停止注入。UNION SELECT还申请当前语句和最后的语句查询的动静必需具有相同的数和相同的数据样板,不然就会出错。
4.1 统计列数
当过失动静不有被屏蔽时,要得到列数只需要在停止UNION SELECT注入时每次尝试哄骗不同的字段数便可,当过失动静由“列数不成家”变成“列的样板不成家”时,当前尝试的列数就是切确的。但在盲注条件下,因为咱们对无奈获悉过失动静到底是哪一个,以是该举措也就得到了感染。
新的门径是行使ORDER BY语句,在SELECT语句末了加之ORDER BY也许改变前往的纪录集的次第,突出是按一个指定的列名的值停止排序。譬喻,当经由产品号查询产品时,一个有效的注入语句以下:
SELECT ProdNum FROM Products WHERE (ProdID=1234) ORDER BY ProdNum —
AND ProdName=’Computer’) AND UserName=’john’
人们时常会疏忽的是ORDER BY语句后还可能哄骗数字指代列名,在上例中假如ProdNum是查询哀求前往的纪录中的第一列,则注入1234) ORDER BY 1–前往的后果是同样的。因为上例查询哀求只前往一个字段,注入1234) ORDER BY 2 –就会出错,即前往的纪录无奈按指定的第二个字段排序。多么,ORDER BY即可能被行使来对列数停止统计了。因为每个SELECT语句都至多前往一个字段,故攻击者可能先在注入句法中增加ORDER BY 1来必定语句可否能被切确执行,无意偶尔对字段的排序也或者会产生生机过失,这时增加关键字ASC或DESC可能解决该标题问题。一旦必定ORDER BY句法是有效的,攻击者就会对排序列号从列1到列100停止遍历(大约到列1000,直到列号被必定为无效),实际上陷阱出现第一个过失时,前一个列号就是要统计的列数,但在理论状况中,有些字段或者不同意排序,那么在出现第一次过失时可能再多尝试一到两个数字,以确认列号已遍历完。
4.2 判断列的数据样板
在统计完列数后,攻击者需要再判断列的数据样板,在盲注状况下判断样板也是有手法的,因为UNION SELECT申请先后查询语句查询的字段样板相同,故假如字段数无量,可能繁冗地行使UNION SELECT语句对字段样板停止暴力穷举(brute force),但若字段数较多,判断就会出现标题问题。依照前文,字段的样板只要数字、字符串和日期三种或者的样板,一旦字段数有10个,那么就意味着有310(约60,000)种或者的组合,假如每一秒可能主动停止20次尝试,穷举一遍也需要近一个小时,假如字段数更多,那么测试所需功夫就会令人难以忍受。
一种繁冗的门径是行使SQL的关键字NULL,与动静字段的注入需要辨别是数字样板还是字符样板不同,NULL可能成家任何一种数据样板。因此可能注入一个部分查询字段都为NULL的UNION SELECT语句,那么就不会出现任何样板不成家的过失。让咱们再举一个与反面相同的例子:
SELECT ProdNum,ProdType,ProdPrice,ProdProvider FROM Products
WHERE (ProdID=1234 AND ProdName=’ Computer’) AND UserName=’john’

假如攻击者已经得到了列数(在该例中为4),那么即可能很繁冗地结构一个UNION SELECT语句,此中部分查询字段都为NULL,还需要结构一个不会产生生机权限标题问题的FROM语句。关于MS SQL Server,即便疏忽FROM语句也不会出错,但关于Oracle,则可能哄骗一个名叫dual的表。末了,还需要一个值一定为FALSE的WHERE语句(譬喻WHERE 1=2),这是为了确保查询不会前往只包罗null值的纪录集,以杜绝产生生机其他或者的过失。那么针对MS SQL Server的注入语句以下:
SELECT ProdNum,ProdType,ProdPrice,ProdProvider FROM Products
WHERE (ProdID=1234) UNION SELECT NULL,NULL,NULL,NULL
WHERE 1=2 — AND ProdName=’ Computer’) AND UserName=’john’
这个NULL注入语句有两个目的,次要目的是结构一个不会产生生机任何过失的UNION SELECT语句以测试UNION语句可否可能被执行,另一个目的是为了对数据库样板的判断停止100%确认(可能经由在FROM语句里增加一个数据库开辟商预置的表名停止测试)。
假如NULL注入语句被得胜执行,那么即可能快捷地对每个列的样板停止判断。在每一轮尝试中,只对一个字段样板停止测试,因为样板只要三类,以是每个字段最多被测试三次就会有后果,多么尝试的次数最可能是列数的三倍,而不是以3为底数以列数为指数的次数。假如ProdNum属于数字样板,其他三个字段都属于字符串样板,那么如下步伐模范的注入语句即可能判断出切确的样板:
? 1234) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 —
无错 – 句法切确,哄骗的是MS SQL Server数据库
? 1234) UNION SELECT 1,NULL,NULL,NULL WHERE 1=2 —
无错 – 第一个字段是数字样板
? 1234) UNION SELECT 1,2,NULL,NULL WHERE 1=2 —
出错 – 第二个字段不是数字样板
? 1234) UNION SELECT 1,’2’,NULL,NULL WHERE 1=2 —
无错 – 第二个字段是字符串样板
? 1234) UNION SELECT 1,’2’,3,NULL WHERE 1=2 —
出错 – 第三个字段不是数字样板
? 1234) UNION SELECT 1,’2’,’3’,NULL WHERE 1=2 —
无错 – 第三个字段是字符串样板
? 1234) UNION SELECT 1,’2’,’3’,4 WHERE 1=2 —
出错 – 第四个字段不是数字样板
? 1234) UNION SELECT 1,’2’,’3’,’4’ WHERE 1=2 —
无错 – 第四个字段是字符串样板
攻击者当初就已经得到了每一列的数据样板,盲注还可能被行使于从数据库的表中得到数据,譬喻得到数据表的列表以及它们各自的列名,还可能从行使步伐中得到数据,而这些技艺在其他一些关于SQL注入的论文中已经有探究,故本文不再继续介绍。
5 总结
本文综述了目前在SQL盲注攻击方面的技艺倒退,阐清楚在过失动静即便被屏蔽的状况下,SQL注入破绽仍然可能被行使。即便已经采取了许多步骤来隐藏和拆穿前往给用户的动静,哄骗本文介绍的技艺,许多行使步伐仍然可能被注入行使。这就表明行使步伐级此外破绽,仅仅托付对效能器的根柢设置做一些篡改是不克不及够解决的,必需从进步行使步伐的开辟职员的平安理解动手,加强对代码平安性的管教,在效能正直式处理过来对每个被提交的参数停止合法性查抄,以从基本上解决注入标题问题。
coolswallow:SQL 盲注攻击技艺综述 8
References:
[1] Microsoft China Technology Center, SQL Server 平安回首, http://www.microsoft.com/china/ctc/Newsletter/04/ctc2.htm, 2004.
[2] Anley, C., Advanced SQL Injection In SQL Server Applications, http://www.ngssoftware.com/papers/advanced_sql_injection.pdf, An NGSSoftware Insight Security Research (NISR) Publication, 2002
[3] Kost S., Introduction to SQL Injection Attacks for Oracle Developers, ?Integrigy Corporation, http://www.net-security.org/dl/articles/IntegrigyIntrotoSQLInjectionAttacks.pdf, 2004.
[4] Anley, C., (more) Advanced SQL Injection, http://www.ngssoftware.com/papers/more_advanced_sql_injection.pdf, An NGSSoftware Insight Security Research (NISR) Publication, 2002
[5] Cerrudo, C., Manipulating Microsoft SQL Server Using SQL Injection, 2002 http://www.appsecinc.com/presentations/Manipulating_SQL_Server_Using_SQL_Injection.pdf.
[6] Spett, K., SQL Injection – Are your 网站 applications vulnerable?, 2002 http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf

原pdf所在:http://www.xfocus.net/articles/200602/javaphile-blind_injection_survey.pdf

相干文章推荐:《mysql注入总结》

本文由Internet平安攻防钻研室(www.91ri.org)动静平安小组收集整顿,转载请注名因由!

数安新闻+更多

证书相关+更多