一、盲注介绍
开发人员一般禁用了所有的详细错误消息,如果发现了一个SQL注入点,但应用只提供了一个通用的错误页面;或者返回正常页面但没有我们需要的内容在上面。这些都属于SQL盲注,没有错误消息或反馈内容就不能使用之前的注入方法,而是采用SQL逻辑操作以字节方式推断数据来修改页面中的内容。
二、盲注基础知识
1、强制产生通用错误
可以通过输入正常数据与非法数据(如加个单引号),判断网页数据正常与错误的状态,错误状态一般是一个通用的错误页面或空数据等。
2、进一步测试注入点
可以提交包含副作用(攻击者可观察到)的查询,如延迟函数sleep()、逻辑语句and or等、运算符+-*/、字符串连接符等。
3、推断攻击技术
推断攻击技术均可通过观察指定请求的响应来提取至少一位信息(输入正常的语句返回正常,输入错误的语句返回错误页面)。
既然网页无法返回我们直接注入查询的结果,那么我们可以向数据库进行判断询问,如当前数据库用户是否是root等。
如通过MySQL条件判断函数进行推断。
4、二分搜索法
二分搜索(分半算法)法主要用于推断单个字节的值,不需要搜索整张字母表,通过不断拆分平均值来缩小查找范围。
如:猜一个数字(1-256)
1、该数字是否<127
2、该数字是否<63
3、该数字是否<31
4、该数字是否<15
5、该数字是否<7
6、......
通过不断分半猜,能搜小查找的次数。
任何ASCII字符都可以用1字节或8位表示,也称为八位字节,并非所有字符在数据库中都是有效的或允许的,所以我们只关注ASCII范围32 - 126,它给我们留下了一组94个字符。该范围只能用7位表示,最高有效位为0,这个可以减少我们猜解的范围。
但是,这种二分搜索法有个明显的缺点,那就是猜测每一位需要发送8次请求,每次发送的请求需要上一次请求返回结果判断才能继续发送,也就是说只有发送了第一次请求,且返回了结果,在进行结果判断,然后在发送第二次请求......,这种每次需要等待上一次结果返回,花费的时间较长。
5、按位方法
用按位方法法不需要像二分搜索法那样只能单次单次发送,可以并行同时发送7次请求,使得能快速得到一位值。
位操作法使用位操作符 & | ^来实现,具体的原理涉及到二进制的运算。
演示:这里随意出一个ascii字符,比如字符 'g',g的ascii码表数字为103。
select 103 & 128; 结果为 0 =》0
select 103 & 64; 结果为 61=》1
select 103 & 32; 结果为 32=》1
select 103 & 16; 结果为 0=》0
select 103 & 8; 结果为 0=》0
select 103 & 4; 结果为 4=》1
select 103 & 2; 结果为 2=》1
select 103 & 1; 结果为 1=》1
结果非0 的都为1,那么集合起来就是 01100111,转换到十进制为103,而ascii码表113对应字符‘g’,而ascii码表可见字符为1-128,故不需要& 128,所以用此方法猜解一个字节只需要7次查询。
实现原理:就是把字符转化成二进制,逐位判断。
128二进制 10000000
64二进制 01000000
32二进制 00100000
16二进制 00010000
8二进制 00001000
4二进制 00000110
2二进制 00000010
1二进制 00000001
6、正则表达式法
正则表达式法是二分搜索法的一种变体,使用正则表达式进行匹配字符串。
正则表达式基础:
选项 | 说明 |
---|---|
^ | 匹配以什么字符开头 |
$ | 匹配以什么字符结尾 |
. | 匹配任意一个字符 |
* | 匹配任意多个字符 |
+ | 匹配任意至少一个字符 |
[a-z] | 匹配[]里面的任意一个字符 |
[^a-z] | 匹配不在[]里面的任意一个字符 |
{n,} | 匹配前面的字符串至少n次 |
{n,m} | 匹配前面的字符串至少n次,最多m次 |
7、非主流通道技术
提取SQL盲注漏洞中的数据时,使用第二类方法是借助非主流通道。区别在于推断技术依靠的是页面发送的响应,而非主流通道技术使用的是传输通道而非页面响应,传输通道包括DNS、E-MAIL、HTTP请求。好处是可以一次检索多块数据,而不是推断单个或单个字节的值。
不过很遗憾,MySQL默认配置的数据库并不支持这个非主流通道。