当前位置: 首页 > article >正文

SQL注入相关知识

一、布尔盲注

1、布尔盲简介

布尔盲注是一种SQL注入攻击技术,用于在无法直接获取数据库查询结果的情况下,通过页面的响应来判断注入语句的真假,从而获取数据库中的敏感信息

2、布尔盲注工作原理

布尔盲注的核心在于利用SQL语句的布尔逻辑(真或假)来推断数据库中的信息。攻击者通过构造特定的SQL查询语句,观察应用程序的响应(通常是页面内容的变化、HTTP状态码的不同或响应时间的延迟等),来判断布尔条件的真假

3、常用函数

length()返回字符串的长度,用于确定数据库名表名字段名长度

substr()提取特定长度的字符串,用于逐步猜测数据库名表名字段名

ascii():将字符转换ASCII码值,用于逐个字符猜测数据库名表名字段名

4、实战步骤

(1)判断注入点

通过构造如id=1 and 1=1id=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 delaySQL 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注入攻击技术&#xff0c;用于在无法直接获取数据库查询结果的情况下&#xff0c;通过页面的响应来判断注入语句的真假&#xff0c;从而获取数据库中的敏感信息 2、布尔盲注工作原理 布尔盲注的核心在于利用SQL语句的布尔逻辑…...

Codex CLI - 自然语言命令行界面

本文翻译整理自&#xff1a;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是可行的。以下是解决方案的步骤&#xff1a; 1. 确认系统驱动兼容性 检查NVIDIA驱动支持的CUDA版本&#xff1a;运行 nvidia-smi&#xff0c;右上角显示的CUDA版本是驱动支持的最高版本。只要该版本不低于PyTorch所需的CUDA版本…...

Day57 | 79. 单词搜索、89. 格雷编码

79. 单词搜索 题目链接&#xff1a;79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;中等 代码&#xff1a; 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 的文本文件&#xff0c;将以下内容复制粘贴进去保存即可&#xff1a; 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实现

引言 在现代操作系统中&#xff0c;进程和线程是并发编程的两大核心概念。理解它们的区别与联系对开发高性能、高可靠性的程序至关重要。本文将通过原理分析和Java代码示例&#xff0c;深入探讨这两个关键概念。 一、基本概念 1.1 进程&#xff08;Process&#xff09; 定义&…...

【Flutter深度解析】多线程编程

Flutter作为单线程模型的框架&#xff0c;在处理复杂计算时可能会遇到性能瓶颈。本文将全面剖析Flutter中的多线程编程方案&#xff0c;帮助你充分利用设备的多核性能&#xff0c;构建流畅的Dart应用。 一、Flutter线程模型基础 1. Dart的单线程事件循环 Flutter应用运行在单…...

HAL库配置RS485+DMA+空闲中断收发数据

前言&#xff1a; &#xff08;1&#xff09;DMA是单片机集成在芯片内部的一个数据搬运工&#xff0c;它可以代替单片机对数据进行传输、存储&#xff0c;节约CPU资源。一般应用场景&#xff0c;ADC多通道采集&#xff0c;串口收发&#xff08;频繁进入接收中断&#xff09;&a…...

【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是计数排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、计数排序基础实现 原理 通过统计每个元素的出现次数&#xff0c;按顺序累加得到每个元素的最终位置&#xff0c;并填充到结果数组中。 代码示…...

嵌入式单片机开发 - Keil MDK 编译与烧录程序

Keil MDK 编译程序 1、Keil MDK 编译按钮 Build 按钮&#xff1a;重新编译整个工程的所有源文件&#xff0c;无论它们是否被修改过 Rebuild 按钮&#xff1a;仅编译修改过的文件及其依赖项&#xff0c;未修改的文件直接使用之前的编译结果 2、Keil MDK 编译结果 linking... …...

裂项法、分式分解法——复杂分式的拆解

目录 一、裂项法 1. 核心思想 2. 适用场景 3. 步骤 4. 例题 二、分式分解 1. 核心思想 2. 适用场景 3. 步骤 4.例题 一、裂项法 1. 核心思想 将一项拆解为多项之差&#xff0c;使得在求和时中间项相互抵消&#xff0c;最终仅剩首尾少数项。 2. 适用场景 级数求和…...

黑马点评秒杀优化

异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客&#xff0c;为了处理并发情况下的线程安全和数据一致性的问题&#xff0c;我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…...

JavaScript 的演变:2023-2025 年的新特性解析

随着Web技术的飞速发展&#xff0c;ECMAScript&#xff08;简称ES&#xff09;作为JavaScript的语言标准&#xff0c;也在不断进化。 本文将带你学习 ECMAScript 2023-2025 的新特性。 一、ECMAScript 2023 新特性 1.1 数组的扩展 Array.prototype.findLast()/Array.protot…...

