1. DVWA中等难度SQL注入实战解析
三年前我第一次接触DVWA的SQL注入模块时,在中等难度关卡卡了整整两天。这个看似简单的关卡实际上暗藏玄机——它不仅考验基础的注入技巧,更要求对防御机制的深入理解。今天我就来详细拆解这个经典靶场的中等难度SQL注入,分享那些官方文档不会告诉你的实战技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与靶场配置
2.1 DVWA环境搭建要点
在本地搭建DVWA时,我强烈推荐使用XAMPP集成环境。最新版的DVWA需要PHP 5.4+和MySQL 5.0+支持,安装时要注意:
- 下载DVWA压缩包解压到htdocs目录
- 修改config/config.inc.php中的数据库密码
- 访问setup.php完成初始化
- 特别提醒:务必在DVWA Security设置中将难度调为"Medium"
注意:不要使用root账户连接数据库,建议新建专用账户。我在测试时曾因权限过高导致注入结果异常。
2.2 关键防御机制分析
中等难度的核心变化是服务端添加了mysql_real_escape_string()函数过滤。这个PHP函数会对以下字符进行转义:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL字符
但经过实测发现,它存在几个关键盲点:
- 对数字型注入无效
- 不处理宽字符集情况
- 二次编码可能绕过
3. 注入技术深度剖析
3.1 突破字符转义的三种方法
3.1.1 数字型注入技巧
当发现参数为数字ID时(如?id=1),直接使用算术表达式:
sql复制1 AND 1=1 # 正常返回
1 AND 1=2 # 空返回
通过布尔判断即可获取数据,完全绕过字符串过滤。
3.1.2 宽字符注入实战
利用GBK等宽字符集的特性,构造特殊payload:
code复制%df%27 # 会被转义为%df%5c%27,但%df%5c构成合法宽字符
在注入点后接union语句即可获取数据。
3.1.3 二次URL编码绕过
对关键字符双重编码:
code复制%2527 # 解码后变为%27(单引号)
服务端只做一次解码,最终仍能保留特殊字符。
3.2 自动化注入工具优化
虽然可以手工注入,但使
