PortSwigger SQL注入LAB10

PortSwigger SQL注入LAB10

LAB10祝贺!做了那么久LAB终于破个位数了,而来到LAB10,我们就要开始我们SQL盲注的学习了,那么我们现在开始吧:
【本篇目标】

  1. 理解并掌握SQL盲注的技能
  2. 通过SQL盲注来获取所需administrator的密码,并完成登录

一、理解cookie在此处的作用

我们先来看LAB10的题目,他说应用使用了cookie进行了跟踪分析,跟之前不同的是SQL的查询结果不会返回也不会显示错误信息了,这倒是更加贴近实际了,但是如果返回了任何行的话,页面会显示"Welcome back"的消息。

最终的目标还是老样子,从users表中获取administrator用户的密码并成功登录

那我们先来看看这个cookie在这里是怎么起作用的吧

让我们注意Request中的这段语句:Cookie: TrackingId=jGWk2ssV921g19Md; session=rAqozxAugWrDopcMDvMvwQitXjCUcd38

这就是题目中所说的TrackingId,那如果我们现在更改他会发生什么呢:

我们可以发现右上角原先 Home 和 My account 之间的 Welcome back 消失了,这就是题目中所说的:我们可以通过是否回显 Welcome back 来判断是否有查询结果回显。

二、布尔盲注

2.1 理解语法

既然知道服务器会通过对TrackingId进行查询来决定是否返回Welcome back,那么TrackingId就是我们要进行盲注的目标了

思考一下,既然服务器会通过判断TrackingId是否合法来决定是否回显值,这何尝不是一种布尔判断呢,既然如此,我们可以对其进行布尔盲注,我们先通过一段简单的语句来了解他:

复制代码
' AND ( 'a' FROM users username = 'administrator') = 'a' -- 

这段语句是什么意思呢?首先第一个 AND 把服务器验证 TrackingId 和后面我们自己编写的语句进行了布尔连接,也就是说只有在 TrackingId 合法且我们编写的语句成立的情况下,服务器才会返回 "Welcome back"。

接下来我们看括号内的内容,括号内的意思是去users表中寻找username为administrator的数据,如果找到了就返回a这个字符

再往下面就不需要过多的解释了,目的就是为了判断括号内中的语句是否成立,如果成立的话,整段语句成立,服务器便会返回"Welcome back",反之,如果括号内的语句不成立,便不会返回"Welcome back"

我们可以看到服务器返回了"Welcome back"字符,证明了我们的想法

2.2 构建密码长度获取语句

既然我们知道了盲注的基础语法,那么接下来我们尝试获取密码的长度:

复制代码
' AND (SELECT 'a' FROM users WHERE username = 'administrator' AND LENGTH(password) > 1) = 'a' -- 

这里我们用AND再次并列了一个条件,这个条件通过调用LENGTH()函数来判断administrator密码的长度是否大于1

这里我们可以看到服务器成功回显了 "Welcome back" 提示,说明 administrator 密码的长度大于 1,那么我们可以不断递增 1 的值来获得密码确切的位数。注意:在某些数据库或字符集下,LENGTH() 按字节计数。

三、使用Intruder

3.1 爆破获取密码长度

但是如果我们全部手动来完成这些工作的话,单单获取密码位数就会消耗我们大量的时间和精力,所以这时候我们就需要用到Burp suite的Intruder

我们通过右键--Send to Intruder来将当前会话发送至Intruder,然后把我们原先的1设置为Payload:

接下来我们需要设置Payload的变化情况,我们打开Payload子页,由于我们此处的Payload全程都是一个数字,那么我们在Payload Type中把它设置为Numbers,然后在下面的Payload settings将他的范围设置为1-30:

点击Start attack开始攻击 我们获得了如下结果:

通过判断Length值的突变,我们轻松找到了本次攻击的临界点------------在Payload值为20的时候服务器不再返回"Welcome back"字段,说明administrator密码的长度为20。

3.2 构建密码获取语句

既然我们已经知道如何获取密码的长度,那么只需调整语句即可逐位爆破出密码。

复制代码
' AND (SELECT SUBSTRING(password, 1, 1) FROM users WHERE username = 'administrator') = 'a' --

这段语句通过调用 SUBSTRING() 函数取出 administrator 密码的第一个字符,与后面的 'a' 比较;若相等,服务器会回显 "Welcome back" 提示。

将他编辑好之后 我们先设置"a"为Payload进行尝试

在 Payload 中将类型设置为 Brute forcer(暴力破解),并在 Payload settings 的 Character set 添加小写字母 a-z 与数字 0-9。由于我们逐字符爆破,把 Min length 和 Max length 都设置为 1。

