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

PortSwigger SQL注入LAB12

今天我们来做PortSwigger SQL注入的LAB12,这道LAB跟之前的几道LAB不太一样,但是更加贴近现实了,那么我们现在开始吧:

【本篇目标】
1. 理解并掌握基于可视化错误的SQL注入
2. 通过SQL注入来获取所需administrator的密码,并完成登录

一、分析题目

我们先来看LAB12的题目,他说应用使用了cookie进行了跟踪分析,SQL的查询结果不仅不会返回,但是服务器传回的错误是正常返回的。

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

二、制造错误

既然服务器可以返回错误,那我们就来看看它是怎样报错的。老样子,先破坏它的 cookie 查询语句,看看会发生什么:在 TrackingId 值的后面加一个'来破坏查询。

我们可以看到返回了未终止字符串错误,这意味着在查询的代码中多了一个引号导致原先的引号未闭合,那么我们要是把原先后面的引号注释掉呢?

我们可以发现错误消失了,那么我们可以利用这一点,让服务器通过报错的形式来把密码说出来

三、构造报错语句

3.1 理解CAST()函数并构造错误

为了让密码出现在报错中,这里我们使用了CAST(x AS y)函数,作用是把 x 转换为 y 数据类型。我们的想法是把用户名字符串转换为整型(INT);由于该转换在数值上下文不合法,会触发服务器报错,从而泄露内容。

这里我们还是使用AND来将原语句与我们构造的语句连接起来,但是由于AND是一个逻辑运算符,所以他的左右两边都要求是布尔表达式,所以这里我们要在前面加一个1 =

这样我们就构造出了如下语句:

' AND 1 = CAST((SELECT username FROM users) AS INT) --

我们来运行一下看看结果:

这里我们看到服务器还是返回了未终止字符串错误,但是不对啊,我们并没有引入更多的引号啊。

3.2 分析错误形成原因并修正

不要急,我们仔细来看一下报错,我们可以发现我们构造的语句在users)A处就强行截断了,那么说明我们的语句是没有错误的,只是字符达到服务器的上限导致强行截断了

那么我们把他前面TrackingId的值给他全部删掉,反正我们现在也用不到他了:

再次send之后,还是返回了报错,但是这次的报错不一样了,他这里说表达式使用的子查询返回了超过一行的数据,说明我们这里的查询本身可以容纳一行的数据,但是服务器返回的数据超过了这个值

此时在子查询后加上LIMIT 1可以强制只返回第一条记录,再发送请求试试:

可以看到我们成功通过服务器的报错取出了 users 表中 username 列的第一条记录: administrator。

3.3 改进语句获取密码

既然我们已经成功获取了用户名并确认 administrator 为第一行,那么我们可以把子查询改为 password 字段,让服务器通过类型转换错误把密码显示出来:

' AND 1 = CAST((SELECT password FROM users LIMIT 1) AS INT) --

我们可以看到,服务器通过报错返回了我们需要的密码:j1pxktuj08fg5upgq1bj

四、登陆验证结果

现在我们将获得的密码用于登录页面进行验证:

登录成功,LAB12 解决。

五、总结与防御建议


总结:

  • 本题演示了如何利用可视化错误(错误信息或异常)将数据库字段通过报错暴露:通过将查询结果强制转换为不兼容类型(如字符串强制转换为整数)来触发类型错误,从而在错误消息或响应中泄露数据。
  • 关键步骤包括:先定位能触发错误的注入点,使用子查询与行限制(如LIMIT 1)确保单行返回,然后对目标字段施加强制类型转换以触发报错并读取返回内容。

防御建议:

http://www.gsyq.cn/news/1597463.html

相关文章:

  • 5分钟掌握芋道源码框架:企业级开发的完整解决方案
  • VMPDump:攻克VMProtect混淆的逆向工程突破者
  • 3分钟学会用Buzz离线转录多语言音频:英语、中文、日语谁更准?
  • Prompt Learning:从In-Context Learning到Chain-of-Thought的演进之路
  • PX4无人机仿真环境下的Cartographer SLAM建图实战与配置解析
  • Three.js 光柱教程
  • 瑞萨RA8T2 MFWD引擎:硬件加速网络流分类与转发实战
  • PowerToys中文完整汉化版:如何用一站式专业级工具提升Windows效率
  • 2026 网安自学进阶路线,零基础快速从入门成长为安全高手,收藏这篇就够了
  • Unity中Resources.Load加载精灵图片的实战避坑指南
  • Havenlon 执行架构系列(九):零信任不止发生在网络边界
  • Android 12蓝牙权限变更实战:从BLUETOOTH到三大运行时权限的平滑迁移
  • ISE14.7实战:从VHDL编码到FPGA板级调试全流程解析
  • Translumo:终极Windows实时屏幕翻译工具,3分钟开启无语言障碍体验
  • 【KingHistorian】授权实战:从加密锁驱动到冗余配置的完整指南
  • NVMe-MI oob:数据中心运维的“第二双眼睛”
  • 抖音直播数据抓取终极指南:三步获取实时弹幕与用户互动数据
  • 5个步骤快速上手ScriptHookV:打造专属GTA V模组世界 [特殊字符]
  • 从数据源到可视化:一站式获取与处理全国多级行政区划GeoJSON边界数据
  • B站会员购抢票终极指南:轻松掌握biliTickerBuy的5个实用技巧
  • 突破PyTorch训练瓶颈:Dataloader数据预加载与GPU驻留优化实战
  • 游戏控制器兼容性难题:为什么你的高端手柄在Windows上成了“废铁“?内核级虚拟游戏控制器驱动如何彻底解决Windows输入设备模拟问题
  • 3秒魔法:DeepBump让AI为你一键生成专业级3D纹理
  • 3分钟解锁微信网页版:wechat-need-web浏览器扩展终极指南
  • FastFlow:二维归一化流在工业缺陷检测中的实战解析
  • 深度解析CVE-2025-24813:Tomcat远程代码执行漏洞原理与实战防护
  • DroidCam OBS插件:将智能手机摄像头变为专业直播设备的技术方案
  • 3步实现大麦智能抢票:告别手速比拼的自动化解决方案
  • ViGEmBus:Windows内核级虚拟游戏控制器驱动架构深度解析与技术实现
  • PotPlayer字幕翻译插件终极指南:免费实现外语视频实时双语字幕