深信服 EDR终端检测响应平台RCE漏洞代码分析

一觉醒来,听说护网蓝队捕获了一个深信服的0day,待我看完这部剧再分析一下。

EDR简介

终端检测响应平台(EDR)是深信服公司提供的一套终端安全解决方案,方案由轻量级的端点安全软件(Agent)和管理平台(MGR)共同组成。

fofa语法

title="终端检测响应平台"

漏洞复现

https://ip+端口/tool/log/c.php?strip_slashes=system&host=id

代码分析

将c.php文件拷贝到本地进行分析

 

 $_REQUEST会将接入的参数保存成数组,然后将前台获取的参数传入到了$show_form()

跟入$show_form

$show_form是匿名函数,use是调用外部变量$strip_slashes、$show_input

extract() 函数会从数组中将变量导入到当前的符号表。它会把数组变成变量,该函数使用数组键名作为变量名,使用数组键值作为变量值。

因此,extract()存在变量覆盖问题,上述poc就是利用了此处的变量覆盖。

于是传入的参数就变成了$strip_slashes=system、$host=id

接着往下看,

在93行中使用了$strip_slashes($host),结合poc,于是该处就变成了sysytem(id)执行了系统命令,产生了该漏洞。

从下图可以看到,本来$strip_slashes也是匿名函数,该函数的作用就是删除变量$var中的反斜杠\

继续分析tool文件下的其他PHP文件,搜索了一下extract,发现好多文件都可能存在这个变量覆盖导致的rce漏洞

随机挑选一个web\tool\ldb_cli.php进行分析:

160行接参数,保存成数组

77行将参数传入函数当中

构造tool/ldb_cli.php?strip_slashes=sysgem&json=whoami应该可以运行成功,然后当我进行测试的时候并没有,

这是为什么了,一开始我以为可能是偶然现象,环境或者网络的问题。今天有空又想到了这个问题,就又来看看代码。

原来就在文件开头, 有个判断

如果不存在/php/enable_dc_tool文件,则执行die,退出当前这个脚本,后门都不执行了。

如果存在/php/enable_dc_tool文件,则执行touch($dc_tool_flag, time()),修改这个文件的修改时间

再看看tool\show_progress.php,也是同样的情况。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值