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

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.mzph.cn/diannao/18354.shtml

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

相关文章

UE5 UE4 快速定位节点位置

在材质面板中,找到之前写的一个节点,想要修改,但是当时写的比较多,想要快速定位到节点位置. 在面板下方的 Find Results面板中,输入所需节点,找结果后双击,就定位到该节点处。 同理,…

【CUDA】Nsight profile驱动的CUDA优化

前置准备 安装NVIDIA Nsight Compute。 安装好后选择使用管理员权限启动下载官方 Demo 代码官方博客Shuffle warp 1. 任务介绍及CPU版本 1.1 任务介绍 任务理解: 有一个 L x M 的矩阵 M 1 M_1 M1​ 对其每行取平均值 得到 V 1 ∈ R L 1 V_1 \in \mathbb{R}^{…

pikachu—exec“eval“

这是原画面 然后呢? 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo(); 这是输入后的结果

(四十八)第 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…

《python编程从入门到实践》day41

# 昨日知识点回顾 用户注销、注册&#xff0c;限制访问&#xff0c;新主题关联到当前用户 # 今日知识点学习 第20章 设置应用程序的样式并部署 20.1 设置项目“学习笔记”的样式 20.1.1 应用程序django-bootstrap4 # settings.py ---snip--- INSTALLED_APPS [# 我的应用程序…

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中&#xff0c;神经网络以其强大的学习和预测能力&#xff0c;成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化&#xff0c;离不开两个核心过程&#xff1a;前向传播和反向传播。其中&#xff0c;链式法则作为微积分学中的一个基本概念&#…

(C11) 泛型表达式

文章目录 ⭐语法⭐举例&#x1f6a9;判断对象类型&#x1f6a9;判断指针&#x1f6a9;函数重载&#x1f6a9;嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词&#xff1a; Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

PHP:phpmyadmin 将查询数据导出csv

1、输入你的SQL查询出结果 2、查出数据以后拖到最下方【导出】 3、导出CSV

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言&#xff0c;提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中&#xff0c;内置的关键字"Synchronized"扮演了至关重要的角色&#xff0c;它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

新书速览|Golang+Vue.js商城项目实战

架构师一步一步教你做项目&#xff0c;从架构设计到技术实现完整解析 本书内容 《GolangVue.js商城项目实战》以Gin和Vue.js为核心框架&#xff0c;以全栈商城项目开发为主线&#xff0c;详尽介绍前后端分离架构开发Web网站项目的关键阶段和技术细节。全书共9章&#xff0c;第…

多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

时序预测这东西大家一般不陌生,随便举几个例子 1- 金融,比如预测股票(股市有风险,入市需谨慎),纯用K线做,我个人不太推荐 2- 天气,比如预测云图,天气预报啥的 3- 交通,早晚高峰,堵车啥的,车啥时候加油,啥时候充电之类的 4- 医疗,看你病史和喝酒的剂量建模,看你会…

华为实训课笔记 2024

华为实训 5/205/215/225/235/275/28 5/20 5/21 5/22 5/23 5/27 5/28

BLE蓝牙模块在车联网中的智能开锁、数据监控应用

随着科技的不断发展&#xff0c;车联网已经成为了汽车行业的一个热门话题。在这个领域中&#xff0c;BLE蓝牙模块发挥着重要的作用&#xff0c;特别是在智能开锁和数据监控方面的应用。本文将详细介绍BLE蓝牙模块在这两个方面的应用及其优势。   一、智能开锁   1.车辆远程…

【调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包】

调试笔记-系列文章目录 调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 文章目录 调试笔记-系列文章目录调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、调试步…

C# WPF编程基础

XAML文件内容 <Window x:Class"Wpf_demo1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/ble…

做抖店如何避免被同行内卷?这5点建议,可以解决这个问题

我是王路飞。 都说2024年的抖店不赚钱了&#xff0c;商家太多了&#xff0c;太内卷了&#xff0c;一点都不好做~ 那为什么依然有很多商家在坚持做呢&#xff1f;为什么依然有很多新手入局呢&#xff1f; 无非是抖店确实能带来可观的利润回报罢了。 那如何避免被同行内卷呢&…

“SSH服务器拒绝了密码,请再试一次”的问题解决思路

大家在使用XShell工具连接Ubuntu系统时&#xff0c;可能会出现错误如下: 通过在网上查阅资料和实践解决这个问题&#xff0c;将我的思路分享给大家&#xff01; 首先&#xff0c;我会先从使用Xshell连接远程服务器会涉及哪些东西上思考这个问题&#xff0c;即通过ssh服务连接远…

CRMEB开源商城系统:全开源、高灵活性的电商解决方案

一、引言 随着电子商务的飞速发展&#xff0c;越来越多的企业和个人开始关注如何快速搭建一个稳定、高效且功能丰富的在线商城系统。在这样的背景下&#xff0c;CRMEB开源商城系统应运而生&#xff0c;凭借其前后端分离的架构、丰富的功能模块以及易用性&#xff0c;成为了众多…

基于RK3568核心板的雷视融合一体机,助力交通管理智能化升级

随着5G网络与智慧交通车路协同系统在全国各点的落地&#xff0c;作为提升交通安全的前沿技术方案也愈发受到重视。 在交通信控领域&#xff0c;以往的感知技术、无论是地磁、线圈还是摄像头&#xff0c;功能都仅仅局限于数清经过了多少车辆&#xff0c;无法满足交通数字化管理…

linux安装srs

获取srs cd /opt git clone -b 4.0release https://gitee.com/ossrs/srs.git cd srs/trunk 启动srs ./objs/srs -c conf/srs.conf ./etc/init.d/srs status 访问http://192.168.220.146:8080/出现下方图片说明安装成功 点击进入SRS控制台看到下方图片