当前位置: 首页 > news >正文

PortSwigger SQL注入LAB10

PortSwigger SQL注入LAB10

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

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

一、理解cookie在此处的作用

LAB10描述

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

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

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

Burp Suite 抓取结果1

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

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

Burp Suite 抓取结果2

我们可以发现右上角原先 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"

Burp Suite 抓取结果3

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

2.2 构建密码长度获取语句

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

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

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

Burp Suite 抓取结果4

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

三、使用Intruder

3.1 爆破获取密码长度

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

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

Burp Suite 抓取结果5

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

Burp Suite抓取结果6

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

Burp Suite抓取结果7

通过判断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进行尝试

Burp Suite抓取结果8

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

Burp Suite抓取结果9

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

Burp Suite抓取结果10

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

Burp Suite抓取结果11

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

3.3 爆破获取密码

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

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

Burp Suite抓取结果12

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

Burp Suite抓取结果13

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

Burp Suite抓取结果14

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

Burp Suite抓取结果15

3.4 拼接密码

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

拼接密码

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

四、登陆验证结果

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

LAB解决

登陆成功 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)并结合日志监控与告警,及时发现异常流量或大量探测行为。

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

http://www.jsqmd.com/news/904746/

相关文章:

  • Topit:Mac窗口置顶神器,彻底提升你的多任务效率
  • 对比直接使用官方API与通过Taotoken接入的便捷性感受
  • Beyond Compare 5 终极密钥生成器:开源高效的完整激活解决方案
  • Hot-226 翻转二叉树
  • 如何用淘宝淘金币自动化脚本每天节省20分钟:终极时间管理方案
  • Countly 25.03.45 发布:修复图表笔记、任务过滤等多项功能问题
  • Arduino Nano引脚焊接加固教程:从原理到实践解决连接松动
  • 南京市十五五现代综合交通运输体系发展规划(意见征求稿) 2026
  • 2026安丘市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 陶瓷厂尾气监测数据上报到HJ212平台解决方案
  • 通过TaotokenCLI工具一键配置团队统一的AI开发环境
  • 用Python从零实现一个ANFIS模型:以房价预测为例(附完整代码)
  • 别再只盯着R²了!用Python的statsmodels库实战回归模型显著性检验(F检验与t检验)
  • G-Helper完全指南:华硕笔记本性能调优的终极免费方案
  • 从麦克风到单片机:ADC采样保持电路(SHA)是如何决定你音频项目音质的?
  • DRAM价格暴涨超200%,Meta开源缓存引擎CacheLib更新解成本难题
  • 2026年Next.js部署平台深度对比:Netlify、AWS、Cloudflare等五大方案实战解析
  • Honey Select 2终极补丁:如何5分钟完成游戏体验全面升级
  • 告别调试死循环:结构化CRIT框架提升AI结对编程效率
  • CDS API 终极指南:5分钟掌握气候数据下载完整教程 [特殊字符]
  • 创业公司如何利用 Taotoken 控制多模型 API 成本与稳定性
  • MapLibre GL JS第13课:哈希路由
  • Kimi Code封号乌龙引风波:风控粗糙致国内开发者被误伤,双标操作寒了谁的心?
  • 别光看热闹!用NetworkX和Pyecharts拆解《三国演义》的权力格局与叙事节奏
  • GWAS分析中GLM模型怎么用?结合TASSEL实例聊聊SNP效应值与P值那点事
  • 写作压力小了!盘点2026年备受推崇的的降AI率平台
  • 2026年5月武汉钻石回收机构分级评分 - 薛定谔的梨花猫
  • 从汉诺塔到LeetCode:掌握Python递归的5个经典刷题模板(含阶乘、斐波那契)
  • Java面试复盘宝典全网首次公开!
  • 北光恒电:安捷伦8496A步进可调衰减器 衰减量异常故障排查