[Java · 初窥门径] Java 注释符

&#x1f31f; 想系统化学习 Java 编程&#xff1f;看看这个&#xff1a;[编程基础] Java 学习手册 0x01&#xff1a;Java 注释符简介 在编写程序时&#xff0c;为了使代码易于理解&#xff0c;通常会为代码加一些注释。Java 注释就是用通俗易懂的语言对代码进行描述或解释&a…...

Spring MVC 全栈指南:RESTful 架构、核心注解与 JSON 实战解析

目录 RESTful API 设计规范Spring MVC 核心注解解析静态资源处理策略JSON 数据交互全解高频问题与最佳实践 一、RESTful API 设计规范 1.1 核心原则 原则说明示例 URI资源为中心URI 使用名词&#xff08;复数形式&#xff09;/users ✔️ /getUser ❌HTTP 方法语义化GET&…...

【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧

一、Nginx 在 Web 服务器场景中的深度应用​ 1.1 静态网站部署与优化​ 在 CentOS 7 系统中&#xff0c;使用 Nginx 部署静态网站是最基础也最常见的应用场景。首先&#xff0c;准备网站文件&#xff0c;在/var/www/html目录下创建index.html文件&#xff1a; sudo mkdir -p…...

Docker环境下SpringBoot程序内存溢出(OOM)问题深度解析与实战调优

文章目录 一、问题背景与现象还原**1. 业务背景****2. 故障特征****3. 核心痛点****4. 解决目标** 二、核心矛盾点分析**1. JVM 与容器内存协同失效****2. 非堆内存泄漏****3. 容器内存分配策略缺陷** 三、系统性解决方案**1. Docker 容器配置**2. JVM参数优化&#xff08;容器…...

【计算机网络】网络基础(协议,网络传输流程、Mac/IP地址 、端口号)

目录 1.协议简述2.网络分层结构2.1 软件分层2.2 网络分层为什么&#xff1f; 是什么&#xff1f;OSI七层模型TCP/IP五层&#xff08;或四层&#xff09;结构 3. 网络与操作系统之间的关系4.从语言角度理解协议5.网络如何传输局域网通信&#xff08;同一网段&#xff09; 不同网…...

【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类型的数据时&#xff0c;实体对象要对其进行一些相关的配置&#xff0c;而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发&#xff0c;MyBatis_plus对于操作数据更灵活&#xff0c;jpa可以自动建表&#xff0c;两者各取其…...

使用MetaGPT 创建智能体(2)多智能体

先给上个文章使用MetaGPT 创建智能体&#xff08;1&#xff09;入门打个补丁&#xff1a; 补丁1&#xff1a; MeteGTP中Role和Action的关联和区别&#xff1f;这是这两天再使用MetaGPT时候心中的疑问&#xff0c;这里做个记录 Role&#xff08;角色&#xff09;和 Action&…...

C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式

核心概念 IObservable<T> 表示 可观察的数据源&#xff08;如事件流、实时数据&#xff09;。 关键方法&#xff1a;Subscribe(IObserver<T> observer)&#xff0c;用于注册观察者。 IObserver<T> 表示 数据的接收者&#xff0c;响应数据变化。 三个核心…...

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报表下载 观看视频&#xff0c;您将学会 在dify下如何快速的构建一个chatflow&#xff0c;来完成数据分析工作&#xff1b;如何在AI的回复中展示可视化的图表&#xff1b;如何在AI 的回复中加入Excel报…...

vue3 传参 传入变量名

背景&#xff1a; 需求是&#xff1a;在vue框架中&#xff0c;接口传参我们需要穿“变量名”&#xff0c;而不是字符串 通俗点说法是&#xff1a;在网络接口请求的时候&#xff0c;要传属性名 效果展示&#xff1a; vue2核心代码&#xff1a; this[_keyParam] vue3核心代码&…...

裸金属服务器有什么用途?

裸金属服务器可以直接在硬件上运行应用程序和操作系统&#xff0c;不需要虚拟化层&#xff0c;裸金属服务器还会为企业提供一种高性能、高可靠性和高安全性的计算资源&#xff0c;通常运用在需要大量计算能力和数据处理能力的应用场景中&#xff0c;下面介绍一下裸金属服务器的…...

旅游特种兵迪士尼大作战:DeepSeek高精准路径优化

DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 随着假期的脚步日渐临近&#xff0c;环球影城等备受瞩目的主题游乐场&#xff0c;已然成为大人与孩子们心中不可或缺的节日狂欢圣地。然而&#xff0c;随之而来的庞大客流&#xff0c;却总让无数游客在欢乐的…...

【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 使…...