SQL(2)
一.时间盲注
有回显时用Union带出数据,只显示是否时可用布尔盲注得出数据,那如果没有任何输出时?
比如无论查询什么,都显示success,同一个回应,无法直接从服务器注入出任何数据,但是我们可以利用MySQL内置的延时函数sleep,人为的制造出差异
为了测试sql执行的延时,需要使用BP这款软件,输入username='or sleep(1)#
(注:or前面的为false时才会执行后面的)
运用到注入时可以使用if函数来进行条件判断,当if第一个参数为真时进行延时,输入username='or if(1=1,sleep(1),1)#
第一个条件为真时,延时
(注:if里含3个函数,第一个参数为真时,返回第二个参数,为假时,返回第三个参数)
例:username='or if(substr(password,1,1),sleep(1),1)#
sleep为一种延时函数,有5种函数
五种:sleep(),benchmark(t,exp),笛卡尔积,GET_LOCK() RLIKE正则
以下是对这几个 MySQL 特性的详解:
[111]、SLEEP()函数
1. 作用:
- 使 MySQL 服务器暂停执行指定的时间(以秒为单位)。
2. 语法:
- SLEEP(duration) ,其中 duration 是要暂停的时间长度,为整数。
3. 示例:
- SELECT SLEEP(5); :这条 SQL 语句会使数据库暂停执行 5 秒钟后再返回结果。
[222]、BENCHMARK()函数
1. 作用:
- 重复执行表达式一定次数,可用于测试性能,但不是真正意义上的延时函数。它可以用来衡量特定表达式的执行时间,但会消耗大量的系统资源。
2. 语法:
- BENCHMARK(count, expression) ,其中 count 是重复执行的次数, expression 是要执行的表达式。
3. 示例:
- SELECT BENCHMARK(1000000,NOW()); :这里会执行 NOW() 函数 1000000 次。可以通过比较执行前后的时间来了解函数的性能消耗。
[333]、笛卡尔积
1. 作用:
- 笛卡尔积是两个或多个表之间的一种组合结果集的方式,它会将一个表中的每一行与另一个表中的每一行进行组合,生成所有可能的组合结果。
2. 语法:
- 当使用多个表进行查询而没有指定连接条件时,就会产生笛卡尔积。例如, SELECT * FROM table1, table2; 。
3. 示例:
- 假设有两个表 table1 和 table2 ,分别有 3 行和 4 行数据。如果进行笛卡尔积操作,结果集将有 3 * 4 = 12 行数据。
- 笛卡尔积通常不是期望的结果,在实际查询中应该使用适当的连接条件来避免产生不必要的笛卡尔积,以提高查询性能和结果的准确性。
[444]、GET_LOCK()函数
1. 作用:
- 用于获取一个命名的锁,以实现同步机制,防止多个并发连接同时执行特定的代码块。
2. 语法:
- GET_LOCK(str,timeout) ,其中 str 是锁的名称, timeout 是等待获取锁的超时时间(以秒为单位)。如果在超时时间内无法获取锁,函数将返回 0;如果成功获取锁,返回 1。
3. 示例:
- SELECT GET_LOCK('my_lock',10); :尝试获取名为 my_lock 的锁,等待时间为 10 秒。如果成功获取锁,可以在后续的代码中执行需要同步的操作,完成后使用 RELEASE_LOCK() 函数释放锁。
[555]、RLIKE 正则表达式匹配
1. 作用:
- RLIKE (或 REGEXP )用于在 MySQL 中进行正则表达式匹配,以判断一个字符串是否与指定的正则表达式模式相匹配。
2. 语法:
- column_name RLIKE regex_pattern ,其中 column_name 是要进行匹配的列名, regex_pattern 是正则表达式模式。
3. 示例:
- SELECT * FROM my_table WHERE column_name RLIKE '^[a-z]+$'; :这条 SQL 语句将从 my_table 表中选择所有 column_name 列的值为纯小写字母组成的字符串的行。
- 正则表达式可以用于各种复杂的字符串匹配场景,例如匹配特定格式的电话号码、邮箱地址等。但在使用正则表达式时,需要注意性能问题,特别是对于大型数据集,复杂的正则表达式可能会导致查询性能下降。
二.报错注入
在某些情况下,服务器会返回SQL执行错误信息,我们可以利用这个错误信息进行有回显的注入,比如服务器不会返回查询结果,但如果发生SQL执行错误,会将错误输出
有很多可以使MySQL报错的函数
以ExtractValue举例
ExtractValue是一个使用xpath从xml中提取元素的函数,原型为ExtractValue(xml_data, xpath_expression)。其中,xml_data 是包含 XML 内容的列或表达式,xpath_expression 是用于指定要提取节点的 XPath 表达式。
例如,如果有一个存储 XML 数据的列 xml_col,要提取其中某个特定节点的值,可以使用如下语句:SELECT ExtractValue(xml_col, '/root/node_name');
正常的用法
select extractvalue('〈a〉〈b〉text〈/b〉〈/a〉','/a/b')
如果xpath参数有语法错误,整个参数就会被回显在错误信息中
select extractvalue('〈a〉〈b〉bbbb〈/b〉〈/a〉','~text')
我们可以利用一特性,将需要回显的信息插入到xpath参数中,在最前面插入一个'~',波浪号,使其发生语法错误,可以实现Union直接回显一样的效果,
12种报错函数
1. extractvalue() :可用于从 XML 文档中提取特定节点的值。通过构造恶意输入,可以使其产生错误信息并返回部分数据库内容。
- 示例: SELECT extractvalue(NULL,concat(0x3a,(SELECT database())));
2. updatexml() :用于更新 XML 文档中的特定节点。同样可以被利用进行报错注入。
- 示例: SELECT updatexml(NULL,concat(0x3a,(SELECT user())),NULL);
3. floor() :与随机数生成函数结合,可通过产生错误来暴露信息。
- 例如: SELECT FLOOR(RAND(0)*2)+(SELECT IF((SELECT COUNT(*) FROM information_schema.tables)>0,1,0));
4. exp() :指数函数,可用于报错注入场景。
- 示例: SELECT exp((SELECT (CASE WHEN (SELECT COUNT(*) FROM information_schema.tables)>0 THEN 1 ELSE 0 END)));
5. geometrycollection() :在特定情况下可被利用进行报错注入。
- 例如: SELECT ST_GeometryFromText('GEOMETRYCOLLECTION('||(SELECT (CASE WHEN (1=1) THEN 'POINT(1 1)' ELSE NULL END))||')');
6. polygon() :与几何相关的函数,可用于报错注入。
- 示例: SELECT ST_PolygonFromText('POLYGON((0 0,0 1,1 1,1 0,0 0),(0.5 0.5,0.5 0.6,0.6 0.6,0.6 0.5,0.5 0.5))')||(SELECT (CASE WHEN (1=1) THEN 'POINT(1 1)' ELSE NULL END));
7. multipoint() :多点几何函数,可能被用于报错注入。
- 例如: SELECT ST_MultiPointFromText('MULTIPOINT((0 0),(1 1))')||(SELECT (CASE WHEN (1=1) THEN 'POINT(1 1)' ELSE NULL END));
8. linestring() :线串几何函数,可用于报错注入。
- 示例: SELECT ST_LineFromText('LINESTRING(0 0,1 1)')||(SELECT (CASE WHEN (1=1) THEN 'POINT(1 1)' ELSE NULL END));
9. name_const() :可用于构造报错注入语句。
- 例如: SELECT * FROM users WHERE id=(SELECT name_const((SELECT user()),1)) OR 1=1;
10. cast() :类型转换函数,可在报错注入中发挥作用。
- 示例: SELECT CAST((SELECT user()) AS SIGNED);
11. concat() :字符串连接函数,常用于构造报错注入的输入。
- 例如: SELECT CONCAT('Error: ', (SELECT database()));
12. substring() :子字符串提取函数,可用于报错注入以获取特定部分的信息。
- 示例: SELECT SUBSTRING((SELECT user()),1,5);
三.注入点
根据用户插入数据的位置不同,可以有不同的SQL注入点,比较常见的有where,比如查询判断用户名之类的,还有一种是order by,会让用户选择以哪一列目标进行排序,在order by和where后会有一点区别,Union只能用在HAVING和order by之间,limit也是一样的作用
INSERT注入(insert)
UPDATE注入(update)
DELETE注入(delete)
一、ORDER BY 子句
如果应用程序允许用户指定排序字段,例如 SELECT * FROM table ORDER BY column_name ,攻击者可以通过修改 column_name 的值来进行 SQL 注入。例如,输入 column_name;(SELECT * FROM sensitive_table)-- ,可能会导致数据库执行恶意查询并返回敏感信息。
二、LIMIT 子句
在分页查询中,LIMIT 子句用于限制返回的记录数。如果应用程序允许用户指定 LIMIT 的参数,攻击者可以通过修改这些参数来进行 SQL 注入。例如, SELECT * FROM table LIMIT offset, count ,攻击者可以将 offset 或 count 的值修改为恶意的 SQL 表达式,如 offset;(SELECT * FROM sensitive_table)-- 。
三、INSERT 语句
如果应用程序允许用户输入数据并将其插入到数据库中,例如 INSERT INTO table (column1, column2) VALUES (value1, value2) ,攻击者可以通过修改 value1 和 value2 的值来进行 SQL 注入。例如,输入 value1'; DROP TABLE other_table;-- 可能会删除其他表。
四、UPDATE 语句
当应用程序允许用户更新数据库中的数据时,例如 UPDATE table SET column1 = value1 WHERE condition ,攻击者可以通过修改 value1 的值或者 condition 的值来进行 SQL 注入。例如,将 value1 设置为 '; DROP TABLE another_table;-- 可能会删除另一个表。
相关文章:
SQL(2)
一.时间盲注 有回显时用Union带出数据,只显示是否时可用布尔盲注得出数据,那如果没有任何输出时? 比如无论查询什么,都显示success,同一个回应,无法直接从服务器注入出任何数据,但是我们可以利…...

