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注入之时间盲注的更多相关文章

  1. 依托http-headers的 sql注入和时间盲注

    机缘巧合接触了一点关于sql注入的网络安全问题 依托 headers 的 sql 注入 一般来说大家都很清楚用户输入的危险性,通常会对用户表单提交的数据进行过滤(引号转码). 但是如果写过网络爬虫,那 ...

  2. 实验吧——who are you?(insert into注入 二分法 时间盲注)

    题目地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 根据提示  “我要把攻击我的人都记录db中去!”  猜测这是insert into注入,会 ...

  3. SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

  4. SQL注入之延迟盲注

    延迟盲注 你不知道你输入的数据在sql被执行后是否是正确或错误的.你只知道有数据. 利用原理 借助if语句,如果正确就sleep(5),延迟5秒返回数据.通过数据返回的时间大小判断自己的语句是否正确执 ...

  5. 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注

    墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...

  6. 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注

    墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...

  7. 掌控安全学院SQL注入靶场-布尔盲注(一)

    靶场地址:http://inject2.lab.aqlab.cn/Pass-10/index.php?id=1 判断注入点: http://inject2.lab.aqlab.cn/Pass-10/i ...

  8. 掌控安全学院SQL注入靶场-布尔盲注(三)

    测试了username参数,没有发现注入 123456' or '1'='1 123456' or '1'='2 第二种注入方法

  9. 掌控安全学院SQL注入靶场-布尔盲注(二)

    首页打开如下 判断注入 闭合报错 先判断数据库的长度....

  10. SQL注入之Sqli-labs系列第九关和第十关(基于时间盲注的注入)

    开始挑战第九关(Blind- Time based- Single Quotes- String)和第十关( Blind- Time based- Double Quotes- String) gog ...

随机推荐

  1. golang之循环导包

    作为一个 Golang 开发,你可能在项目中遇到过包的循环依赖问题.Golang 不允许循环依赖,如果检测到代码中存在这种情况,在编译时就会抛出异常. 循环依赖 假设我们有两个包:p1和p2.当包p1 ...

  2. 聊一下怎么10分钟速水中危CVE

    题目是真的.今天晚上刚接触关于CVE的审计和提交.只能说:牛逼的是真牛逼,水的是真水. 我接下来教你,怎么在10分钟里找到一个CVE的中危漏洞并且提交.然后你就可以去咸鱼接单了,一个一铂快 打开htt ...

  3. LeetCode题集-5 - 最长回文子串(一)

    题目:给你一个字符串 s,找到 s 中最长的回文子串. 这一题作为中等难度,常规解法对于大多数人应该都没有难度.但是其中也有超难的解决办法,下面我们就一起由易到难,循序渐进地来解这道题. 01.暴力破 ...

  4. MYSQL数据库设计操作规范 ❤️【建议收藏】

    1.背景及其意义 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短.本文档旨在帮助或指导数据中 ...

  5. 【数据结构】【直接排序法】Java代码

    public class 直接排序 { /** * 直接排序法 仅排序1轮 * @param arr 数组 * @param ji 基准索引,填写几,就以谁为基准进行一次划分 */ public st ...

  6. 虚拟机安装 Win10 ,无法启动,报错EFI Network ... Time out

    问题情况 VMWare 16 安装 win10 的镜像文件,无法启动,报错 EFI Network ... Time out 解决办法 虚拟机设置中 固件类型 改用 BIOS 已解决

  7. Springboot 指定外部配置文件启动

    <resources> <resource> <directory>src/main/resources</directory> <filteri ...

  8. Qt开源作品20-PNG图片警告去除工具

    一.前言 在新版的Qt5中,我们之前在Qt4中使用的png图片,到了这里经常会报一个警告,libpng warning: iCCP: known incorrect sRGB profile,尽管这种 ...

  9. Soulmate

    理想之所以是理想,也就是因为它只能存在于脑海中,天上月是天上月,水中花是水中花.但我们仍可以怀揣着对乌托邦的向往,所以,我对理想中的对象设想如下: 原来形容一个女子的眉眼,我总喜欢说眉眼如黛,眉如远山 ...

  10. [转]C# Winform 跨线程更新UI控件常用方法汇总

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现"线程间操作无效: 从不是创建控件的线程访问它"的异常.处理跨线程更新Winform UI控件常用 ...