CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析

本次的漏洞研究基于thinkPHP开发开的一款项目.....

漏洞描述

Likeshop是Likeshop开源的一个社交商务策略的完整解决方案,开源免费版基于thinkPHP开发。Likeshop 2.5.7.20210311及之前版本存在代码问题漏洞,该漏洞源于文件server/application/api/controller/File.php的参数file会导致不受限制的上传。

fofa查询语句

icon_hash="874152924" && body="/pc/"

环境搭建

下载https://github.com/likeshop-github/likeshop/releases/tag/2.5.7

漏洞代码审计

server\application\api\controller的File.php文件,路由/api/file/formimage

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第1张图片

进入userFormImage方法,FileServer::userFormImages()

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第2张图片

107行 创建实例StorageDriver 后调用setUploadFile方法,跟过去

其实调用的是引擎的setUplloadFile方法,是那个引擎呢!

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第3张图片

分别为阿里云存储引擎 (OSS) 本地文件驱动 腾讯云存储引擎 (COS) 七牛云存储引擎 存储引擎抽象类(那三个全部继承这个类)

setUploadFile方法只在存储引擎抽象类中存在,因此分析server.php下的setUploadFile方法

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第4张图片

我们重点关注上传文件名,文件内容。代码中没有任何过滤的函数,

查看109行 StorageDriver->upload 方法

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第5张图片

我们挨个分析这几个引擎类对upload的实现

local类,直接move 没有任何过滤

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第6张图片

Aliyun类

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第7张图片

剩下的引擎类就不分析了,基本都没有做文件名的后缀检测。

文件上传漏洞可成功利用

后续修复

在修复的版本中,Server.php中进行了文件名的限制

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第8张图片

这里校验文件处new了一个Upload对象,该对象内容如下

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第9张图片

漏洞复现

进入环境页面设置好sql连接

 等待安装

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第10张图片

注册一个账号

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第11张图片

登录账号后点击我的 设置自己信息

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第12张图片

这里其实是有头像的,点击上传头像

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第13张图片

抓包改变content-type 打入payload

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第14张图片

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第15张图片

实际测试没有cookie 没有token也可成功访问该接口

访问payload文件

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析_第16张图片

payload成功执行 , 漏洞复现成功

附赠payload

POST /api/file/formimage HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: multipart/form-data; boundary=---------------------------348900489633202294591557761619
Content-Length: 248

-----------------------------348900489633202294591557761619
Content-Disposition: form-data; name="file"; filename="b.php"
Content-Type: application/octet-stream


-----------------------------348900489633202294591557761619--

你可能感兴趣的:(PHP代码审计,安全,web安全,php)