为了我们更快速的找到结果,我们可以在settings中找到Grep-Match来添加字段"Welcome back",这样在攻击结果页面中我们可以直接通过是否返回"Welcome back"字段来快速筛选

按下开始攻击并等待攻击完成:

我们可以看到,当 Payload 为 1 的时候,服务器回显了 "Welcome back" 提示,证明 administrator 密码的第一位为 1。

3.3 爆破获取密码

既然已经学会如何获取第一位密码字符的方法了,那么我们稍微更改一下之前语句中的Payload就可以获得每一位密码字符了,然后再把他们拼接起来就可以获得完整的密码

但是在 sniper 模式下,我们只能自动更改一个 Payload 的值,所以我们需要切换 Attack typeCluster bomb(集束炸弹),并将代表第一个字符的 "1" 设置为第一个 Payload,把用于比较的 "a" 设置为第二个 Payload。

我们把第一个 Payload 的类型设置为 Numbers,并把范围设为 1-20。

接着把第二个 Payload 的类型设置为 Simple list,并从 Add from list 中添加小写 a-z、大写 A-Z 以及数字 0-9 到列表中(Burp Suite 社区版不支持 Add from list 功能)。

点击 Start attack 开始攻击并分析结果:

3.4 拼接密码

现在我们就已经得知所有密码在每一位的值了,这里我使用记事本来将它们全部拼接起来:

至此,我们得出来最终的密码10rmb7z5lls76ambkk6v

四、登陆验证结果

那么现在我们就去网页中使用我们获得的密码来进行登陆:

登陆成功 LAB10解决

五、总结与防御建议


总结:

  • 通过本练习掌握了基于 TrackingId 的布尔盲注思路:利用页面是否回显"Welcome back"作为布尔判定信号,从而逐步探测出用户名为 administrator 的密码长度与每一位字符。
  • 演示了用 Burp Suite 的 Intruder 自动化枚举(包括 Numbers、Brute forcer 与 Cluster bomb 模式)来加速长度探测和逐位爆破的实战流程,并最终得到示例密码。

防御建议:

  • 使用参数化查询 / 预编译语句,避免将未验证的输入直接拼接到 SQL 中(这是防止 SQL 注入的首要手段)。
  • 对所有输入进行白名单校验与长度限制,必要时严格限制字符集(例如只允许数字、字母等)。
  • 在数据库账号上实施最小权限原则:应用使用的数据库用户仅授予必要的 SELECT/INSERT/UPDATE 权限,避免使用高权限账号运行应用查询。
  • 对敏感数据(如密码)使用强哈希算法并加盐(推荐 bcrypt、scrypt 或 Argon2),并确保不在任何响应或回显中泄露原文或哈希细节。
  • 不要在页面上回显敏感的调试信息;对外返回通用的错误提示,同时在服务器端记录详细日志以便审计与告警。
  • 对异常请求与爆破行为启用速率限制、账户锁定、验证码与多因素认证(MFA),减缓自动化攻击并提升防护层级。
  • 对 Cookie 和会话采取安全配置:设置 HttpOnly、Secure、SameSite,并尽量使用服务器端会话 ID 或对 cookie 值进行签名/加密,避免将未校验的 cookie 值直接用于数据库查询。
  • 部署 Web 应用防火墙(WAF)并结合日志监控与告警,及时发现异常流量或大量探测行为。

博客园技术分享 · 请勿用于非法测试

相关推荐
汤愈韬2 小时前
IPSec工作原理——TK
网络·网络协议·网络安全·security
treesforest4 小时前
机房IP是什么?有什么危害?如何识别?
网络·数据库·python·网络协议·tcp/ip·网络安全
HackTwoHub6 小时前
AI赋能Chrome MCP × JS逆向Skill自动化JS逆向挖洞
javascript·人工智能·chrome·安全·web安全·网络安全·自动化
pencek7 小时前
HakcMyVM-Canto
网络安全
24kmaigc8 小时前
NewStarCTF2025-ssti在哪里?-ssrf与ssti注入
python·网络安全·flask·web
AIDABI8 小时前
Vulnhub-DC-9
web安全·网络安全
搞科研的小刘选手10 小时前
【南昌大学主办】第五届人工智能、物联网和云计算技术国际会议(AIoTC 2026)
人工智能·物联网·网络安全·大模型·云计算·智慧城市·云安全
WangX-西石油10 小时前
DVWA靶场上Low级别SQL注入漏洞学习
sql·网络安全
Chengbei1111 小时前
AI赋能Chrome MCP × JS逆向Skill自动化JS逆向助力挖洞与绕过实战(小白也能学会)
javascript·人工智能·chrome·网络安全·自动化·系统安全·安全架构