Java反序列化漏洞原理

序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。

Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。

下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:

public static void main(String args[]) throws Exception { 
     String obj = "hello world!";

// 将序列化对象写入

public static void main(String args[]) throws Exception { String obj = "hello world!";// 将序列化对象写入文件object.db中FileOutputStream fos = new FileOutputStream("object.db");ObjectOutputStream os = new ObjectOutputStream(fos);os.writeObject(obj);os.close();// 从文件object.db中读取数据FileInputStream fis = new FileInputStream("object.db");ObjectInputStream ois = new ObjectInputStream(fis);// 通过反序列化恢复对象objString obj2 = (String)ois.readObject();ois.close();}

问题代码分析:   

如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。

反序列化问题由来已久,且并非Java语言特有,在其他语言例如PHP和Python中也有相似的问题。@gebl和@frohoff的报告中所指出的并不是反序列化这个问题,而是一些公用库,例如Apache Commons Collections中实现的一些类可以被反序列化用来实现任意代码执行。WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些应用的反序列化漏洞能够得以利用,就是依靠了Apache Commons Collections。

测试方法:

1、人工审计源代码。

2、利用大佬共享的测试工具,进行测试。

修复建议

1、将服务器安装的JDK升级到官方最新版本,可以防范目前以往所有公布的Java反序列化漏洞。

2、对于weblogic中间件反序列化漏洞,需要及时打上最新的补丁,或者配置防火墙策略,屏蔽掉T3协议的访问,只开放对HTTP、HTTPS访问。

3、对于Jboss、tomcat等中间件的反序列化漏洞,可以将存在反序列化漏洞的jar包升级到最新版本,但特殊情况下,需要升级的jar包种类比较多,此修复建议很费时。

4、检测防火墙配置,是否开启对Java反序列化漏洞的防范策略。

JAVA反序列漏洞原理及利用工具相关推荐

  1. XSS漏洞原理和利用

    XSS漏洞原理和利用 XSS漏洞的危害 1.窃取用户Cookie,如果用户Cookie被窃取,攻击者可以不通过密码,而直接登录用户账户 2.使用XMLHttpRequest构造模拟用户请求操作 3.X ...

  2. JAVA反序列化漏洞原理分析

    反序列化漏洞原理分析 从序列化和反序列化说起 什么是序列化和反序列化? 简单来讲,序列化就是把对象转换为字节序列(即可以存储或传输的形式)的过程,而反序列化则是他的逆操作,即把一个字节序列还原为对象的 ...

  3. 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)

    摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...

  4. 永恒之蓝漏洞原理及利用

    本文转自行云博客https://www.xy586.top/ 文章目录 摘要 前提需要 原理 漏洞利用 摘要 什么是永恒之蓝 永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利 ...

  5. Java高危漏洞被再度利用 可攻击最新版本服务器

    2019独角兽企业重金招聘Python工程师标准>>> 安全研究人员警告称,甲骨文在2013年发布的一个关键 Java 漏洞更新是无效的,黑客可以轻松绕过.这使得此Java高危漏洞可 ...

  6. 浅谈SQL注入漏洞原理及利用方式

    1.SQL注入 原理: 在数据交互中,前端的数据传入到后台处理时,由于后端没有做严格的判断,导致其传入的恶意"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行.漏洞产生于脚 ...

  7. java asm jndi_JNDI-Injection-Exploit JNDI注入利用工具

    介绍 JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可用于Fastjson.Jackson等相关 使用 可执行程序为jar包,在命令行中运行以下命令: $ java -jar JNDI-I ...

  8. fastjson反序列化漏洞原理及利用

    重要漏洞利用poc及版本 我是从github上的参考中直接copy的exp,这个类就是要注入的类 import java.lang.Runtime; import java.lang.Process; ...

  9. 文件上传漏洞原理和利用

    文件上传 1.前段选择文件,提交文件 2.浏览器形成POST MultiPart报文发送到服务器 3.服务器中间件接收到报文,解析后交给后端代码进行处理 4.后端代码将上传的文件内容写入到临时文件中( ...

最新文章

  1. 服!AI 让兵马俑“活”起来,颜值惊艳!
  2. 网页怎么在图片上添加文字_想给图片添加文字,留白,添加小印章?用手机三步搞定...
  3. gRPC异步处理应答
  4. hdu3313 最大流找关键点,或者最短路找关键点.
  5. SpringBoot项目中,如何更规范的使用PageHelper分页?
  6. 矢量切片_数据粒度均衡的二维矢量瓦片构建方法
  7. xml验证 java代码,使用Java代码进行XML验证
  8. PHP 拓展 开发,开发php扩展
  9. 性能优化之MySQL调优篇
  10. 170329、用 Maven 部署 war 包到远程 Tomcat 服务器
  11. sql语句和java的关系_java中Statement 与 PreparedStatement接口之间的关系和区别
  12. STM8学习笔记---按键KEY
  13. 华为s8600手机驱动_华为自研驱动IC已流片,最快今年量产
  14. xcode 5中调试技巧
  15. LEWITT莱维特STREAM4x5、DGT260声卡安装调试教程
  16. 小学生信息奥赛学c语言,适合小学生的信息学奥赛(NOIP)课程来袭!
  17. 利用npm bin创建可执行命令实现项目代码规范自动化
  18. 白岩松人生哲学-听后感
  19. vue生成证书模板 并支持图片和PDF格式下载的小demo
  20. mac系统可以进行软件测试吗,iPhone和Mac如何加入Apple Beta版软件测试计划

热门文章

  1. IT程序员必须知道的几个Git代码托管平台
  2. QT moveToThread解析
  3. 构造函数和析构函数顺序
  4. Go语言字符串高效拼接
  5. 07-Nginx 日志管理及自动切割
  6. 栈内存和堆内存的区别与原理
  7. 计算机仿真专业大学,虚拟现实应用技术专业大学排名 全国排行榜
  8. Oracle-記一下使用full join的坑
  9. java 字符串替换中文逗号
  10. 华为HCIE-Security考试心得