java反序列漏洞的一点点思考

基础知识点:

 序列化是指把 Java 对象转换为字节序列的过程。Java 反序列化是指把字节序列恢复为 Java 对象的过程;注意这里的反序列化漏洞不仅仅指的是如借助Apache Commons Collections依赖触发的漏洞,还包括json类型转对象,XML类型转对象,YAML类型转对象,SOAP等等

0x01 反序列化漏洞的几种分类:

1 常见类型:Apache Commons Collections  触发方式:构造一个重写了readobject的类,调用TemplatesImpl.getOutputProperties(),Templates中存储了恶意的执行命令的代码,具体实现原理可以读ysoserial的代码进行理解

2 json类型:fastjson,jackson的反序列化漏洞,大部分依赖于JNDI注入,相关原理文章:

   https://www.03sec.com/3240.shtml   https://www.cnblogs.com/sijidou/p/13121332.html

3 yaml以及XML类型: yaml RCE   XMLDecoder RCE 文章:http://www.b1ue.cn/archives/239.html

   xstream  https://www.anquanke.com/post/id/239865#h2-0

……

0x02 反序列化漏洞的回显技术 

常用的回显技术:

        1 写文件 ,执行完命令后读取文件内容

        2 远程加载jar

        3 RMI实例绑定

        4 某些特定的类抛出异常 

        5  基于研究中间件或者框架的请求响应原理,进行动态获取当前请求的参数且将执行命令的结果写入响应

重点说一下基于研究中间件或者框架的请求响应原理:

     POC构造原理 通过动态+静态分析调试,获取存储在公共变量中的Request与Response对象,从请求中拿出参数传递拼接在执行命令的地方,将结果写入Response

0x03 部分反序列化回显实验记录  

    搭建一个spring mvc的环境,写一个继承了Serializable的类,重写readObject方法,(在实际情况中,重写readObject方法往往是JDK自带的类或者第三方库的,然后通过巧妙的构造触发携带有恶意代码的类,并进行了初始化,达到了执行命令的效果)

代码截图:

第一部分:构造恶意的demo类,重写的readobject中,携带了回显的代码(这个回显基于springMVC,经测试搭配shiro框架也可用)

接上图:

第二部分:web部分构造,接受参数,并进行反序列化

第三部分:编码demo类

验证阶段:

运行setPayload,生成shellcode

rO0ABXNyABdjb20uZGF5Mi5zcHJpbmdtdmMuZGVtb4W2kZallOQKAgACSQADYWdlTAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwAAAAGnQABWFkbWlu

启动springmvc web服务,构造数据包

注意,这里只是模拟一下大概的流程,实际上漏洞触发环境比这个复杂多了,真实的环境上需要借助第三方依赖触发,如CommonsCollections系列,并且真实环境构造readobject方法中并没有直接携带执行命令后者执行任意代码的部分,真实的环境往往通过特定的类的readobject方法触发Templates中包裹的恶意代码,达到恶意代码执行的效果,还需要特定的JDK版本;此外,fastjson部分反序列化漏洞触发为JNDI注入(lookup方法,加载恶意的class),这里需要区别一下RMI反序列化漏洞原理(也是lookup方法),RMI反序列化漏洞往往结合CommonsCollections依赖,分为客户端,服务端,注册中心的反序列化漏洞,其触发原理也是构造重写readObject的类

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值