堆叠注入学习
时间:2022-07-23
本文章向大家介绍堆叠注入学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
类似前言一样没用的话
这玩意用来记录一下我前天大晚上不睡觉理解的一个题目,没啥意思,没多少基础的东西,勿看
概念
众所周知在数据库语句中是通过 ;
来判断一个语句有没有结束的,堆叠注入的意思就是,一条里面有多个sql语句,例如
看起来和 union
的形式差不多,但是还是8一样的, union
执行的的语句类型是有限的,一般来说只用于查询语句,而堆叠注入能做到执行任意语句,只要数据库支持
演示
前天在某一处看到一道题
[SUCTF2019]EasySQLbuuoj
这道题的考点是源码泄露,接着sql注入
这是查询部分的语句 select$_POST[query]||flagfromflag
其中的可控点为 $_POST[query]
,发送post数据后,会拼合sql语句,于是在实验的时候,发现了一个问题
可以看到我第一条语句中,不论怎么样结果都是1,于是去google了一下
发现 ||
被mysql当成 or
来处理了,在查询的结果中,只要有一个是有结果的,那么这条语句的结果都是 True
也就是 1
,这带来的一个问题就是根本知道查询出来的结果是什么
在别的数据库中, ||
是做连接符来处理的(这里懒得开别的数据库了)
那么遇到了 select$_POST[query]||flagfromflag
这种语句就应该使用堆叠注入,注入一个set的语句,将mysql中的配置改了,这样一来,他就会将 ||
做连接符处理
语句:select $_POST[query] || flag from flag
select <这里是可控部分> || flag from flag
#输入 elapse
语句:select elapse || flag from flag
#构造堆叠注入 "1;set sql_mode=PIPES_AS_CONCAT;select 1"
语句:select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || flag from flag;
这时候,这条语句就执行了三次,第一次查询了1,没作用,第二次就修改了数据库的设置,将 ||
作为连接符号来用,而不是 or
,第三次就是构造出来防止语句报错的
这时你在去正常的查询,flag就拼接在其中了,因为没环境所以这里的flag是我乱敲的
- 在Windows下安装TensorFlow
- JavaFX——(第一篇:介绍篇)
- 自编码器是什么?有什么用?这里有一份入门指南(附代码)
- UWP基础教程 - {x:DeferLoadStrategy}
- UWP基础教程 - 重启应用
- html5打开摄像头
- UWP基础教程 - App多语言支持
- Golang实现Fibonacii的几种算法
- 【译】使用 dotnet watch 开发 ASP.NET Core 应用
- vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化)
- Golang语言切片slice的线程协程安全问题
- ASP.NET Core 在 Azure 开启 HTTPS
- 算法基础:最大递减数问题(Golang实现)
- 亲身经历的痛--database/sql: Stmt的使用以及坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信小程序引用we-cropper裁切图片
- NodeJs获取get/post传值
- Mybatis源码本地化构建Demo
- NodeJs封装静态web服务器、路由、读取文件获取响应类型
- NodeJs使用ejs模板引擎实现后端渲染
- 如何优雅地本地化构建Mybatis源码
- Vue监听返回键关闭弹出层不返回页面
- Css添加div点击态
- Mybatis源码笔记之浅析ParameterHandler
- SpringBoot总结之浅析自动化配置原理
- Vue用keep-alive实现页面缓存
- Mybatis源码笔记之浅析StatementHandler
- Spring之事务传播行为
- Js处理异步async,await
- Vue_Cli4.x使用px2rem + vant搭建移动端项目