CVE-2024-0352复现(likeshop v2.5.7文件上传漏洞)

2024-09-09

1. 漏洞描述

likeshop是一款开源的单商户商城系统,产品定位为B2C模式,类似京东自营商城。可以在https://github.com/likeshop-github/likeshop搜到其开源代码 免费企业版和付费企业版功能基本相同,只落后了付费企业版几个版本,可以说是非常良心了
漏洞出现在version <= 2.5.7.20210311中,为任意文件上传,攻击者可通过此漏洞上传木马获取服务器权限

2. 漏洞复现

复现环境为ubuntu20.04
首先需要下载源码包
https://github.com/likeshop-github/likeshop/releases/tag/2.5.7
将代码包解压后,运行如下命令

apt install php7.4-gd
apt install php7.4-curl
apt install php7.4-xml
apt install composer
apt install php-mysql
apt install mysql-server

cd server
composer install
php think run --host 0.0.0.0 --port 8000

完成上述命令后,通过浏览器访问IP:8000应该可以看到界面
注意,在安装过程中会要求你输入mysql数据库的账号名密码,默认账号密码在/etc/mysql/debian.cnf下
一开始登录127.0.0.1:8000/admin是管理者页面,要想验证poc,需要访问http://127.0.0.1:8000/mobile/页面,并注册一个账号

问题出现在头像的文件上传功能上,可以上传.php文件!
通过burp抓包,可以抓到请求
请返回报文如下所示:
可以看到该文件的存储路径是http:\/\/127.0.0.1:8000\/uploads\/user\/20240906195742ab9137289.php
可以无需权限直接访问该url(当然,127.0.0.1要改成你访问的ip地址)
漏洞复现成功(btw,这年头看到这么传统的文件上传漏洞可真是不容易

3. 漏洞分析

根据http请求路由formimage可以找到代码所在位置为server\application\api\controller
继续往下分析,可以看到如下代码:
setUploadFile和upload这两个函数就是我们要重点关注的了。
继续往下挖,可以看到setUploadFile的实现
upload的实现不再多谈,总之也是没有校验
所以在我个人看来,问题有三点:
1. 上传文件时没有校验文件
2. 上传成功后返回了服务器路径,可通过url进行访问
3. 没有限制用户访问上传后的文件

4. 漏洞修补方案

新版本中添加了文件后缀校验
🤔感觉很奇怪,如果修改后缀,能不能绕过呢?
试了一下,不行

references

likeshop官网
likeshop v2.5.7文件上传漏洞分析(CVE-2024-0352)
CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析
[漏洞复现]CVE-2024-0352