题目
就这么点人答,可能是因为太简单了大佬都不稀做吧
这个奇怪的题打开以后是这样的
它可以做减乘除,唯独不能做加法
解题过程
我的解题方法简单粗暴,直接访问flag.php
文件完活
当然这可能是他们的一个bug,真正的大佬谁会这样解呢,这题主要考的是如何构造payload执行命令
[官方步骤]
可以看到题目限制了参数的长度要小于80,且不能包含空格、制表符、换行、单双引号、反引号、[]。并且输入的字符串需要为$whitelist中的函数。
最终会执行 eval('echo '.$content.';');
既然想要getshell,我们必须要能够获取任意字符串。由于单双引号被ban掉了,我们无法从函数名中提取字符串。因此我们只能想办法从函数的返回结果中获取。
我们发现base_convert函数可以返回任意字母,需要注意它无法返回_ *等特殊字符。
借助getallheader()来控制请求头,通过请求头的字段读取flag.php。
这里也就类似于$_GET
,$_POST
之类的,但是因为只能控制小写字符,所以大写的直接被pass掉。
getallheader()返回的是数组,要从数组里面取数据用array[‘xxx’],但是无奈[]被waf了,因为{}中是可以带数字的,这里用getallheader(){1}可以返回自定义头1里面的内容。
最后的payload如下:
0=system&1=cat%20flag.php&c=$pi=base_convert;$pi=$pi(53179,10,36)^$pi(1109136,10,36);${
$pi}{
0}(${
$pi}{
1})
利用burpsuite抓包,重放得到flag: