0x00 前言
该漏洞是去年20年hw的时候爆的,最近正好在学习php代码审计就翻出来看看
0x01 分析
漏洞文件位置:/tool/log/c.php
可以看到在第67和78行的地方定义了两个匿名函数$strip_slashes
和 $show_input
在$show_form
函数中直接引入了上面两个匿名函数
然后在第91行可以看到 extract
函数
extract
函数会将数组中的key当作变量名,value当作变量值 ,容易造成变量覆盖
举个例子 :
<?php
$flag = 'xxxx';
extract($_GET);
原先代码中flag的数值是xxx
extract将get获取的参数和数值作为数组的key和value,如果我们传入了?flag=bbbb
数组就会变成如下
'flag'=>'bbbb'
这时候flag会作为参数名覆盖之前的flag参数,所以最后flag值为bbbb
再来看这里的代码
$show_form
接受的参数 $params
直接传给了extract函数,那么如果$params
可控那么我们就可以RCE了
搜索 $show_form
,我直接好家伙。。。
$show_form
的$params
直接从 $_REQUEST中获取
那我们可以直接覆盖 strip_slashes
实现RCE
/tool/log/c.php?strip_slashes=system&host=id
通过对函数的覆盖导致原来的
$strip_slashes($host)
在我们控制参数的情况下
变为了
system(id)
0x02 总结
看下来蛮奇妙的,不知道为啥开发定义的时候非要用匿名函数,然后也没有进行任何过滤,感觉大厂不应该写出这样的代码,估计这套EDR还有很多漏洞后面再去康康去
师傅这是vpn把
呸,edr
嗯嗯 感谢指正,是edr