zoukankan      html  css  js  c++  java
  • Java安全之JBoss反序列化漏洞分析

    Java安全之JBoss反序列化漏洞分析

    0x00 前言

    看到网上的Jboss分析文章较少,从而激发起了兴趣。前段时间一直沉迷于工具开发这块,所以打算将jboss系列反序列化漏洞进行分析并打造成GUI的工具集。当然反序列化回显这块也是需要解决的一大问题之一,所以下面会出一系列文章对该漏洞的分析到工具的构造进行一个记录。

    0x01 环境搭建

    首先拿CVE-2017-12149漏洞为例,进行调试分析。

    CVE-2017-12149漏洞影响版本: 5.X 及 6.X

    漏洞描述

    该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

    调试环境搭建

    远程调试

    版本要求:JBoss-EAP-7.0及其以上版本

    在Jboss的bin目录下有个standalone.bat文件,以文本的形式打开此文件,在Jboss的bin目录下有个standalone.bat文件。

    set DEBUG_MODE=false 
    set DEBUG_PORT_VAR=8787
    

    false改成true就可以改成调试模式了,8787是调试模式的端口。重启Jboss

    而5.x、6.x:

    jboss-6.1.0.Final/bin/run.conf 中#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"#即可。

    为了方便这里使用

    进去/vulhub-master/jboss/CVE-2017-12149修改docker-compose.yml 文件添加8787端口

    version: '2'
    services:
      jboss:
        image: vulhub/jboss:as-6.1.0
        ports:
          - "9990:9990"
          - "8080:8080" 
          - "8787:8787"
    

    jboss-6.1.0.Final/bin/run.conf 中#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"#

    重新启动容器即可

    docker restart 808d3fffae0c
    

    此处有坑点,个别漏洞调用链查看不了可能是确实代码,需要添加资源到idea中,而本次的这个核心漏洞组件httpha-invoker.sar,打包成jar包后无法进行断点,需要扔到jd-gui中进行反编译打包后添加到idea资源中。

    0x02 漏洞分析

    查看调用链定位漏洞位置

    直接就接受值进行反序列化了,但并不是在一个位置存在任意数据反序列化

    以上是org.jboss.invocation.http.servlet#ReadOnlyAccessFilter类的反序列化位置

    org.jboss.invocation.http.servlet#InvokerServlet同样存在任意反序列化点

    查看web.xml发现/invoker/JMXInvokerServlet/*,/invoker/readonly,/JMXInvokerServlet/等地方都可触发。

    关于CVE-2017-7504类似漏洞位置在/jbossmq-httpil/HTTPServerILServlet ,在此不做分析。

    0x03 结尾

    文章略显水分,因为JBoss这些漏洞接受过来就直接进行反序列化了,而且还是接受原生的数据并未进行加密解密处理。分析起来比较简单,但是反序列化回显的构造又成了一大问题,下篇文章再对反序列化回显进行探究。

  • 相关阅读:
    老司机心得之时间管理"入坑"
    shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)
    shell的date命令:使用方法,以及小时、分钟的计算
    一篇详细的linux中shell语言的字符串处理
    linux的string操作(字符串截取,长度计算)
    linux下数学运算器:expr命令(shell中完成数学运算)
    shell脚本格式的几点注意:格式严格,空格不能随便出现(一写就记不住)
    vim的颜色修改,高亮设置。
    pyhton exit
    python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的
  • 原文地址:https://www.cnblogs.com/nice0e3/p/14659603.html
Copyright © 2011-2022 走看看