FOG远程命令执行(CVE-2024-39914)漏洞分析

前言

今天来分析一下FOG远程命令执行(CVE-2024-39914)漏洞,这个漏洞是七月份爆出来了,目前最新版已经修复,如果需要复现可以下载1.5.10.34之前的版本,我用的是1.5.10版本分析。

源码下载地址:

https://github.com/FOGProject/fogproject/releases/tag/1.5.10

漏洞分析

这个漏洞网上公布信息说是在FOG 在 /fog/management/export.php 中存在命令注入漏洞

打开下载的代码,web源代码在packages下的web目录

图片

然后找到存在漏洞的文件看一下

图片

然后解读一下这里的几行代码

23行中将session中的foglastreport值反序列化为对象,24行判断反序列化后的对象是否是ReportMaker类型,如果不是的话对调用getClass方法,这里跟进一下getclass方法

图片

图片

因为传进来的参数是:ReportMaker,所以前面的判断都是不成立的,然后看467行,ReflectionClass是PHP中的一个反射类,这里的这个代码的功能是动态的去实例化这个类,然后看下接下来的代码,因为export.php调用这个类时只写了一个参数,那么$props就是默认的参数false,470行的判断不成立,然后继续往下看,475行获取反射类的构造函数,然后可以在export.php最下面那行跟进去看下,有构造函数的,然后就继续往下看if里的代码,又有if (count($args) === 1)  换个判断,然后往上找这个参数值是什么

图片

func_get_args这个函数的作用是返回调用函数参数的个数,然后如下图,调用时传了一个参数

图片

然后走进479行代码,将传的参数给ReportMaker这个类的构造函数,最后返回。

然后跟进export.php的27行代码outputReport方法看下

图片

可以看到147行和148行使用过滤器接收两个get传参,但是过滤器这里用的是默认的过滤参数,这里并不会进行任何的过滤,这里如果不知道这个过滤器都过滤了什么,可以将代码单独拿出来,执行一下看看过滤了什么。

接下来看一下payload是怎么写的

POST /fog/management/export.php?filename=$(echo+'kpvyggzrnonvuycaipvl'+>+qzjtyryy.php)&type=pdf HTTP/1.1

是发送了一个post请求,参数是通过url传递,filename这个参数是命令执行的关键,这里主要看一下对filename都进行了哪些处理

图片

这里相当于什么也没干,只要filename变量存在的话然后判断一下是否是字符串类型

接下来往后看,这里将文件名拿出来

图片

这里也是没做什么处理

图片

然后来到case这里,找一下pdf对应的数字是几

图片

跟进

图片

可以看到pdf是2

图片

这里将filename变量写到文件名上

图片

然后这里又将恶意代码放到了数组里,赋值给了cmd

图片

然后这里去执行了这个命令,最终导致任意命令执行

图片

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值