信息搜集
进入界面是一个搜索框:

查看一下源代码,显示是POST传参:

随便上传个数字1:
抓包测试一下闭合,发现以双引号闭合会回显nonono,单引号闭合则无回显。

由于没有报错信息,所以我们不能确定具体的闭合形式。
测试一下有没有哪些关键字被过滤,找找灵感:
过滤了联合注入和报错注入的命令。
但是分号;没有被过滤,我们可以尝试堆叠注入
SQL注入
1;show databases;
1;show tables;


接下来想用show columns from Flag;爆出字段名,但是from和flag都被过滤了,无果。
到这里被卡住了,看了别人的WP,发现后端查询语句是这样的:
$sql = "select ".$post['query']."||flag from Flag";
补充:|| 或or 运算符讲解:
select command1 || command2
情况一:若command1为非0数字,则结果为1。
情况二:若command1为0或字母,command2为非0数字,则结果为1。
情况三:command1和command2都不为非0数字,则结果为0。
所以我们使用 sql_mode 中的 PIPES_AS_CONCAT 函数
该函数的作用是将:或运算符 转换为 连接字符,即将||前后拼接到一起。
1;sql_mode=PIPES_AS_CONCAT;select 1
拼接后的语句变成:
$sql = "select 1;sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag";
select 1||flag from Flag
表示先查询1的结果,再查询flag的结果,最后将结果合并输出。
但是这道题select被ban了,这种方法不能用,就当积累了。
输入 *,1
$sql = "select *,1||flag from Flag";
相当于
select * flag from Flag;select 1||flag from Flag;
搜索了表中所有数据,得到flag。













![[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法](https://i-blog.csdnimg.cn/direct/5860dc9b0d644f25835fc723cb0d33a9.png)





