SQL注入之时间盲注
SQL注入之时间盲注
一、时间盲注原理
时间盲注技术的核心在于巧妙地运用数据库中的时间延迟函数(例如 MySQL 的 SLEEP() 函数或 PostgreSQL 的 PG_SLEEP() 函数)来验证注入条件的有效性。当注入条件成立时,数据库会执行这些延迟函数,从而导致页面响应时间显著增加;反之,若条件不成立,则不会产生延迟效果。这项技术之所以被称为“盲注”,原因在于它并不能直接将查询结果反馈到页面或接口返回值中,而是依赖于SQL语句执行所产生的时间延迟来间接推断数据内容。
二、时间盲注方法
时间盲注的方法主要是利用 if(booleans, true_value, false_value) 函数 和 sleep(seconds) 函数组合来获取数据库内容。
常见语句
SELECT IF(SUBSTRING((SELECT DATABASE()), 1, 1) = 'a', SLEEP(5), 1)
SELECT IF(ASCII(SUBSTRING((SELECT DATABASE()), 1, 1)) < 100, SLEEP(5), 1)
解析
IF(booleans, true_value, false_value) 函数:
booleans:这是一个布尔表达式,用于确定要返回哪个值。如果条件为真(非零和非NULL),则返回true_value。true_value:如果条件为真,则IF函数返回这个值。false_value:如果条件为假(零或NULL),则IF函数返回这个值。
SUBSTRING(string, start, length) 函数:
string:要从中提取子字符串的原始字符串。start:子字符串的起始位置。在SQL中,这个位置通常是从1开始的。如果start为负数,则表示从字符串的尾部开始计数。length:要提取的字符数。这是一个可选参数。如果省略此参数,则将从起始位置提取到字符串的末尾。
SLEEP(seconds) 函数:
seconds:数据库暂停秒数。
ASCII(char) 函数:
char: 想要转换为ASCII码的单个字符。
通过对这两条语句的解析,我们可以得出以下结论:
- 第一条语句:判断数据库名称的第一个字符是否为
a。如果是,则数据库会暂停5秒;如果不是,则返回数据1。 - 第二条语句:判断数据库名称第一个字符的ASCII码是否小于100(字符
a的ASCII码为97)。如果是,则数据库会暂停5秒;如果不是,则返回数据1。
相比之下,作者更倾向于使用第二种方法,因为通过ASCII码结合二分查找法,可以更高效地定位目标字符。二分查找的时间复杂度为 O(log n),而传统的遍历法时间复杂度为 O(n),前者在效率上具有明显优势。

三、时间盲注实例
在Pikachu平台上进行实践时,我们在输入框内输入了特定的SQL注入测试字符串:' and sleep(5) #。

发现接口35秒多才返回,与平常的检索时间多了35秒。虽然查询语句延时了,但不是我们规定的5秒,而是35秒,这是为什么呢?
为了探究原因,我们对生成的SQL语句进行了深入分析:
SELECT id, username, email FROM member WHERE username LIKE '%' AND SLEEP(5) #%'
在 WHERE 子句中,多个表达式通过 AND 连接时,数据库通常会采用短路逻辑(Short-Circuit Evaluation)来优化计算:
如果某个表达式为 FALSE,则后续的表达式无需再计算,因为整个条件已经确定为 FALSE。
基于这一逻辑,我们推断出接口响应延迟35秒的原因:在数据库中,满足username LIKE '%'条件的数据记录多达7条。为了验证这一推断,我们直接连接数据库进行了查询,结果确实发现了7条匹配记录。

接下来,我们决定继续进行时间盲注攻击,但为了提高效率,我们需要调整策略,确保username LIKE '%'表达式能够精确匹配到唯一一条记录。例如,我们可以将表达式修改为username LIKE '%vince',即在输入框中输入:vince' and sleep(5) #。

此时,接口的响应时间终于恢复到了我们预期的5秒多。
随后,我们利用if()函数来尝试获取数据库中的信息。在输入框中,我们输入了如下字符串:vince' and IF(SUBSTRING((SELECT DATABASE()), 1, 1) = 'p', SLEEP(5), 1) #

