nagios 总结_基于JMX协议攻击方式总结

本文详细总结了针对CVE-2019-0192的安全漏洞,包括白盒审计和黑盒测试方法。文章列举了四种攻击方式,从第一种到第四种,全面阐述了利用JMX协议进行攻击的手段。
摘要由CSDN通过智能技术生成

35c32df4a8ddae8bd1f0ea9e7432920d.png

  JMX(Java Management Extensions)。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。MBean也是JavaBean的一种,在JMX中代表一种可以被管理的资源。一个MBean接口由属性(可读的,可能也是可写的)和操作(可以由应用程序调用)组成。 整体架构图如下: 50dd24482b858ab9252aed2e28a7396b.png 通俗的讲,JMX是一个服务器,它能让客户端远程访问该服务器上运行的java程序的api,并且可以对该程序通过相应的函数进行增删改查。 一般运维人员常部署zabbix、cacti和nagios对tomcat、weblogic等服务器进行监控,通常通过JMX访问Tomcat、weblogic的方式实现的,通过JVM的queryMBeans方法查询获取具体的Mbean(Thread、JVM、JDBC),根据bean的属性值判断运行状态。

白盒审计

CVE-2019-0192

fb89ce1a7dad4c0a741a5455aeb85d6b.png 如果服务端出现如下代码,且serviceURI参数可控。 837289de45bae81197f678d035facc23.png 通过JRMPClient实现反序列化RCE实现攻击
假设服务中有ROME这条gadget e1a0726aa01d813c35d065fd0e02baaa.png

黑盒测试

怎么构建jmx服务测试代码参考: https://github.com/SiJiDo/JMX- ,一般jmx认证方式有三种:1、无认证方式,2、用户名密码认证,3、ssl认证。其中2、3可以同时配合认证。具体配置方式参考: https://db.apache.org/derby/docs/10.10/adminguide/radminjmxenablepwdssl.html 。本文只谈1、2两种认证方式的攻击方式。

第一种方式

运维人员如果配置的无需认证开启jmx服务,攻击那就比较容易了。首先通过jconsole连接jmx服务,看配置是否成功。上面代码默认注册sayhello的MBean方法,下图已经调用成功。 c335d18360a6d1d001b8c6b5237546bb.png 当无需认证时,攻击者jmx客户端可以远程注册一个恶意的 MBean,k1n9师傅已经给出来了 https://github.com/k1n9/k1n9.github.io/blob/aeeb609fe6a25d67bc2dc5f990a501368fb25409/_posts/2017-08-24-attack-jmx-rmi.md 。原理就是通过 javax.management.loading.MLetgetMBeansFromURL  方法来加载一个远端恶意的MBean。
实现效果如下: e399b76c139683c60fce08c174039fe8.png jconsole控制台中已经安装恶意的Mean 1e81d0145ae37a8e8da0163cb9c3f531.png

第二种方式

已经有人写好了可自动化的安装、卸载MBean的工具: mjet 需要安装jython,服务器端代码还是如下:

132b73ce650cc9d4f7f7a83916154556.png

0db3c184038fbd489a07d5167c49f1d1.png 安装好,通过jconsole链接,MogwaiLabs新安装的MBean f1fca54e1be003934ed0e7e85417204f.png 密码修改为newpass f75724708adb243fc13fa323b7ddb791.png 命令行中也可以调用 c0e148d7f549b1b6401d6e6f1a2932da.png db00e8e7b83e3358507ba606fedf548e.png 更改密码 242dfae919635dd88cc81b283098805f.png 卸载MBean 59ddd8525756baecb387423e389b7e3a.png 在metasploit也已经实现了此功能,有兴趣的可以试试: https://github.com/mogwaisec/mjet

第三种方式

上面两种方式原理一样,然而,如果开启认证,上面俩种攻击方式是不能打的。 https://github.com/openjdk-mirror/jdk7u-jdk/blob/f4d80957e89a19a29bb9f9807d2a28351ed7f7df/src/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java#L619 ,如下代码开启认证是不能调用 jmx.remote.x.mlet.allow.getMBeansFromURL 方法 92d009b5bb650f00854944acd828352f.png 之前看ysoserial工具,在5月份的时候,添加了一个新的模块。 https://github.com/frohoff/ysoserial/commit/55f1e7c35cabb454385fca14be03b80129cfa62e ,就可以打认证后的MBean服务。 实现原理就是调用一个MBean方法,该方法接受String(或任何其他类)作为参数。将String类型的参数替换为gadget,ysoserial工具实现的就是将默认Mbean中的java.util.logging:type=Logging中的getLoggerLevel参数进行替换,当然服务器上必须存在有gadget的jar包,我这里测试的用的是jdk7u21。 48f52eea4779b894cb538eb0d30a8f79.png 调试如下: a3f2c425562c9e91600879c978574c8e.png 实现效果 f4587925d60011e9a0154027f358f7cc.png 另外mjet工具也实现了这个功能。

第四种攻击方式

攻击基于RMI的JMX服务。rmi协议数据传输都是基于序列化的,还记得cve-2016-8735漏洞中,就是因为使用了JmxRemoteLifecycleListener的方法,就有了如下思路。 即使开启了认证也打,利用yso中的RMIRegistryExploit,但是服务器得有gadget。 794342525470d5a3a8b2a36147c93487.png  

总结

以上总结了jmx攻击利用方式,想到ysoserial新增加的模块,通过该参数实现攻击,自然联想到了bypass JEP 290的那个方法,预告一下,下篇文章写一下通过rasp bypass JEP290的内容,文章写的难免有些疏漏,还请各位师傅斧正。 参考链接: https://github.com/artsploit/solr-injection#2-cve-2019-0192-deserialization-of-untrusted-data-via-jmxserviceurl https://mogwailabs.de/blog/2019/04/attacking-rmi-based-jmx-services/

78854d1c2a3a065e8d321ea8fdd6885e.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值