SQL注入相关知识
一、布尔盲注
1、布尔盲简介
布尔盲注是一种SQL注入攻击技术,用于在无法直接获取数据库查询结果的情况下,通过页面的响应来判断注入语句的真假,从而获取数据库中的敏感信息
2、布尔盲注工作原理
布尔盲注的核心在于利用SQL语句的布尔逻辑(真或假)来推断数据库中的信息。攻击者通过构造特定的SQL查询语句,观察应用程序的响应(通常是页面内容的变化、HTTP状态码的不同或响应时间的延迟等),来判断布尔条件的真假
3、常用函数
length():返回字符串的长度,用于确定数据库名、表名或字段名的长度
substr():提取特定长度的字符串,用于逐步猜测数据库名、表名或字段名
ascii():将字符转换为ASCII码值,用于逐个字符地猜测数据库名、表名或字段名
4、实战步骤
(1)判断注入点:
通过构造如id=1 and 1=1和id=1 and 1=2的语句,观察页面响应来确认注入点
(2)判断长度:
使用length()函数确定目标字符串的长度,例如id=1 and length(database())=8
(3)枚举字符:
使用substr()和ascii()函数逐个字符地猜测目标字符串,例如id=1 and ascii(substr(database(),1,1))=100
5、布尔盲注适用场景
页面不会回显SQL语句的执行结果;
数据库报错被处理,不会显示错误信息;
无法使用联合查询注入(UNION注入)或报错注入
6、实例
典型的布尔盲注攻击场景
假设后端的PHP代码如下:
<?php
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = '$id'";
$result = mysqli_query($conn, $query);
?>
然后我们构造这样的注入语句:
/?id=1' and 1=1
后端生成的SQL语句则为:
SELECT * FROM users WHERE id = '1' and 1=1
解释:
1=1 始终为真,因此这条SQL语句等价于:
SELECT * FROM users WHERE id = '1'
数据库会正常执行这条语句,页面会正常显示
那假如我们构造的SQL语句为:
/?id=1' and 1=2
则后端生成的SQL语句为:
SELECT * FROM users WHERE id = '1' and 1=2
解释:
1=2 始终为假,因此这条SQL语句等价于:
SELECT * FROM users WHERE id = '1' and FALSE
由于 1=2 为假,整个条件 id = '1' and 1=2 也为假,因此这条SQL语句不会返回任何结果;
如果页面逻辑依赖于查询结果的存在(例如,显示用户信息),页面可能会显示错误或异常
攻击者的逻辑判断
攻击者通过观察页面的响应来判断SQL语句的真假:
1、页面正常显示
如果页面正常显示,说明注入的条件为真(1=1);
这表明注入的SQL语句被成功执行,且条件为真
2、页面显示错误或异常
如果页面显示错误或异常,说明注入的条件为假(1=2)
这表明注入的SQL语句被成功执行,但条件为假,导致查询没有返回结果
布尔盲注的原理
布尔盲注的核心在于利用布尔逻辑(真或假)来判断注入语句的真假。攻击者通过构造特定的注入语句,观察页面的响应来推断数据库中的信息
示例
假设攻击者想判断数据库中是否存在某个用户 admin,可以使用以下步骤:
1、构造注入语句
/?id=1' and (SELECT username FROM users WHERE username='admin')='admin' --+
后端生成的SQL语句:
/?id=1' and (SELECT username FROM users WHERE username='admin')='admin' --+
2、观察页面响应
如果页面正常显示,说明条件为真,数据库中存在用户 admin;
如果页面显示错误或异常,说明条件为假,数据库中不存在用户 admin
二、时间盲注
1、时间盲注简介
时间盲注(Time-Based Blind SQL Injection)是一种SQL注入攻击技术,用于在无法直接获取数据库查询结果的情况下,通过测量数据库响应的时间来推断数据库中的信息。这种方法特别适用于那些不会直接返回错误信息或查询结果的场景
2、时间盲注工作原理
时间盲注的核心在于利用SQL语句的执行时间来判断注入语句的真假。攻击者通过构造特定的SQL语句,使数据库在满足某些条件时延迟响应。如果页面响应时间明显增加,说明注入的条件为真;如果响应时间正常,说明注入的条件为假
3、常用函数
SLEEP():MySQL中的函数,用于使数据库延迟指定的时间(秒);
waitfor delay:SQL Server中的函数,用于使数据库延迟指定的时间;
pg_sleep():PostgreSQL中的函数,用于使数据库延迟指定的时间
4、实战步骤
(1)判断注入点
通过构造如id=1' and sleep(5)的语句,观察页面响应时间来确认注入点
如果页面响应延迟了5秒,说明存在注入点
(2)判断条件真假
例如
/?id=1' and (select 1 from users where username='admin')=1 and sleep(5)
如果页面响应延迟了5秒,说明条件为真;如果响应时间正常,说明条件为假
(3)枚举数据库信息
通过逐个字符地猜测数据库名、表名或字段名,构造注入语句并观察响应时间。
例如,猜测数据库名的第一个字符是否为'a':
/?id=1' AND ASCII(SUBSTRING((SELECT database()), 1, 1))=97 AND SLEEP(5)
如果页面响应延迟了5秒,说明第一个字符为'a';否则,继续猜测其他字符。
示例
假设后端的PHP代码如下:
<?php
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = '$id'";
$result = mysqli_query($conn, $query);
?>
攻击者通过URL传递的参数是:
/?id=1' AND SLEEP(5) (大小写没有影响)
后端生成的SQL语句将是:
SELECT * FROM users WHERE id = '1' AND SLEEP(5)
如果页面响应延迟了5秒,说明存在注入点。
总之
时间盲注是一种通过测量数据库响应时间来推断数据库信息的SQL注入技术。攻击者通过构造特定的SQL语句,使数据库在满足某些条件时延迟响应,从而判断条件的真假。
相关文章:
SQL注入相关知识
一、布尔盲注 1、布尔盲简介 布尔盲注是一种SQL注入攻击技术,用于在无法直接获取数据库查询结果的情况下,通过页面的响应来判断注入语句的真假,从而获取数据库中的敏感信息 2、布尔盲注工作原理 布尔盲注的核心在于利用SQL语句的布尔逻辑…...
Codex CLI - 自然语言命令行界面
本文翻译整理自:https://github.com/microsoft/Codex-CLI 文章目录 一、关于 Codex CLI相关链接资源 二、安装系统要求安装步骤 三、基本使用1、基础操作2、多轮模式 四、命令参考五、提示工程与上下文文件自定义上下文 六、故障排查七、FAQ如何查询可用OpenAI引擎&…...
实现窗口函数
java 实现窗口函数 public class SlidingWin {public static void main(String[] args) {SlidingWin slidingWin new SlidingWin();double v slidingWin.SlidWin(2);System.out.println(v);}public double SlidWin(int k){int [] array new int[]{2,4,5,6,9,10,12,23,1,3,8…...
pycharm中怎么解决系统cuda版本高于pytorch可以支持的版本的问题?
在PyCharm中安装与系统CUDA版本不一致的PyTorch是可行的。以下是解决方案的步骤: 1. 确认系统驱动兼容性 检查NVIDIA驱动支持的CUDA版本:运行 nvidia-smi,右上角显示的CUDA版本是驱动支持的最高版本。只要该版本不低于PyTorch所需的CUDA版本…...
Day57 | 79. 单词搜索、89. 格雷编码
79. 单词搜索 题目链接:79. 单词搜索 - 力扣(LeetCode) 题目难度:中等 代码: class Solution {public boolean exist(char[][] board, String word) {char[] wordsword.toCharArray();for(int i0;i<board.lengt…...
清华《数据挖掘算法与应用》K-means聚类算法
使用k均值聚类算法对表4.1中的数据进行聚类。代码参考P281。 创建一个名为 testSet.txt 的文本文件,将以下内容复制粘贴进去保存即可: 0 0 1 2 3 1 8 8 9 10 10 7 表4.1 # -*- coding: utf-8 -*- """ Created on Thu Apr 17 16:59:58 …...
MATLAB - 小车倒立摆的非线性模型预测控制(NMPC)
系列文章目录 目录 系列文章目录 前言 一、摆锤/小车组件 二、系统方程 三、控制目标 四、控制结构 五、创建非线性 MPC 控制器 六、指定非线性设备模型 七、定义成本和约束 八、验证非线性 MPC 控制器 九、状态估计 十、MATLAB 中的闭环仿真 十一、使用 MATLAB 中…...
深入解析进程与线程:区别、联系及Java实现
引言 在现代操作系统中,进程和线程是并发编程的两大核心概念。理解它们的区别与联系对开发高性能、高可靠性的程序至关重要。本文将通过原理分析和Java代码示例,深入探讨这两个关键概念。 一、基本概念 1.1 进程(Process) 定义&…...
【Flutter深度解析】多线程编程
Flutter作为单线程模型的框架,在处理复杂计算时可能会遇到性能瓶颈。本文将全面剖析Flutter中的多线程编程方案,帮助你充分利用设备的多核性能,构建流畅的Dart应用。 一、Flutter线程模型基础 1. Dart的单线程事件循环 Flutter应用运行在单…...
HAL库配置RS485+DMA+空闲中断收发数据
前言: (1)DMA是单片机集成在芯片内部的一个数据搬运工,它可以代替单片机对数据进行传输、存储,节约CPU资源。一般应用场景,ADC多通道采集,串口收发(频繁进入接收中断)&a…...
【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
以下是计数排序的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格: 一、计数排序基础实现 原理 通过统计每个元素的出现次数,按顺序累加得到每个元素的最终位置,并填充到结果数组中。 代码示…...
嵌入式单片机开发 - Keil MDK 编译与烧录程序
Keil MDK 编译程序 1、Keil MDK 编译按钮 Build 按钮:重新编译整个工程的所有源文件,无论它们是否被修改过 Rebuild 按钮:仅编译修改过的文件及其依赖项,未修改的文件直接使用之前的编译结果 2、Keil MDK 编译结果 linking... …...
裂项法、分式分解法——复杂分式的拆解
目录 一、裂项法 1. 核心思想 2. 适用场景 3. 步骤 4. 例题 二、分式分解 1. 核心思想 2. 适用场景 3. 步骤 4.例题 一、裂项法 1. 核心思想 将一项拆解为多项之差,使得在求和时中间项相互抵消,最终仅剩首尾少数项。 2. 适用场景 级数求和…...
黑马点评秒杀优化
异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客,为了处理并发情况下的线程安全和数据一致性的问题,我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…...
JavaScript 的演变:2023-2025 年的新特性解析
随着Web技术的飞速发展,ECMAScript(简称ES)作为JavaScript的语言标准,也在不断进化。 本文将带你学习 ECMAScript 2023-2025 的新特性。 一、ECMAScript 2023 新特性 1.1 数组的扩展 Array.prototype.findLast()/Array.protot…...
[Java · 初窥门径] Java 注释符
🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java 学习手册 0x01:Java 注释符简介 在编写程序时,为了使代码易于理解,通常会为代码加一些注释。Java 注释就是用通俗易懂的语言对代码进行描述或解释&a…...
Spring MVC 全栈指南:RESTful 架构、核心注解与 JSON 实战解析
目录 RESTful API 设计规范Spring MVC 核心注解解析静态资源处理策略JSON 数据交互全解高频问题与最佳实践 一、RESTful API 设计规范 1.1 核心原则 原则说明示例 URI资源为中心URI 使用名词(复数形式)/users ✔️ /getUser ❌HTTP 方法语义化GET&…...
【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧
一、Nginx 在 Web 服务器场景中的深度应用 1.1 静态网站部署与优化 在 CentOS 7 系统中,使用 Nginx 部署静态网站是最基础也最常见的应用场景。首先,准备网站文件,在/var/www/html目录下创建index.html文件: sudo mkdir -p…...
Docker环境下SpringBoot程序内存溢出(OOM)问题深度解析与实战调优
文章目录 一、问题背景与现象还原**1. 业务背景****2. 故障特征****3. 核心痛点****4. 解决目标** 二、核心矛盾点分析**1. JVM 与容器内存协同失效****2. 非堆内存泄漏****3. 容器内存分配策略缺陷** 三、系统性解决方案**1. Docker 容器配置**2. JVM参数优化(容器…...
【计算机网络】网络基础(协议,网络传输流程、Mac/IP地址 、端口号)
目录 1.协议简述2.网络分层结构2.1 软件分层2.2 网络分层为什么? 是什么?OSI七层模型TCP/IP五层(或四层)结构 3. 网络与操作系统之间的关系4.从语言角度理解协议5.网络如何传输局域网通信(同一网段) 不同网…...
【Mysql】mysql数据库占用空间查询
Mysql数据库操作 数据库大小查询 # 查询 每一个 数据库大小 SELECT table_schema AS 数据库名,SUM(data_length index_length) / 1024 / 1024 AS 数据库大小(MB) FROM information_schema.TABLES GROUP BY table_schema;# 查询 数据库占用磁盘大小 SELECT SUM(data_length …...
pgsql中使用jsonb的mybatis-plus和jps的配置
在pgsql中使用jsonb类型的数据时,实体对象要对其进行一些相关的配置,而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发,MyBatis_plus对于操作数据更灵活,jpa可以自动建表,两者各取其…...
使用MetaGPT 创建智能体(2)多智能体
先给上个文章使用MetaGPT 创建智能体(1)入门打个补丁: 补丁1: MeteGTP中Role和Action的关联和区别?这是这两天再使用MetaGPT时候心中的疑问,这里做个记录 Role(角色)和 Action&…...
C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式
核心概念 IObservable<T> 表示 可观察的数据源(如事件流、实时数据)。 关键方法:Subscribe(IObserver<T> observer),用于注册观察者。 IObserver<T> 表示 数据的接收者,响应数据变化。 三个核心…...
Redis——网络模型之IO讲解
目录 前言 1.用户空间和内核空间 1.2用户空间和内核空间的切换 1.3切换过程 2.阻塞IO 3.非阻塞IO 4.IO多路复用 4.1.IO多路复用过程 4.2.IO多路复用监听方式 4.3.IO多路复用-select 4.4.IO多路复用-poll 4.5.IO多路复用-epoll 4.6.select poll epoll总结 4.7.IO多…...
【dify实战】chatflow结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载
dify结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载 观看视频,您将学会 在dify下如何快速的构建一个chatflow,来完成数据分析工作;如何在AI的回复中展示可视化的图表;如何在AI 的回复中加入Excel报…...
vue3 传参 传入变量名
背景: 需求是:在vue框架中,接口传参我们需要穿“变量名”,而不是字符串 通俗点说法是:在网络接口请求的时候,要传属性名 效果展示: vue2核心代码: this[_keyParam] vue3核心代码&…...
裸金属服务器有什么用途?
裸金属服务器可以直接在硬件上运行应用程序和操作系统,不需要虚拟化层,裸金属服务器还会为企业提供一种高性能、高可靠性和高安全性的计算资源,通常运用在需要大量计算能力和数据处理能力的应用场景中,下面介绍一下裸金属服务器的…...
旅游特种兵迪士尼大作战:DeepSeek高精准路径优化
DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 随着假期的脚步日渐临近,环球影城等备受瞩目的主题游乐场,已然成为大人与孩子们心中不可或缺的节日狂欢圣地。然而,随之而来的庞大客流,却总让无数游客在欢乐的…...
【MySQL】第一弹——MySQL数据库结构与操作
目录 一. 数据库介绍1.1 什么是数据库1.2 为什么要使用数据库1.3 主流数据库1.3.1 关系型数据库1.3.2 非关系型数据库 二. MySQL 的结构2.1 MySQL服务器和客户端2.2 MySQL服务器是如何组织数据的 三. 数据库的操作3.1 创建数据库语法格式示例 3.2 查看数据库语法格式示例 3.3 使…...
