一,进入环境,在目录扫描未果,猜测可能是.git泄露,尝试一下
二,利用工具scrabble,果真是.git泄露
得到如下源码,开始代码审计
1,第一个if;可通过get方式得到一个exp参数
2,第二个if;然后过滤了data协议,filter协议,php伪协议,phar
3,第三个if;如果’;'===preg_replace(…)时,可执行exp传递的命令
4,第四个if;是一个黑名单绕过像et,na,info,dec,bin,hex,oct,pi,log,i不能使用
三,构造payload
因为上述过滤的并未过滤 session_id() 所以我想到的使用 session_id来获取 flag
总结
1,.git泄露,scrabble的使用
2,无参数RCE,通过没有参数的函数达到命令执行的目的。具体绕过技巧可参考另一篇博客