这条语句用于判断数据库名称的首位字符是否为'p'。如果判断为真,则接口响应会延迟5秒;否则,响应将立即返回。通过这种方法,我们可以逐步推断出数据库名称的每一位字符。至于后续如何获取数据库第二位及更多位字符的操作,原理相同,此处不再赘述。
SQL注入之时间盲注的更多相关文章
- 依托http-headers的 sql注入和时间盲注
机缘巧合接触了一点关于sql注入的网络安全问题 依托 headers 的 sql 注入 一般来说大家都很清楚用户输入的危险性,通常会对用户表单提交的数据进行过滤(引号转码). 但是如果写过网络爬虫,那 ...
- 实验吧——who are you?(insert into注入 二分法 时间盲注)
题目地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 根据提示 “我要把攻击我的人都记录db中去!” 猜测这是insert into注入,会 ...
- SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- SQL注入之延迟盲注
延迟盲注 你不知道你输入的数据在sql被执行后是否是正确或错误的.你只知道有数据. 利用原理 借助if语句,如果正确就sleep(5),延迟5秒返回数据.通过数据返回的时间大小判断自己的语句是否正确执 ...
- 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- 掌控安全学院SQL注入靶场-布尔盲注(一)
靶场地址:http://inject2.lab.aqlab.cn/Pass-10/index.php?id=1 判断注入点: http://inject2.lab.aqlab.cn/Pass-10/i ...
- 掌控安全学院SQL注入靶场-布尔盲注(三)
测试了username参数,没有发现注入 123456' or '1'='1 123456' or '1'='2 第二种注入方法
- 掌控安全学院SQL注入靶场-布尔盲注(二)
首页打开如下 判断注入 闭合报错 先判断数据库的长度....
- SQL注入之Sqli-labs系列第九关和第十关(基于时间盲注的注入)
开始挑战第九关(Blind- Time based- Single Quotes- String)和第十关( Blind- Time based- Double Quotes- String) gog ...
随机推荐
- 修复Bug好比钓鱼
作者: Jim Bird 来源: CSDN 发布时间: 2012-09-13 10:43 阅读: 4224 次 推荐: 18 原文链接 [收藏] 英文原文:Fixing a Bug ...
- 销讯通-CRM系统的功能远远不止于用来打卡
在信息化的过程中,CRM系统其实很多企业都在用,最开始的设想是很好的,大家用着之后发现它可能最终只会沦为一个上班打卡考核或者是最基础的一个签到工具了,没有发挥它应有的一个功能. 最基础的一个诉求 我们 ...
- 解析JDBC使用查询MySQL【非流式、流式、游标】
解析JDBC使用游标查询MySQL 使用jdbc查询MySQL数据库,如果使用游标或者流式查询的话,则可以有效解决OOM的问题,否则MySQL驱动就会把数据集全部查询出来加载到内存里面,这样在大数据的 ...
- 多线程编程入门Thread_Task_async_await简单秒懂
` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...
- uni-app小程序(快手)日志打印坑位记录
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app. 坑位 最近在开发一 ...
- React使用useRef调用子组件方法
前情 公司前端主技术栈是react系,最近在提取组件的时候想到vue可以通过ref获取子组件,再调用子组件的方法,于是想在react中实现同样效果. 实现原理 父组件调用useRef获取ref对象,再 ...
- openEuler欧拉安装Jenkins并修改构建workspace路径
一.系统优化 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭selinux sed -ri 's/SELINUX=enfo ...
- 不错的AI项目集合
最近收集了一些不错的AI项目. AutoGPT:AutoGPT 的愿景是让每个人都可以使用和构建无障碍 AI.我们的使命是提供工具,以便您可以专注于重要的事情. Stable Diffusion we ...
- 黑苹果(Hackintosh) - 安装1:用 VMware pro 16 安装 Big Sur 11.6
1. 背景情况 1.1 想法 想要体验体验macOS系统,不想花钱买 Macbook,就想着 装一个黑苹果体验下. 1.2 本机基本情况 笔记本:zx6 cp5s1 CPU:i5 8400 主板:H3 ...
- alibabacloud-jindodata
https://github.com/aliyun/alibabacloud-jindodata https://github.com/aliyun/alibabacloud-jindodata/bl ...