【IC每日一题:AMBA总线--APB协议时序及Verilog实现】
AMBA总线--APB协议时序及Verilog实现 1 APB3协议1.1 APB3时序1.1.1 APB写操作1.1.2 APB读操作 2 代码2.1 apb_master2.2 apb_slave 【博客首发于微信公众号《漫谈芯片与编程》,欢迎专注一下,多谢大家】 AMBA总线是用于连接微控制器和外围设备的总线协议&…...

抢先看!为什么很多公司会强行给员工电脑加屏幕水印?千字长文来解答
2024年度热议:为什么很多公司会强行给员工电脑加屏幕水印? 有人说:概是为了让员工时刻铭记,工作就像这水印,无处不在,想逃也逃不掉! “玩归玩,闹归闹”。 本文将对此进行详尽解答&…...
【AI技术】PaddleSpeech部署方案
【AI技术】PaddleSpeech部署方案 技术介绍优点缺点 部署基础环境的搭建分步详解国内镜像源切换所需环境1 g所需环境2 vim所需环境3 cuda所需环境4 cudnn所需环境5 ssl源码拉取PaddleSpeech环境安装 部署文件分享DockerHub 技术介绍 PaddleSpeech是飞浆平台的一款TTS框架。 优…...

可灵开始“独闯”,全面拥抱AI的快手能否尝到“甜头”?
现任谷歌CEO桑达尔皮查伊曾说到,“人工智能是我们人类正在从事的最为深刻的研究方向之一,甚至要比火与电还更加深刻。” 正如,Sora诞生时,在官方表述中被称为“世界模拟器”,它理解真实的规则,并在此基础上…...

