前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >堆叠注入学习

堆叠注入学习

作者头像
Elapse
发布2020-08-17 11:53:03
6670
发布2020-08-17 11:53:03
举报
文章被收录于专栏:E条咸鱼E条咸鱼

类似前言一样没用的话

这玩意用来记录一下我前天大晚上不睡觉理解的一个题目,没啥意思,没多少基础的东西,勿看

概念

众所周知在数据库语句中是通过 ;来判断一个语句有没有结束的,堆叠注入的意思就是,一条里面有多个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中的配置改了,这样一来,他就会将 ||做连接符处理

代码语言:javascript
复制
语句: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是我乱敲的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 E条咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类似前言一样没用的话
  • 概念
  • 演示
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档