thinkphp5远程代码执行漏洞分析(二)
payload url => http://127.0.0.1/thinkphp_5.0.10_full/public/index.php?s=index/index/index post => s=whoami&method=&filter[]=system&_method=__construct 版本:5.0.8~5.0.12 漏洞解析 开始前为了方便大家理解,先大致描述一下被触发的过程。原因在于Request.php文件中reqeust类的属性可控导致自定义filter过滤器可控,而filter又用于过滤用户传入的危害变量,可控的变量被传入了可控的filter中导致漏洞的形成。 从漏洞形成的地方反向跟踪payload的传入过程研究漏洞形成的原因: 首先在request.php的1060行下断点 分析堆栈 可以发现有危害的filter在request.php的1000行的getFilter方法中形成 跟踪进getFilter()方法,过滤器直接由request类的属性filter赋值了 那么$this->filter的属性是什么时候被我们改变的呢,继续在堆栈间查看变量的改变,可以发现属性在App::run()方法调用后和$request->param()方法调用前就已经被改变了。 继续在这两个方法之间一步步的调试,查看filter属性在何处被修改,最后定位到了Route