qt QtConcurrent 详解
1、概述 QtConcurrent是Qt框架中用于简化多线程编程的一个模块,它提供了高层次的API来实现并行计算,而不需要开发者直接管理线程的创建、调度和销毁。QtConcurrent主要通过QFuture和QThreadPool来进行并发任务的执行,能够自动利用系统的所有…...
基于构件的软件开发、软件维护、区块链技术及湖仓一体架构的应用
目录 试题一 论基于构件的软件开发方法及其应用 试题二 论软件维护方法及其应用 试题三 论区块链技术及应用 试题四 论湖仓一体架构及其应用 相关推荐 试题一 论基于构件的软件开发方法及其应用 基于构件的软件开发(Component-Based Software Development,CBSD…...
【在Typora中绘制用户旅程图和甘特图】
在 Typora 中可以使用 Mermaid 绘制用户旅程图(User Journey Map),但由于 Mermaid 并不直接支持用户旅程图,我们可以通过一些图表的变通方式(比如流程图或甘特图)来表示用户旅程图的结构。用户旅程图通常展…...

【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(2)
快速跳转: 我的个人博客主页👉:Reuuse博客 新开专栏👉:Vue3专栏 参考文献👉:uniapp官网 ❀ 感谢支持!☀ 前情提要 🔺因为最近学习的vue语言,发现有很多细节…...
uniapp中使用全局样式文件引入的三种方式
如果你想在 uni-app 中全局引入 SCSS 文件(例如 global.scss),可以通过以下步骤进行配置: 方法一:在 main.js 中引入 在 main.js 中引入全局样式: 你可以在 src/main.js 文件中直接引入 SCSS 文件ÿ…...
计算机网络易混淆知识点串记
文章目录 计算机网络易混淆知识点串记各层PDU首部: 计算机网络易混淆知识点串记 各层PDU首部: PUD首部长度 (B:字节)首部单位数据链路–帧帧首:14B帧尾部:4B——IPV420~60字节4B [通过4位二进制表示]IPV6固定首部40字节[可拓展]4BTCP20~60字节4BUDP8B字节...

Java代码审计-模板注入漏洞
一、模板引擎 在Java开发当中,为了将前端和后端进行分离,降低项目代码的耦合性,使代码更加易于维护和管理。除去以上的原因,模板引擎还能实现动态和静态数据的分离。 二、主流模板引擎 在Java中,主流的模板引擎有:Fre…...

如何在Linux中使用Cron定时执行SQL任务
文章目录 前言一、方案分析二、使用步骤1.准备脚本2.crontab脚本执行 踩坑 前言 演示数据需要每天更新监控数据,不想手动执行,想到以下解决方案 navicat 创建定时任务java服务定时执行linux crontab 定时执行sql脚本 一、方案分析 我选择了第三个方案…...

数据集划分
1、 sklearn玩具数据集介绍 数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取 2 sklearn现实世界数据集介绍 数据量大,数据只能通过网络获取(科学上网) 3 sklearn加载玩具数据集 示…...

带你读懂什么是AI Agent智能体
一、智能体的定义与特性 定义:智能体是一个使用大语言模型(LLM)来决定应用程序控制流的系统。然而,智能体的定义并不唯一,不同人有不同的看法。Langchain的创始人Harrison Chase从技术角度给出了定义,但更…...
react动态路由
在React应用中,动态路由(Dynamic Routing)通常指的是根据应用的状态或用户的交互来动态地显示或隐藏路由(页面或组件)。这可以通过多种方法实现,包括使用React Router库,它提供了强大的路由管理…...

Linux基础(十四)——BASH
BASH 1.BASH定义2.shell的种类3.bash的功能3.1 命令记录功能3.2 命令补全功能3.3 命令别名设置3.4 工作控制、 前景背景控制3.5 程序化脚本: ( shell scripts)3.6 万用字符 4.bash的内置命令5.shell的变量功能5.1 变量的取用5.2 新建变量5.3 …...
架构师备考-概念背诵(系统架构)
软件架构概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分析设计在满足所规定的需求方面的有效性:(2)在设计变…...

如何让ffmpeg运行时从当前目录加载库,而不是从/lib64
程序在linux下运行时,一般从 /lib64 目录下加载依赖的库文件,如xxx.so. 有时候,系统里没有这些库,也不想从系统目录下加载,怎么办呢? 看下面的调整过程。 使用的源代码是 ffmpeg-6.1.tar.xz 解压后&…...
Kafka-Controller选举
一、上下文 《Kafka-broker粗粒度启动流程》博客中我们分析了broker的大致启动流程,这个时候每个broker都不是controller角色,下面我们就来看下它是如何选举出来的吧 二、设置ZooKeeper ZooKeeper是一个开源的分布式协调服务,主要用于分…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...