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语句,使数据库在满足某些条件时延迟响应,从而判断条件真假。 

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

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

相关文章

Linux基础学习--linux的文件权限与目录配置

linux的文件权限与目录配置 1.用户与用户组 在Linux中&#xff0c;每个文件都有相当多的属性和权限&#xff0c;其中最重要的概念就是文件的拥有者。 1.1 文件拥有者 Linux是一个多人多任务的系统&#xff0c;常常有多人共用一台主机的情况出现&#xff0c;因此在系统中可以…

【数据可视化-19】智能手机用户行为可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个…

vue项目通过GetCapabilities获取wmts服务元数据信息并在openlayers进行叠加显示

vue项目通过openlayers加载wmts服务示例&#xff1a; <template><div id"map" ref"mapContainer"></div> </template><script> import ol/ol.css; import Map from ol/Map; import View from ol/View; import TileLayer fr…

JavaWeb学习打卡-Day1-分层解耦、Spring IOC、DI

三层架构 Controller&#xff08;控制层&#xff09;&#xff1a;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据。Service&#xff08;业务逻辑层&#xff09;&#xff1a;处理具体的业务逻辑。DAO&#xff08;数据访问层/持久层&#xff09;&#xff…

【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现

项目介绍 本课程演示的是一款基于Python爬虫二手房价格预测与可视化系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项…

游戏引擎学习第229天

仓库:https://gitee.com/mrxiao_com/2d_game_5 回顾上次内容并介绍今天的主题 上次留下的是一个非常简单的任务&#xff0c;至少第一步是非常简单的。我们需要在渲染器中加入排序功能&#xff0c;这样我们的精灵&#xff08;sprites&#xff09;才能以正确的顺序显示。为此我…

【“星瑞” O6 评测】—NPU 部署 face parser 模型

前言 瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力&#xff0c;支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 类型的加速。这里通过通过官方的工具链进行FaceParsingBiSeNet的部署 1. FaceParsingBiSeNet onnx 推理 首先从百度网盘…

单例模式的使用场景 以及 饿汉式写法(智能指针)

单例模式的使用场景 以及 饿汉式写法&#xff08;智能指针&#xff09; 饿汉式&#xff1a;创建类时就已经创建好了类的实例&#xff08;用智能指针实现&#xff09;什么时候用单例模式&#xff1a;1. 全局配置管理2. 日志系统3. 资源管理器4. 硬件设备访问总结 饿汉式&#xf…

微信小程序的全局变量(quanjubianliang)

在微信小程序开发中&#xff0c;管理和使用全局变量是一种常见的需求。例如&#xff0c;可以通过小程序的App实例和globalData对象来实现全局变量的存储和共享。以下是详细说明&#xff1a; 1. 全局变量的定义 微信小程序提供了 App() 函数&#xff0c;其中可以定义一个 global…

Latex科研入门教程

Introduction 这篇文章适合有markdown基础的人看,不会的人可以先去学一下markdown. 仅适用于科研入门. 本文使用的latex环境为overleaf Latex概况 文件格式 以.tex为结尾的文件可能有多个.tex文件最终只编译一个文件,相当于一个文件控制其他子文件. Latex 代码分为三种&…

FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南

本文参考&#xff1a;https://doc.tryfastgpt.ai/docs/development/ 一、背景与技术优势 FastGPT是基于LLM的知识库问答系统&#xff0c;支持自定义数据训练与多模型接入。硅基流动&#xff08;SiliconFlow&#xff09;作为AI基础设施平台&#xff0c;提供高性能大模型推理引…

19_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3

基于LLamaFactory微调_LLama3的LoRA微调 1. 基本概念1.1. LoRA微调的基本原理1.2. LoRA与QLoRA1.3. 什么是 GGUF 2.LLaMA-Factory介绍3. 实操3.1 实验环境3.2 基座模型3.3 安装 LLaMA-Factory 框架3.3.1 前置条件 3.4 数据准备3.5 微调和训练模型torch.cuda.OutOfMemoryError: …

Linux Wlan-四次握手(eapol)框架流程

协议基础 基于 IEEE 802.1X 标准实现的协议 抓包基础 使用上一章文章的TPLINK wn722n v1网卡在2.4G 频段抓包&#xff08;v2、v3是不支持混杂模式的&#xff09; eapol的四个交互流程 根据不同的认证模式不同&#xff0c;两者的Auth流程有所不同&#xff0c;但是握手流程基…

基于亚马逊云科技 Amazon Bedrock Tool Use 实现 Generative UI

背景 在当前 AI 应用开发浪潮中&#xff0c;越来越多的开发者专注于构建基于大语言模型&#xff08;LLM&#xff09;的 chatbot 和 AI Agent。然而&#xff0c;传统的纯文本对话形式存在局限性&#xff0c;无法为用户提供足够直观和丰富的交互体验。为了增强用户体验&#xff…

第 2 篇:初探时间序列 - 可视化与基本概念

第 2 篇&#xff1a;初探时间序列 - 可视化与基本概念 (图片来源: Luke Chesser on Unsplash) 在上一篇《你好&#xff0c;时间序列&#xff01;》中&#xff0c;我们了解了什么是时间序列数据以及学习它的重要性。现在&#xff0c;是时候卷起袖子&#xff0c;真正开始接触和探…

Linux服务器配置Anaconda环境、Pytorch库(图文并茂的教程)

引言&#xff1a;为了方便后续新进组的 师弟/师妹 使用课题组的服务器&#xff0c;特此编文&#xff08;ps&#xff1a;我导从教至今四年&#xff0c;还未招师妹&#xff09; ✅ NLP 研 2 选手的学习笔记 笔者简介&#xff1a;Wang Linyong&#xff0c;NPU&#xff0c;2023级&a…

Spring-AOP分析

Spring分析-AOP 1.案例引入 在上一篇文章中&#xff0c;【Spring–IOC】【https://www.cnblogs.com/jackjavacpp/p/18829545】&#xff0c;我们了解到了IOC容器的创建过程&#xff0c;在文末也提到了AOP相关&#xff0c;但是没有作细致分析&#xff0c;这篇文章就结合示例&am…

【Python网络爬虫开发】从基础到实战的完整指南

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;10个案例&#xff09;案例1&#xff1a;基础静态页面抓取案例2&#xff1a;动…

服务器监控软件推荐

以下是几款常用的服务器监控软件推荐&#xff0c;涵盖开源和商业方案&#xff0c;适用于不同规模和需求&#xff1a; 一、开源免费方案 Prometheus Grafana 特点&#xff1a;时序数据库 可视化仪表盘&#xff0c;支持多维度监控和告警。适用场景&#xff1a;云原生、Kubernet…

编译原理实验(四)———— LR(1)分析法

一、实验目的 掌握LR(1)分析法的基本原理与实现流程。通过构造LR(1)分析表&#xff0c;验证符号串是否符合给定文法规则。理解LR(1)分析中向前搜索符&#xff08;Lookahead Symbol&#xff09;的作用&#xff0c;解决移进-归约冲突。 二、实验题目 1.对下列文法&#xff0c;用…