DVWA SQL 注入通关实录(Low/Medium/High 全级别):从单引号闭合到 Union 脱库

发布时间:2026/10/19 15:30:25
DVWA SQL 注入通关实录(Low/Medium/High 全级别):从单引号闭合到 Union 脱库 DVWA 是渗透测试入门的标配靶场SQL 注入更是 Web 安全的基本功。本文从 Low 到 High 三个安全级别逐级通关覆盖手工注入完整流程——闭合方式判断、Union 联合查询、information_schema 脱库、BurpSuite 抓包绕过、Session 传参注入——每一步都附 Payload 和原理拆解适合零基础入门的同学跟着动手实操。前言大家好我是安全渗透方向的新手。前段时间打了几台 VulnHub 靶机每台都碰到了 SQL 注入点——有的用 or 11绕过登录有的用 Union 注入脱库拿密码。回过头来觉得该把 SQL 注入的基础功再夯实一遍于是翻出了 DVWA 这个经典靶场从 Low 到 High 重新走了一遍。这篇文章记录 Day1 的实操过程——三个安全级别的 SQL 注入完整通关从最基础的单引号闭合到借助 BurpSuite 抓包注入每一步都拆开讲清楚。如果你也在入门 Web 安全跟着敲一遍应该能对 SQL 注入有个整体的手感。**免责声明**本文仅供安全研究与学习参考请勿将文中技术用于非法用途。环境准备项目说明靶场DVWADamn Vulnerable Web Application攻击机Kali Linux核心工具浏览器、BurpSuite初始安全级别Low → Medium → High一、准备工作——确认 DVWA 安全级别DVWA 提供了四种安全级别理解它们之间的区别有助于后续针对性地调整注入手法级别说明Low完全无防护用于展示不良编码导致的漏洞作为入门教学Medium开发者尝试做了防护但存在缺陷适合练习绕过技巧High防护手段更复杂漏洞利用难度提升接近 CTF 场景Impossible理论上做了完整防护供对比漏洞代码与安全代码的差异操作左侧菜单 →DVWA Security→ 选择级别 → 点击Submit。初始设置为Low从最简单的开始。二、Low 级别——无过滤最基础的注入场景这个级别没有任何防护是理解 SQL 注入完整流程的最佳起点。步骤 1判断注入点在输入框中依次测试测试一输入正常值1输入1点击 Submit页面正常返回用户信息First name、Surname。测试二输入1数字 1 加单引号页面返回 SQL 语法报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 1 at line 1结论输入的单引号破坏了原始 SQL 语句结构——后端没有过滤特殊字符确认存在 SQL 注入漏洞。步骤 2确认注入点判断闭合方式找到了注入点下一步是搞清楚闭合方式是什么——单引号还是双引号、需不需要括号Payload预期结果逻辑1 and 11正常返回数据11恒真整条 WHERE 条件成立1 and 12无数据返回12恒假WHERE 条件不成立笔记闭合符为单引号通过and 11和and 12的真假条件验证注入点可用这一步很关键——闭合方式搞错了后面的 Payload 全白费。步骤 3获取数据库基本信息引入union select联合查询配合#注释掉原始 SQL 的后续部分。3.1 判断字段数与回显位1unionselect1,2#结论原始查询是 2 个字段第一列回显到 First name第二列回显到 Surname——这两个位置就是后面脱数据的窗户3.2 获取当前数据库名1unionselectdatabase(),2#database()返回当前数据库名称#把原始语句后面的部分注释掉让 Payload 不受干扰步骤 4获取表名1 union select table_name collate utf8_general_ci,2 from information_schema.tables where table_schemadvwa#返回结果guestbook、usersusers表存的是账号密码——这就是目标。笔记collate utf8_general_ci用来处理字符集排序问题否则information_schema关联查询可能因为编码不一致报错。新手常见踩坑点。步骤 5查 users 表列名1 union select column_name,2 from information_schema.columns where table_nameusers#确认了字段名user和password——直接查这两个就行。步骤 6脱取账号密码1unionselectuser,passwordfromusers#用户名密码哈希MD5admin5f4dcc3b5aa765d61d8327deb882cf99gordonbe99a18c428cb38d5f260853678922e0313378d3533d75ae2c3966d7e0d4fcc69216bpablo0d107d09f5bbe40cade3de5c71e9e9b7smithy5f4dcc3b5aa765d61d8327deb882cf99密码是 32 位 MD5 哈希拿去在线破解平台查——全都是password。连 admin 都用这种弱密码安全意识可见一斑。补充guestbook 表也看看数据不嫌多顺手把 guestbook 表也翻了查字段1 union select column_name,2 from information_schema.columns where table_nameguestbook#返回comment_id、comment、name查数据1unionselectname,commentfromguestbook#返回nametestcommentThis is a test comment.三、Medium 级别——POST 传参 前端限制绕过级别切换DVWA Security → 选择Medium→ Submit。注入特点Medium 有两个变化POST 传参不像 Low 级别的 GET参数不裸露在 URL 里前端限制输入框变成了下拉选择只能选 1-5没法直接在页面敲注入语句解决方式BurpSuite 抓包修改参数——前端限制只拦普通人数据包里的内容照样能改。操作步骤1. 开启 BurpSuite 拦截配置浏览器代理指向 BurpSuite在 DVWA 页面选择 ID1 并点击 SubmitBurpSuite 截获 POST 请求。2. 修改 id 参数在 BurpSuite 的 Repeater 或拦截窗口中把id1改成id1 union select user,password from usersSubmitSubmit3. 放行请求Forward 出去页面直接返回所有用户名和密码哈希。跟 Low 级别同样的结果——Medium 的前端下拉选择就是个摆设真正起作用的是代码里对mysqli_real_escape_string()的使用但这里显然没做好。四、High 级别——Session 传参注入级别切换DVWA Security → 选择High→ Submit。注入特点High 级别的设计比较有意思——主页面没有输入框点击“Click here to change your ID”会跳转到一个独立的 Session 输入页面。提交的 ID 存进 Session主页面再从 Session 读取 ID 执行查询。这样做本来是希望把用户输入和 SQL 执行分离开减少直接注入的机会。但只要参数最终还是进到 SQL 语句里该注入还是能注入。操作步骤1. 点击跳转到 Session 输入页在 Session ID 输入框中直接写 Payload1unionselectuser,passwordfromusers#2. 提交点 Submit 后页面跳回主页用户名和密码哈希全部回显。High 级别只是换了个传参方式Session核心的 SQL 拼接问题没解决——换汤不换药。五、Day1 总结三个级别对比LowMediumHigh传参方式GETURL 可见POST需抓包Session需跳转前端限制无输入框自由填下拉选择BurpSuite 绕过独立输入页面注入难度直接在页面操作需借助 BurpSuite需理解 Session 传参机制Payload完全相同完全相同完全相同本质问题SQL 语句直接拼接用户输入同左同左三个级别绕来绕去Payload 始终是1 union select user,password from users#——改的只是怎么把这个字符串送到后端。只要用户输入最终进了 SQL 语句且没过滤注入就躲不掉。踩坑笔记collate utf8_general_ci查询information_schema时字符集不统一会报错加这个关键字解决。刚开始踩这个坑的时候排查了好一阵。闭合方式必须先确认上来就堆 Payload 容易翻车先1看报错、再11/12验证闭合——三步确认法以后就是肌肉记忆了。MD5 不叫加密拿到的是哈希不是加密。加密可逆有密钥能解哈希是单向的。所谓破解其实是去彩虹表里查对照——所以弱密码像password这种秒破。前端限制都是纸老虎Medium 的下拉框看着限制了输入BurpSuite 一抓包就绕过去了。前端校验只能改善用户体验安全防护必须做在后端。参考资料DVWA 官方文档及源码MySQL information_schema 官方参考OWASP — SQL Injection Prevention Cheat Sheet这是我在 DVWA SQL 注入 Day1 的学习记录。Day2 将进入盲注Boolean/Time-based和 SQLMap 自动化注入如果这篇文章对你有帮助欢迎评论区一起交流