Java反序列化漏洞的挖掘、攻击与防御

一、Java反序列化漏洞的挖掘

1、黑盒流量分析:

在Java反序列化传送的包中,一般有两种传送方式,在TCP报文中,一般二进制流方式传输,在HTTP报文中,则大多以base64传输。因而在流量中有一些特征:

(1)TCP:必有aced0005,这个16进制流基本上也意味者java反序列化的开始;

(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果;

以上意味着存在Java反序列化,可尝试构造payload进行攻击。

2、黑盒java的RMI:

rmi是java的一种远程对象(类)调用的服务端,默认于1099端口,基予socket通信,该通信实现远程调用完全基于序列化以及反序列化。

3、白盒代码审计:

(1)观察实现了Serializable接口的类是否存在问题。

(2)观察重写了readObject方法的函数逻辑是否存在问题。

二、Java反序列化的攻击:

参见我的博客:

java反序列化漏洞的检测

三、Java反序列化漏洞的防御:

1、类的白名单校验机制:

实际上原理很简单,就是对所有传入的反序列化对象,在反序列化过程开始前,对类型名称做一个检查,不符合白名单的类不进行反序列化操作。很显然,这个白名单肯定是不存在Runtime的。

2、禁止JVM执行外部命令Runtime.exec

这个措施可以通过扩展 SecurityManager 可以实现。

 1 SecurityManager originalSecurityManager = System.getSecurityManager();
 2         if (originalSecurityManager == null) {
 3             // 创建自己的SecurityManager
 4             SecurityManager sm = new SecurityManager() {
 5                 private void check(Permission perm) {
 6                     // 禁止exec
 7                     if (perm instanceof java.io.FilePermission) {
 8                         String actions = perm.getActions();
 9                         if (actions != null && actions.contains("execute")) {
10                             throw new SecurityException("execute denied!");
11                         }
12                     }
13                     // 禁止设置新的SecurityManager,保护自己
14                     if (perm instanceof java.lang.RuntimePermission) {
15                         String name = perm.getName();
16                         if (name != null && name.contains("setSecurityManager")) {
17                             throw new SecurityException("System.setSecurityManager denied!");
18                         }
19                     }
20                 }
21
22                 @Override
23                 public void checkPermission(Permission perm) {
24                     check(perm);
25                 }
26
27                 @Override
28                 public void checkPermission(Permission perm, Object context) {
29                     check(perm);
30                 }
31             };
32
33             System.setSecurityManager(sm);
34         }

四、参考文献:

https://paper.seebug.org/312/

原文地址:https://www.cnblogs.com/KevinGeorge/p/8454552.html

时间: 2024-11-08 07:43:07

Java反序列化漏洞的挖掘、攻击与防御的相关文章

Java反序列化漏洞通用利用分析

2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSphere.JBoss.Jenkins.OpenNMS这些大名鼎鼎的Java应用,实现远程代码执行. 然而事实上,博客作者并不是漏洞发现者.博客中提到,早在2015年的1月28号,Gabriel Lawrence (@gebl)和Chris Frohoff (@frohoff)在AppSecCali上给出了

Java反序列化漏洞分析

相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 http://www.tuicool.com/articles/ZvMbIne http://www.freebuf.com/vuls/86566.html http://sec.chinabyte.com/435/13618435.shtml http://www.myhack58.com/Articl

weblogic打补丁修复JAVA反序列化漏洞      

之前一篇文章记录部署web代理修复漏洞通过部署web代理来修复JAVA反序列化漏洞,这篇通过打补丁来修复这个漏洞.详见(Doc ID 2075927.1) 系统环境如下所示: OS:Oracle Linux Server release 6.1 64bit Weblogic:10.3.6 具体操作如下步骤所示: 1.备份备份备份 2.一切操作安装补丁README来 2.1 更新PSU 2.2 打补丁 1.备份 做好备份工作,无论是否可以回退,保证有备份 2.上传PSU weblogic补丁上传,

java反序列化漏洞原理研习

零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞都有颇深的研究,借此机会,努力学习,作为狼群中的哈士奇希望成功的继续伪装下去,不被识破,哈哈哈哈!!! 参考文档:感谢所有参考文献的作者: 1.https://www.cnblogs.com/bencakes/p/6139477.html 2.https://www.cnblogs.com/ssoo

WEBLOGIC 11G (10.3.6) windows PSU 升级10.3.6.0.171017(Java 反序列化漏洞升级)

10.3.6版本的weblogic需要补丁到10.3.6.0.171017(2017年10月份的补丁,Java 反序列化漏洞升级),oracle官方建议至少打上2017年10月份补丁;10.3.6以下的版本需要升级至10.3.6 然后在补丁升级. 一.查看版本 1.用下面命令重配环境变量D:\Oracle\Middleware\wlserver_10.3\server\binsetWLSEnv.cmd 1.1.查看weblogic version D:\Oracle\Middleware\uti

JAVA反序列化漏洞解决办法

一.漏洞描述: 近期,反序列化任意代码执行漏洞持续发酵,越来越多的系统被爆出存在此漏洞.Apache Commons工具集广泛应用于JAVA技术平台,存在Apache Commons Components InvokerTransformer反序列化任意代码执行漏洞, WebLogic.IBM WebSphere.JBoss.Jenkins和OpenNMS等应用都大量调用了Commons工具集,通过远程代码执行可对上述应用发起远程攻击. 二.漏洞解决办法: 1 使用 SerialKiller 替

weblogic服务器部署web代理修复weblogic的JAVA反序列化漏洞

近日乌云发邮件提示公司的某系统存在漏洞,有关weblogic,详细信息参考http://drops.wooyun.org/papers/13244 修复方法http://drops.wooyun.org/web/13470 本次使用Apache作为代理进行处理,也就是在weblogic服务器安装web(Apache或者nginx)代理应用,使web代理监听原有weblogic监听的端口,并且将http请求转发给本机的weblogic进行处理.详细操作如下所示 OS:Oracle Linux 6.

JAVA 反序列化攻击

Java 对象分解成字节码过程叫做序列化,从字节码组装成 Java 对象的过程叫做反序列化,这两个过程分别对应于的 writeObject 和 readObject 方法.问题在于 readObject 在利用字节流组装 Java 对象时不会调用构造函数, 也就意味着没有任何类型的检查,用户可以复写 readObject() 方法执行任何希望执行的代码. 这可能会导致三方面问题: 1. 序列化对象修改了对象或者父类的某个未加保护的关键属性,导致未预料的结果. 例如:     class Clie

浅谈java反序列化工具ysoserial

前言 关于java反序列化漏洞的原理分析,基本都是在分析使用Apache Commons Collections这个库,造成的反序列化问题.然而,在下载老外的ysoserial工具并仔细看看后,我发现了许多值得学习的知识. 至少能学到如下内容: 不同反序列化payload玩法灵活运用了反射机制和动态代理机制构造POC java反序列化不仅是有Apache Commons Collections这样一种玩法.还有如下payload玩法: CommonsBeanutilsCollectionsLog