老白的释然 发表于 2018-4-2 16:19:00

盲SQL注入

这是一种攻击。

描述
盲SQL(结构化查询语言)注射是一种类型的SQL注入攻击,询问数据库真或假的问题,并确定基于该应用程序
的响应的答复。当web应用程序被配置为显示一般错误消息,但并没有缓解是易受SQL注入代码此攻击经常被使用。
当攻击者利用SQL注入,有时Web应用程序从数据库中抱怨SQL查询的语法不正确显示错误消息。盲SQL注入几乎
是相同的正常SQL注入,唯一的区别是将数据从数据库中检索的方式。当数据库不输出数据到网页中,攻击者被迫
通过询问数据库一系列真或假的问题窃取数据。这使得利用SQL注入漏洞比较困难,但并非不可能。。

例子
攻击者可以验证发送请求是否返回在几个方面true或false:
基于内容的
用一个简单的页面,它显示与给定的ID作为参数的信息,攻击者可以执行几个简单的测试,以确定该页面是易受
SQL注入攻击。
示例网址:
http://newspaper.com/items.php?id=2
复制代码
发送以下数据库查询:
SELECT title, description, body FROM items WHERE ID = 2
复制代码
然后,攻击者可以尝试注入返回“假”的查询:
http://newspaper.com/items.php?id=2 AND 1 = 2
复制代码
现在应该在SQL查询如下所示:
SELECT title, description, body FROM items WHERE ID = 2 and 1=2
复制代码
如果Web应用程序容易受到SQL注入,那么它可能不会返回任何东西。为了确保,攻击者将注入一个查询,将返
回“真”:
http://newspaper.com/items.php?id=2 and 1 = 1
复制代码

如果返回“真”页面的内容比返回“假”页面的不同,那么攻击者能够在执行的查询返回true或false来区分。
一旦这个已经核实,唯一的限制是由数据库管理员,不同的SQL语法,以及攻击者的想象力设置权限。


基于时间的
这种类型的盲目SQL注入的依赖于数据库暂停了指定的时间量,然后将结果返回,表示成功的SQL查询执行。使
用这种方法,攻击者列举使用以下逻辑数据的所需块中的每个字母:
如果第一个数据库的名字的第一个字母是'A',等待10秒钟。
如果第一数据库的姓名的第一个字母为“B”,等待10秒。等等

针对Microsoft SQL Server如下:
http://www.site.com/vulnerable.php?id=1'WAITFOR DELAY '00:00:10' -
复制代码
针对MySQL如下:
SELECT IF(expression, true, false)
复制代码
使用一段时间后回吐操作如BENCHMARK(),将延迟服务器响应,如果表达式为true。
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))
复制代码
- 将执行编码功能500万次。

根据数据库服务器的性能和负载时,应花一点点时间来完成这个操作。重要的是,从攻击者的角度来看,以指
定一个足够高的数BENCHMARK()函数的重复来影响数据库的响应时间在一个引人注目的方法。
两种查询的例子组合:
1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5
seconds')),null) FROM users WHERE user_id = 1;
复制代码
如果数据库响应花了很长时间,我们可以预期,随着USER_ID = 1的第一个用户密码字符为“2”。
(CHAR(50)=='2')
复制代码

使用这种方法对字符的其余部分,这是可能的,以列举存储在数据库中的整个密码。即使攻击者注入的SQL查询
和弱势群体页的内容不会改变,此方法有效。
显然,在这个例子中,被指定的表和列数的名称。但是,它可能猜测他们或以试错的方法进行检查。
比MySQL其它数据库也有基于时间的函数,使它们能够被用于基于时间的攻击:

MS SQL 'WAIT FOR DELAY '0:0:10
PostgreSQL - pg_sleep()

开展Blind_SQL_Injection攻击手工非常耗时,但也有很多这这个过程自动化的工具。SQLMAP是SQL注入工具的
其中之一。另一方面,这种工具是从规则即使小的偏差非常敏感。这包括:

扫描其他网站集群,其中,时钟不理想同步,
WWW服务,其中参数获取方法改变,例如从/index.php?ID=10到/ ID,10

远程数据库指纹如果攻击者能够确定,当他查询返回真或假,那么他可能会指纹RDBMS。这将使整个攻击要容
易得多。如果使用基于时间的方法,这有助于确定在使用什么类型的数据库。另一种流行的方法来做到这一点
是调用,这将返回当前日期的功能。MySQL和MSSQL和Oracle有不同的功能为,分别为NOW() ,GETDATE()和
SYSDATE() 。


梦想家 发表于 2018-4-3 14:07:38

:victory:

pazap 发表于 2018-4-12 10:53:46

谢谢楼主,楼主太好人了
页: [1]
查看完整版本: 盲SQL注入