JAVA反序列化安全

本文探讨了Java反序列化漏洞的历史、特点和不同类型的序列化(如Binary、XML和JSON)。通过案例分析,解释了如何利用XMLDecoder在Restlet应用中执行服务器端代码,以及如何在反序列化中构建执行链。建议的安全措施包括对象白名单控制、数据加密传输、简化反序列化数据结构和在沙盒环境中操作。
摘要由CSDN通过智能技术生成

微信公众号:DebugPwn


新浪微博:

http://weibo.com/u/2275304001/home?wvr=5


漏洞简介:

反序列化漏洞有十年的历史,存在于不同的编程语言中,最为明显的当属Java、PHP、Python、Ruby。漏洞的本质就是反序列化机制打破了数据和对象的边界,导致攻击者注入的恶意序列化数据在反序列化过程中被还原成对象,控制了对象就可能在目标系统上面执行攻击代码。

反序列化漏洞特点:

1)、反序列化对象自身的构造函数或者readObject()函数体中有执行代码的能力。

2)、反序列化的对象readObject()中可以调用另外一个对象,另外一个对象有执行代码的能力。

3)、返序列化的对象readObject()中可以调用另外一个对象,另外一个对应在调用另外一个对象,第三个对象有执行代码的能力,以此类推。

而上面掉用过程就是一个执行链,也叫做Gadget,在构造Gadget一般要用到Java的反射机制。

序列化分类进行分析:

1、Binary序列化反序列化:Object--serialize--data--unerialize--Object

Commons Collections反序列化漏洞

TransformedMap类 public static Map decorate(Map map, Transformer keyTransformer, Transformer valueTransformer)方法可以生成Map对象,并且当Map对象进行get/set操作可执行任意代码。--炸弹

Transformer类有执行代码的构造方法
Transformer[] transforms = new Transformer[] {
 
new ConstantTransformer(Runtime.class),
new InvokerTransformer(
"getMethod",
new Class[] {String.class, Class[].class},
new Object[] { "getRuntime", new Class[0]}
),
new InvokerTransformer(
"invoke",
new Class[] {Object.class, Object[].class},
new Object[] { null, new Object[0]}
),
new InvokerTransformer(
"exec",
new Class[] {String[].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值