当前位置: 首页 > 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.jsqmd.com/news/1085516/

相关文章:

  • 5分钟掌握芋道源码框架:企业级开发的完整解决方案
  • VMPDump:攻克VMProtect混淆的逆向工程突破者
  • 从概念到实践:深入解析DFT三大支柱SCAN、BIST与ATPG
  • openEuler命令行实战:从零到精通的系统管理指南
  • 终极流媒体下载方案:N_m3u8DL-RE如何让复杂视频获取变得简单高效
  • 3分钟学会用Buzz离线转录多语言音频:英语、中文、日语谁更准?
  • 终极魔兽世界宏编辑器:GSE-Advanced-Macro-Compiler完整指南
  • TV Bro电视浏览器完全指南:如何用开源方案实现智能电视大屏上网
  • C# WinForm 实战:从零构建企业级人事管理系统的核心架构与实现
  • PHP反序列化漏洞实战:从代码审计到漏洞利用的完整指南
  • 【开发者效率】MetricsReloaded:用圈复杂度可视化,重构你的IDEA代码质量防线
  • Prompt Learning:从In-Context Learning到Chain-of-Thought的演进之路
  • PX4无人机仿真环境下的Cartographer SLAM建图实战与配置解析
  • 瑞萨RA8T2 MFWD引擎:硬件加速网络流分类与转发实战
  • 别再做关键词堆砌了!2026年小程序搜索优化的“潜规则”已经变了
  • Three.js 光柱教程
  • VCS +vcs+initreg实战指南:从编译到运行,精准控制初始化
  • PowerToys中文完整汉化版:如何用一站式专业级工具提升Windows效率
  • 2026 网安自学进阶路线,零基础快速从入门成长为安全高手,收藏这篇就够了
  • 局域网专用上网行为管理软件有哪些?精选5款内网上网行为管理软件
  • 终极NHSE存档编辑器:5步打造你的完美动物森友会岛屿
  • 企业图纸加密软件哪个好?安利6款史诗级CAD图纸防泄密软件,最新排行
  • 多模态大模型+技术指标:Vibe-Trading实操拆解
  • yaml-cpp 实战:从入门到精通 C++ 配置解析
  • 从HOTP到TOTP:深入解析一次性口令的演进与核心算法
  • VoiceFixer:一键解决音频噪音与质量问题的终极语音修复方案
  • 如何免费激活Adobe全家桶:3步使用GenP破解工具的完整指南
  • Tableau桑基图进阶:从数据聚合到曲线平滑的完整实践
  • Aimmy:免费AI瞄准助手,为游戏体验注入智能辅助
  • Unity中Resources.Load加载精灵图片的实战避坑指南