1. DVWA中等难度SQL注入实战解析
在渗透测试的学习过程中,DVWA(Damn Vulnerable Web Application)是公认的最佳实验环境之一。今天我想重点聊聊中等难度下的SQL注入漏洞利用,这个难度级别比入门级更有挑战性,但又不至于像高级难度那样需要复杂的绕过技巧,非常适合用来巩固基础并提升实战能力。
中等难度的SQL注入与初级相比主要有三个不同点:一是输入过滤机制开始生效,二是错误回显被部分屏蔽,三是需要掌握联合查询的手动构造技巧。我在本地搭建的DVWA 1.2版本上进行了完整测试,下面就把整个实战过程和关键技巧分享给大家。
1.1 环境准备与初始探测
首先确保你的DVWA环境已配置为中等安全级别:
- 登录DVWA后进入"Security"模块
- 将安全级别调整为"Medium"
- 返回"SQL Injection"页面开始测试
初始测试时输入单引号',会发现页面返回了数据库错误,这说明存在SQL注入漏洞,但与初级难度不同的是,错误信息已经被简化处理:
code复制You have an error in your SQL syntax...
这表明我们进入了中等难度的第一个挑战——有限的错误回显。此时我们需要采用更智能的探测方式。
注意:在真实环境中,遇到这种有限错误回显的情况很常见,不能依赖错误信息来推断数据库结构。
1.2 绕过基础过滤机制
输入1' or '1'='1测试时,发现被拦截了。查看源码发现中等难度使用了mysql_real_escape_string()函数进行过滤,但存在绕过可能:
php复制$id = mysql_real_escape_string($id);
经过测试,以下payload可以成功绕过:
code复制1' or 1=1#
关键点在于:
- 使用数字比较代替字符串比较
- 使用
#注释掉后续语句 - 避免使用被转义的特殊字符
1.3 手动确定字段数
在联合查询前,必须先确定当前查询返回的字段数。由于错误回显有限,我们采用order by技术:
code复制1' order by 2# -- 正常
1' order by 3# -- 报错
由此确定字段数为2。这个步骤非常重要
