深信服EDR RCE分析

0x00 前言

该漏洞是去年20年hw的时候爆的,最近正好在学习php代码审计就翻出来看看

0x01 分析

漏洞文件位置:/tool/log/c.php

image-20210113101846866

可以看到在第67和78行的地方定义了两个匿名函数$strip_slashes$show_input

$show_form 函数中直接引入了上面两个匿名函数

然后在第91行可以看到 extract 函数

image-20210113102153004

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了

image-20210113102841722

搜索 $show_form ,我直接好家伙。。。

$show_form$params直接从 $_REQUEST中获取

image-20210113103019451

那我们可以直接覆盖 strip_slashes 实现RCE

/tool/log/c.php?strip_slashes=system&host=id

image-20210113103259638

通过对函数的覆盖导致原来的

$strip_slashes($host) 在我们控制参数的情况下

变为了

system(id)

0x02 总结

看下来蛮奇妙的,不知道为啥开发定义的时候非要用匿名函数,然后也没有进行任何过滤,感觉大厂不应该写出这样的代码,估计这套EDR还有很多漏洞后面再去康康去

点赞
  1. gr3yy说道:

    师傅这是vpn把

    1. KpLi0rn说道:

      嗯嗯 感谢指正,是edr

发表评论

电子邮件地址不会被公开。必填项已用 * 标注