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;-- 可能会删除另一个表。

 

 

 

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

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

相关文章

千问70B的模型,我要使用V100*8的GPU机器可以做微调吗?

使用 8 张 V100 GPU(每张 32GB 显存)微调千问 70B 模型(Qwen-70B)是有可能的,但依然具有一定的挑战性,具体取决于显存优化和微调方法的选择。 1. 显存需求分析 70B 参数的模型加载后通常需要约 280-300 G…

基于STM32的太阳跟踪系统设计

引言 本项目基于STM32微控制器设计了一个智能太阳跟踪系统,通过集成光敏传感器模块和电机控制系统,实现太阳能电池板的自动调节,以保持太阳能电池板始终垂直对准太阳,从而最大化光能的吸收效率。该系统通过实时监测太阳光的方向&…

STM32Cube高效开发教程<高级篇><FreeRTOS>(十二)-----互斥量使用例程

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、示例功能和…

新能源汽车与公共充电桩布局

近年来,全球范围内对新能源汽车产业的推动力度不断增强,中国新能源汽车市场也呈现蓬勃发展的势头,在政策与市场的共同推动下,新能源汽车销量持续增长。然而,据中国充电联盟数据显示,充电基础设施建设滞后于新能源汽车数量增长的现状导致充电桩供需不平衡,公共充电桩服务空白区域…

Qt中的Model与View 4:QStandardItemModel与QTableView

目录 QStandardItemModel API QTableView 导航 视觉外观 坐标系统 API 样例:解析一个表格txt文件 QStandardItemModel QStandardItemModel 可用作标准 Qt 数据类型的存储库。它是模型/视图类之一,是 Qt 模型/视图框架的一部分。它提供了一种基于…

【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)

本篇文章分享关于如何使用STM32单片机对彩色摄像头(OV7725/OV2604)采集的图像数据进行分析处理,最后实现颜色的识别和检测。 目录 一、什么是颜色识别 1、图像采集识别的一些基本概念 1. 像素(Pixel) 2. 分辨率&am…

day54 图论章节刷题Part06(108.冗余连接、109.冗余连接II)

108.冗余连接 思路:从前向后遍历每一条边,边的两个节点如果不在同一个集合,就加入集合;如果边的两个节点已经出现在同一个集合里,说明边的两个节点已经连在一起了,再加入这条边一定会出现环。 代码如下&a…

Request 和 Response 万字详解

文章目录 1.Request和Response的概述2.Request对象2.1 Request 继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式 2.3 解决post请求乱码问题 掌握内容讲解内容小结 2.4 Request请求转发 3.HTTP响应详…

经典网络模型

文章目录 网络演变过程1、阻塞IO(BIO)实现缺点 2、非阻塞IO(NIO)实现改进后设置非阻塞IO缺点 3、IO多路复用第一版(select/poll)问题点改进缺点 4、IO多路复用第二版(epoll)5、信号驱…

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron ),又名感知机( Perceptron ),在模型结构上与 逻辑回归 一致,这里以一个二维输入量的例子对其进行进一步 的解释: 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

面试题:Spring(一)

1. Spring框架中bean是单例么? Service Scope("singleton") public class UserServiceImpl implements UserService { }singleton : bean在每个Spring IOC容器中只有一个实例。prototype:一个bean的定义可以有多个实例。 2. Spring框架中的…

qt QFileSystemModel详解

1、概述 QFileSystemModel是Qt框架中的一个关键类,它继承自QAbstractItemModel,专门用于在Qt应用程序中展示文件系统的数据。这个模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图…

从0开始深度学习(26)——汇聚层/池化层

池化层通过减少特征图的尺寸来降低计算量和参数数量,同时增加模型的平移不变性和鲁棒性。汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。 1 最大汇聚层、平均汇聚层 汇聚层和卷积核一样,是在输入图片上进行滑动计算,但是不同于卷积层的…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理,即斯托克斯是完全极化波的(一种琼斯矢量得到),T3是由一个散射矩阵得到,只有一个特征值。

Java的枚举(详细)

枚举(enum)是Java中的一种特殊类型,用于定义一组常量。枚举类型可以提高代码的可读性和可维护性,使得常量的使用更加清晰和安全。以下是关于枚举的详细介绍: ENUM的源码 package java.lang; ​ import java.io.Serial…

蓝桥杯顺子日期(填空题)

题目:小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123&a…

支持 Mermaid 语言预览,用通义灵码画流程图

想像看图片一样快速读复杂代码和架构?通义灵码上新功能:智能问答支持 Mermaid 语言的预览模式,即支持代码逻辑可视化,可以把每段代码画成流程图,像脑图工具一样画出代码逻辑和框架。 操作步骤:选中代码块&a…

promise的用法以及注意事项,看了这篇你就会了

一,为什么要使用promise,ta能解决那些问题? Promise 是异步编程的一种解决方案: 从语法上讲,Promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间…

DRAM有驱动吗?/usr/bin/cpp是C++相关的程序吗?BIOS到底是什么?

DRAM有驱动吗? 一般而言,以DRAM提供R/W操作的角度,DRAM不存在内核级驱动,因为各硬件访问DRAM都是通过硬件PATH,不需要软件驱动干预,这与一般所说的驱动程序不同,那些驱动程序大多是协调上层应用或内核程式…