精华内容
下载资源
问答
  • weblogic禁用IIOP协议 weblogicCVE-2020-2551漏洞修复 ================================ ©Copyright 蕃薯耀2021-01-27 https://www.cnblogs.com/fanshuyao/ 一、IIOP协议漏洞 攻击者能够利用Weblogic IIOP协议远程...

    weblogic禁用IIOP协议

    weblogic CVE-2020-2551漏洞修复

    ================================

    ©Copyright 蕃薯耀 2021-01-27

    https://www.cnblogs.com/fanshuyao/

    一、IIOP协议漏洞

    攻击者能够利用Weblogic IIOP协议远程访问Weblogic Server服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下造成任意代码执行,危害面/影响面大

    二、Weblogic IIOP协议位置

    【环境】>>【服务器】>>点击【AdminServer(管理)】>>【协议】>>【IIOP】>>【启用IIOP】

    三、重启Weblogic

    必须重启Weblogic才能生效。

    ================================

    ©Copyright 蕃薯耀 2021-01-27

    https://www.cnblogs.com/fanshuyao/

    展开全文
  • 背景通常在渗透的过程中会遇到很多 Weblogic 服务器,但通过 IIOP 协议进行发送序列化恶意代码包时,会面临着无法建立通讯请求发送恶意序列化失败。最近参与了一场在成都举办的《FreeTalk 2020 成都站》,有幸分享了...

    背景

    通常在渗透的过程中会遇到很多 Weblogic 服务器,但通过 IIOP 协议进行发送序列化恶意代码包时,会面临着无法建立通讯请求发送恶意序列化失败。最近参与了一场在成都举办的《FreeTalk 2020 成都站》,有幸分享了关于 Weblogic IIOP 协议 NAT 绕过的几种方式。

    PPT 下载地址:https://img.zhiiyun.com/Weblogic_IIOP_NAT.pptx

    成果演示

    Goby  工具中关于 Weblogic 基本都是用了 IIOP 协议绕过的方案,比较有代表性的漏洞为 CVE-2020-2551 漏洞。

    2ecad94e88dcee5191a94db3e91e5520.gif

    内部工具 weblogic-framework 使用了多项核心技术来进行优雅的测试 Weblogic,其中也使用了 IIOP 协议的绕过方案。

    ddb4dd61c0cb7bd233b83b5abfac3119.gif

    协议

    在开始之前,非常有比较提及一下以下这些协议相关的内容:

    • RMI:远程方法调用,本质上是 RPC 服务的 JAVA 实现,底层实现是 JRMP 协议,主要场景是分布式系统。

    • CORBA:跨语言(C ++、Java等)的通信体系结构,通常在 IIOP 协议中使用。

    • GIOP:主要提供标准的传输语法以及 ORB 通信的信息格式标准。

    • IIOP:CORBA 对象之间交流的协议,GIOP 的实现。

    • RMI-IIOP:解决 RMI 和 CORBA/IIOP 无法同时使用的技术方案。

    • Weblogic IIOP:Weblogic 自实现的 RMI-IIOP。

    • T3:WebLogic Server 中的 RMI 通信使用 T3 协议传输 WebLogic Server 和其他 Java 程序,包括客户端及其他 WebLogic Server 实例之间 数据。

    T3 协议本质上 RMI 中传输数据使用的协议,但通过上面我们看到 RMI-IIOP 是可以兼容 RMI 和 IIOP 的,所以在 Weblogic 中只要可以通过 T3 序列化恶意代码的都可以通过 IIOP 协议进行序列化,正是因为这种情况,我进入 Weblogic 第三季度深度贡献者名单。

    a7e4b4441aa61199b46898de0f252e10.png

    流程

    IIOP 序列化攻击流程

    82eb37b7633e0e6900c2744320445218.png

    一般 IIOP 序列化攻击的大致流程主要为首先构建恶意序列化代码,然后初始化上下文实例,最后通过 bind/rebind 进行发送恶意序列化代码,下图为关键代码。

    ec72e6e8b4f6766be2cdf496ea86a416.png

    IIOP 初始化上下文流程

    初始化上下文通过攻击流程中的 new InitialContext(env) 进行构建,最终的入口点通过 getInitialContext 方法进行构建,最终是进行流入到 InitialContextFactoryImpl.getInitialContext 进行初始化上下文。

    69b147a86e93262489d69f8d8ff5605c.png

    在流入 InitialContextFactoryImpl.getInitialContext 之后会通过 obj = ORBHelper.getORBHelper().getORBReference 来进行获取 NameService,然后将获取到的 NameService 进行实例化创建上下文实例,提供后续的执行操作。

    19900bbc821910dd47d0a01c24f30a3c.png

    rebind 流程

    执行 rebind 流程中,首先会通过 this.getContext 方法进行获取前面所讲的上下对象,然后通过 rebind_any 进行发发送序列化代码,当前在此之前已经通过经过序列化的了。

    48c8f5cfdd096b27faf89918cc2c02e7.png

    rebind_any 中,首先会通过 this._request 进行发送 rebind_any 建立 Socket 通讯,最后通过 this._invoke 方法进行执行最终的操作发送序列化代码。

    ec66c66d1ea3d2c5df01ffc2d3ac6527.png

    大致流程

    所以最终大致的执行流程是如下图,获取 NameService,基于获取的信息进行创建上下文实例(获取实际连接信息),然后进行发起 request 请求,最后进行执行 rebind_any 操作。

    3cb23f21104797820170bd149642427c.png

    环境准备

    • Weblogic:12.1.3.0
    • 协议:IIOP
    • 漏洞编号:CVE-2020-2555
    • 内网(Windows):http://10.10.10.173:7001
    • NAT 网络( vulfocus ) :http://118.193.36.37:32769/  内部 IP:172.17.0.5

    NAT 网络构建通过 http://vulfocus.fofa.so/ 进行搭建构造。

    81ddd7729391682c0e6e46da0e42b2d8.png

    成因

    在后续的调试以及研究中我们所使用的版本为 12.1.3.0 版本,漏洞为 CVE-2020-2555 漏洞,以下为漏洞 POC,以及漏洞执行链,在这里不多讲该漏洞,有兴趣的可以移步漫谈 Weblogic CVE-2020-2555。

    30e885ae3b622c36240d3367d69ec850.png

    执行链:

    ObjectInputStream.readObject()
    BadAttributeValueExpException.readObject()
    LimitFilter.toString()
    ChainedExtractor.extract()
    ReflectionExtractor.extract()
    Method.invoke()
    Class.getMethod()
    ReflectionExtractor.extract()
    Method.invoke()
    Runtime.getRuntime()
    ReflectionExtractor.extract()
    Method.invoke()
    Runtime.exec()

    当我们可以与 Weblogic 所处同一网段并且可达的时,可以看到是成功执行系统命令弹出计算器。

    a0fa41a157bfbc0e7b57e6f3c287efd8.gif

    通过 Wireshark 进行抓包可以,可以看到一共通讯了 2 次,第一次发送 LocateRequest 类型的 LocateRequest 的通讯操作获取 NameService,第二次发送 Request 类型的 rebind_any 操作进行发送序列化代码。

    23b0de528e860c73a70ed28a3e09c98a.png

    而进行测试公网中的靶机时抛出 Operation time out 异常,具体信息如下图。

    4c7e79e3b88799b592228a912c9b1c18.png

    而在 Wireshark 中可以看到,与第一次获取NameService中的内网 IP、端口进行了 Socket 通信。

    5c73eafda02a177953c9e1c7fc506b5d.png

    而在执行的流程中停留在了 createEndPoint 方法中,所以通信问题大概率是在此方法中引发的。

    59089f166a7e4254fb1542e449a5188c.png

    createEndPoint 方法中,最后通过 MuxableSocketIIOP.createConnection 方法进行建立 Socket 通信,此时的通信变为了 Weblogic 运行的内网 IP 和端口。

    27b21cfee6766dea3d6a30787b43fba0.png

    所以大体的情况为如下图,问题出现在发起 request 时调用的 createEndPoint 方法中,由于 createEndPoint 无法正常建立 Socket 通信导致后续的操作无法正常秩序。

    2c9a88f104f55320d1f75a80d88a2ce4.png

    其实,我们也可以在 Weblogic 启动日志中也可以看到 Weblogic 关于端口和协议分配的情况,基本分配都是内网网卡的IP和端口同时会进行监听 0.0.0.0:7001 来处理协议的请求操作,那么现在问题来了,公网中的 Weblogic 服务器 99% 分配的都是内网 IP 和端口。

    IIOP NAT 绕过方案

    由于问题发生在响应的 Weblogic 在获取 NameService 时,响应的 IP和端口为内网中的端口,导致在后续 createEndPoint 建立 Socket 通信,所以我们可以进行在建立 Socket 通信之前修改为正确的 IP和端口(公网中的IP和端口)。

    0d992891e6164e608092ae64cdd3f9ad.png

    GIOP 协议极简实现

    当我们与服务器所处同一网段时,可以看到一共通讯了 2 次,第一次发送 LocateRequest 类型的 LocateRequest 的通讯操作获取 NameService,第二次发送 Request 类型的 rebind_any 操作进行发送序列化代码。

    94a48fcc2b9a98117cad74d8b55e186f.png

    所以我们根据 Wireshark 中的信息,可以进行构建极简的 GIOP 实现,大体如下:

    1. 请求 LocateRequest,获取 NameService 以及获取 key
    2. 请求 Request,执行 rebind_any 操作,发送序列化代码

    GIOP 协议

    GIOP 协议大致由 Header 和 Message Type 进行构成,在 Header 包含了 Magic、Version、Message Type、Message Size。

    b6ce879649def178d7b8f6d88ff2f8a6.png

    Message Type 的类型如下:

    消息类型发方
    RequestClient
    RequestServer
    CancelRequestClient
    LocateRequestClient
    LocateReplyServer
    CloseConnectionServer
    MessageErrorBoth
    FragmentBoth

    实现

    50e5d48583d084f3c6c122ef6d9d6c6d.png

    获取 NameService 请求代码实现:

    571a04310cf90fd0dfa4afc1cf93ffe2.png

    执行 rebind_any 操作代码实现:

    be207ab4c1a18ca1d8385511f06aca5b.png

    最终效果:

    9813fccb66e7e5f343a39b57aa37994f.gif

    Javassist 字节码库

    Javassist (JAVA programming ASSISTant) 是在 Java 中编辑字节码的类库,它使 Java 程序能够在运行时定义一个新类,并在 JVM 加载时修改类文件。

    • Javassist.CtClass 是类文件的抽象表示形式
    • Javassist.CtMethod 是类方法的抽象表示形式

    读取类

    ClassPool pool = ClassPool.getDefault(); 
    CtClass cc = pool.get("test.Rectangle");

    创建类

     ClassPool pool = ClassPool.getDefault(); 
    CtClass cc = pool.makeClass("Point");

    继承

    cc.setSuperclass(pool.get("test.Point"));

    写入

    cc.writeFile();
    cc.toClass();

    需要注意的是 toClass() 会把当前修改的 Class 加入到当前的 ClassLoader 中。

    创建方法

    ClassPool pool = ClassPool.getDefault(); 
    CtClass cc = pool.makeClass("Point");
    CtMethod ctMethod = new CtMethod(CtClass.voidType, "printName", new CtClass[]{}, cc);

    修改方法

    CtMethod ctMethod = ctClass.getDeclaredMethod("hello");
    ctMethod.setBody("System.out.println(\"set body\");");
    ctMethod.insertBefore("System.out.println(\"set before\");");
    ctMethod.insertAfter("System.out.println(\"set after\");");

    通过 Javassist 进行实现时,可以通过修改建立 Socket 通信之前的方法,将 ip、端口替换为正常的 IP 和端口,在这里选取的是 newSocket 方法,在第一个参数为 host,第二个参数为 port

    b7763ffc0ba6f01c8d5679aa5719433c.png

    最终修改的如下图:

    6f0c352eb16e9d62f3f888c19d24e10a.png

    实现

    在实现的过程中,仅需要在执行到 newSocket 方法时,将连接到 IP 和端口设置为正确的 IP 和 端口,核心代码如下图:

    ddde92b66b05448d99a81e81937ef5e8.png

    最终效果:

    998e5eb68d49e997489a2014c604237d.gif

    源代码修改

    b86404fde2897004900959545e209e0c.png

    在执行的流程中最终执行到了 createEndPoint 方法中,从执行流程来看主要如下图所示。

    faa13a099bc661fdb9f2a3171ef585d4.png

    在执行 rebind 方法发送序列化代码时,可以看到在此时已经变成了 Weblogic 内网中运行的 IP 和 端口,直到程序执行到 createEndPoint 抛出异常。

    00aeafa7872ebd4fcb848985928618fb.png

    而执行到 getInvocationIOR 方法时,会调用 IIOPRemoteRef.locateIORForRequest 方法来进行寻找 IOR,并且将寻找到的 IOR 设置为当作当前 IOR 进行返回提供使用。

    2a114d6cc54368cf1080ca4190d8d5a6.png

    在进入 locateIORForRequest 方法之后会通过 EndPointManager.findOrCreateEndPoint 来进行寻找或创建结束切点,可以看到此时 IORhostport 变成了内网中的 IP 和端口。

    3d29ca5e420c4c8cd5c5c67c1583f0e8.png

    在进入 EndPointManager.findOrCreateEndPoint 最终会执行到 createEndPoint 方法中来进行建立 Socket 通信,在这里由于是内网的 IP 和端口无法成功建立通信,导致后续的利用也无法继续进行。

    b3ead4788afcc5c75e0924b50a59be43.png

    实现

    大致的问题点已经确认的清楚的情况下,我们可以通过修改原始代码的方式来进行实现绕过,大体思路为:

    1. 修改 weblogic.corba.j2ee.naming.ContextImpl 类中的 rebind 方法
    2. 修改 weblogic.iiop.IIOPRemoteRef 类中 locateIORForRequest 方法的 ior 参数,确保正常调用 findOrCreateEndPoint  创建结束切点

    首先修改 weblogic.corba.j2ee.naming.ContextImpl 类中 rebind 方法将正确的连接 IP 和端口加入到系统环境变量中。

    1c82aead35cad71c83c383d77169224a.png

    最后在 locateIORForRequest 方法读取系统环境变量中正确的 IP 和端口并且修改 ior 变量中相关的连接信息。使之能够正常的执行 findOrCreatePoint 方法创建结束切点

    eddbd34399aff613c42e01e583a66010.png

    最终效果:

    da2a89c78b661dc9fe07c8cd64c23ecb.gif

    IIOP NAT 绕过方案总结

    • GIOP 协议极简实现
      • 优点:原始 Socket 发包,效率较快
      • 缺点:构造难度较高,需要掌握协议相关知识
    • Javassist
      • 优点:修改难度较低
      • 缺点:程序使用完毕之后需要重启,如果使用动态加载等方案可能导致资源占用率过高
    • 源代码修改
      • 优点:原生代码兼容性较强
      • 缺点:修改难度较大

    参考

    • https://blog.csdn.net/weixin_33913377/article/details/94134763
    • https://docs.oracle.com/cd/E13211_01/wle/wle42/corba/giop.pdf
    • https://www.slideserve.com/milek/13-giop-iiop-ior
    • https://www.cnblogs.com/scy251147/p/11100961.html
    展开全文
  • 本文要讲的就是与weblogic中间件近期不断被曝出的T3协议、IIOP协议0day漏洞有关。在护网期间,官方补丁又未更新的情况下,能做的可能就是通过及时的禁用相关的协议,以达到漏洞修复的目的,但是通常任务紧、时间短、...

    近期各地各行业护网运动开展如火如荼,各系统、中间件、数据库、开源软件层面漏洞层出不穷,另相关的维护专业这苦不堪言。本文要讲的就是与weblogic中间件近期不断被曝出的T3协议、IIOP协议0day漏洞有关。在护网期间,官方补丁又未更新的情况下,能做的可能就是通过及时的禁用相关的协议,以达到漏洞修复的目的,但是通常任务紧、时间短、实例数量又众多的情况下,我们如何快速的做到对实例进行批量的处理呢,且看下文介绍。

    [IIOP协议批量禁用]

    首先禁用IIOP协议,需要在应用侧确认反馈应用未使用该协议的前提下,才能进行禁用处理。

    单台或者少量实例,处理方法很简单,可以直接登陆控制台,警用IIOP协议即可,方法如下:

    Weblogicconsole  -> “服务”->”xxxServer”->”协议”,取消“启用IIOP”的勾选,重启服务即可。

    574b168d4ef1a160e778f2a9a4b60620.png

    但是成百上千个实例,一个个登陆console修改配置,显然不切实际,那我们就需要使用批量方案了。批量禁用可以使用weblogic自带的wlst工具,通过脚本进行批量禁用,该方法脚本逻辑简单清晰,分享如下。

    weblogic_iiop.sh:通过shell脚本去调用weblogicwlst,执行禁用的python脚本。

    #!/bin/bash

    . $HOME/.bash_profile

    WLS_HOME="/weblogic/Oracle/Middleware/wlserver"

    echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[BEGIN]========================="

    ${WLS_HOME}/common/bin/wlst.sh weblogic_iiop.py

    echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[END]==========================="

    weblogic_iiop.py:获取配置文件中的weblogic控制台账号、口令,循环去禁用每一个实例的IIOP协议。

    cfg = open("./conf.cfg", "rb")

    for line in cfg:

    auth = line.split('#')

    USERNAME = auth[0].strip()

    PASSWORD = auth[1].strip()

    ADMINURL = auth[2].strip()

    print('--------------' + ADMINURL + '-----------------------------------')

    size = len(auth)

    if size < 3 or USERNAME == "" or PASSWORD == "" or ADMINURL == "":

    continue

    connect(USERNAME,PASSWORD,ADMINURL)

    edit()

    cd('Servers')

    allSrvs=cmo.getServers()

    for srv in allSrvs:

    print('--------------startEdit--------------------------------')

    startEdit()

    srvName=srv.getName();

    print('Now begin modify server: ' + srvName)

    cd('/Servers/' + srvName)

    ## true-开启, false-关闭

    cmo.setIIOPEnabled(false)

    save()

    activate()

    disconnect()

    exit()

    conf.cfg:目标weblogic实例的控制台账号、密码

    weblogic#weblogic!123#t3://IP1:port

    weblogic#weblogic!123#t3://IP2:port

    …..

    如上,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决IIOP协议批量禁用的问题了,记得最后要重启服务才能生效哦。

    [T3协议批量禁用]

    首先禁用T3协议,原理上其实是通过在weblogicconsole中添加T3协议访问白名单的方式来控制T3协议访问,禁止白名单以外的IP或网段来访问服务,以达到屏蔽漏洞的作用。所以,在配置T3协议禁用之前,需要应用侧梳理出需要使用T3协议访问的IP或网段。单台或者少量实例,处理方法同样简单,可以直接登陆控制台配置即可,方法如下:

    Weblogicconsole  -> “domain”->”安全”->”筛选器”,在“连接筛选器规则”处,配置规则即可。

    e32a2b45e50a82db386293cd359690ba.png

    但是成百上千个实例,一个个登陆console修改配置,费时费力,同样的,我们也有批量作业的方法,分享如下:

    run.sh:通过shell脚本去调用weblogicwlst,同时读取weblogic控制台账号、口令,执行禁用的python脚本。

    JAVA_HOME=/weblogic/jdk1.7.0_141

    WLS_HOME=/weblogic/Oracle/Middleware/wlserver_10.3

    FILENAME=conf.cfg

    cat $FILENAME | while read LINE

    do

    echo "----$LINE------"

    IP=`echo ${LINE} |awk -F"#" '{print $1}'`

    PORT=`echo ${LINE} |awk -F"#" '{print $2}'`

    USERNAME=`echo ${LINE} |awk -F"#" '{print $3}'`

    PASSWORD=`echo ${LINE} |awk -F"#" '{print $4}'`

    DOMAIN_NAME=`echo ${LINE} |awk -F"#" '{print $5}'`

    echo $DOMAIN_NAME

    $WLS_HOME/common/bin/wlst.sh weblogic_filter.py $IP $PORT $USERNAME $PASSWORD $DOMAIN_NAME

    done

    conf.cfg:目标weblogic实例的控制台账号、密码、域名

    IP#port#weblogic#weblogic!123#testdomain

    IP#prot#weblogic#weblogic!123#testdomain…..

    weblogic_filter.py:对每一个weblogicdomain去配置T3协议白名单。

    # coding=utf-8

    # FileName: weblogic_filter.py

    # Description:

    import time,re,os,sys

    IP = sys.argv[1]

    print 'HOST_IP=',IP

    PORT = sys.argv[2]

    print 'PORT=',PORT

    USERNAME = sys.argv[3]

    print 'USERNAME=',USERNAME

    PASSWORD = sys.argv[4]

    print 'PASSWORD=',PASSWORD

    mydomain = sys.argv[5]

    mydomain = mydomain.rstrip()

    print 'DOMAIN_NAME=',mydomain

    URL='t3://'+IP+':'+PORT

    connect(USERNAME,PASSWORD,URL)

    edit()

    startEdit()

    cd('/SecurityConfiguration/' + mydomain)

    cmo.setConnectionFilter('weblogic.security.net.ConnectionFilterImpl')

    set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+'  * * allow t3 t3s'), String('IP3'+'  * * allow t3 t3s'), String(IP4+'  * * allow t3 t3s'), String('0.0.0.0/0 * * deny t3 t3s')], String))

    save()

    activate()

    如上,python脚本中,在set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+'  * * allow t3 t3s')],String))中添加需要配置的白名单配置规则即可。显然然,这里笔者这里是偷懒了,有兴趣的朋友,可以将规则也配置到配置文件中去,那么脚本即可通用了,只需要修改配置文件即可,使用起来会更灵活。最后,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决T3协议禁用的问题。

    [小结]

    以上提供的方法,需要注意的是相关的脚本中的一些JDK版本及路径、WLS_HOME路径是需要根据实际情况进行修改的。如果再结合相关自动化产品将对应的场景进行任务编排,通过产品去将调用批量作业脚本、服务重启等操作编排到一个任务里面去,实现自动化调度,白屏操作,这将是一个不错的运维场景。

    展开全文
  • 本文要讲的就是与weblogic中间件近期不断被曝出的T3协议、IIOP协议0day漏洞有关。在护网期间,官方补丁又未更新的情况下,能做的可能就是通过及时的禁用相关的协议,以达到漏洞修复的目的,但是通常任务紧、时间短、...

    近期各地各行业护网运动开展如火如荼,各系统、中间件、数据库、开源软件层面漏洞层出不穷,另相关的维护专业这苦不堪言。本文要讲的就是与weblogic中间件近期不断被曝出的T3协议、IIOP协议0day漏洞有关。在护网期间,官方补丁又未更新的情况下,能做的可能就是通过及时的禁用相关的协议,以达到漏洞修复的目的,但是通常任务紧、时间短、实例数量又众多的情况下,我们如何快速的做到对实例进行批量的处理呢,且看下文介绍。

    [IIOP协议批量禁用]

    首先禁用IIOP协议,需要在应用侧确认反馈应用未使用该协议的前提下,才能进行禁用处理。

    单台或者少量实例,处理方法很简单,可以直接登陆控制台,警用IIOP协议即可,方法如下:

    Weblogicconsole  -> “服务”->”xxxServer”->”协议”,取消“启用IIOP”的勾选,重启服务即可。

    b0cc65ff85bfe303ed3e486b8dc0194c.png

    但是成百上千个实例,一个个登陆console修改配置,显然不切实际,那我们就需要使用批量方案了。批量禁用可以使用weblogic自带的wlst工具,通过脚本进行批量禁用,该方法脚本逻辑简单清晰,分享如下。

    weblogic_iiop.sh:通过shell脚本去调用weblogicwlst,执行禁用的python脚本。

    #!/bin/bash

    . $HOME/.bash_profile

    WLS_HOME="/weblogic/Oracle/Middleware/wlserver"

    echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[BEGIN]========================="

    ${WLS_HOME}/common/bin/wlst.sh weblogic_iiop.py

    echo [`date '+%Y-%m-%d %H:%M:%S'`]" =====[END]==========================="

    weblogic_iiop.py:获取配置文件中的weblogic控制台账号、口令,循环去禁用每一个实例的IIOP协议。

    cfg = open("./conf.cfg", "rb")

    for line in cfg:

    auth = line.split('#')

    USERNAME = auth[0].strip()

    PASSWORD = auth[1].strip()

    ADMINURL = auth[2].strip()

    print('--------------' + ADMINURL + '-----------------------------------')

    size = len(auth)

    if size < 3 or USERNAME == "" or PASSWORD == "" or ADMINURL == "":

    continue

    connect(USERNAME,PASSWORD,ADMINURL)

    edit()

    cd('Servers')

    allSrvs=cmo.getServers()

    for srv in allSrvs:

    print('--------------startEdit--------------------------------')

    startEdit()

    srvName=srv.getName();

    print('Now begin modify server: ' + srvName)

    cd('/Servers/' + srvName)

    ## true-开启, false-关闭

    cmo.setIIOPEnabled(false)

    save()

    activate()

    disconnect()

    exit()

    conf.cfg:目标weblogic实例的控制台账号、密码

    weblogic#weblogic!123#t3://IP1:port

    weblogic#weblogic!123#t3://IP2:port

    …..

    如上,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决IIOP协议批量禁用的问题了,记得最后要重启服务才能生效哦。

    [T3协议批量禁用]

    首先禁用T3协议,原理上其实是通过在weblogicconsole中添加T3协议访问白名单的方式来控制T3协议访问,禁止白名单以外的IP或网段来访问服务,以达到屏蔽漏洞的作用。所以,在配置T3协议禁用之前,需要应用侧梳理出需要使用T3协议访问的IP或网段。单台或者少量实例,处理方法同样简单,可以直接登陆控制台配置即可,方法如下:

    Weblogicconsole  -> “domain”->”安全”->”筛选器”,在“连接筛选器规则”处,配置规则即可。

    8cdab0cd6a58acb7db3fef8e258e752c.png

    但是成百上千个实例,一个个登陆console修改配置,费时费力,同样的,我们也有批量作业的方法,分享如下:

    run.sh:通过shell脚本去调用weblogicwlst,同时读取weblogic控制台账号、口令,执行禁用的python脚本。

    JAVA_HOME=/weblogic/jdk1.7.0_141

    WLS_HOME=/weblogic/Oracle/Middleware/wlserver_10.3

    FILENAME=conf.cfg

    cat $FILENAME | while read LINE

    do

    echo "----$LINE------"

    IP=`echo ${LINE} |awk -F"#" '{print $1}'`

    PORT=`echo ${LINE} |awk -F"#" '{print $2}'`

    USERNAME=`echo ${LINE} |awk -F"#" '{print $3}'`

    PASSWORD=`echo ${LINE} |awk -F"#" '{print $4}'`

    DOMAIN_NAME=`echo ${LINE} |awk -F"#" '{print $5}'`

    echo $DOMAIN_NAME

    $WLS_HOME/common/bin/wlst.sh weblogic_filter.py $IP $PORT $USERNAME $PASSWORD $DOMAIN_NAME

    done

    conf.cfg:目标weblogic实例的控制台账号、密码、域名

    IP#port#weblogic#weblogic!123#testdomain

    IP#prot#weblogic#weblogic!123#testdomain…..

    weblogic_filter.py:对每一个weblogicdomain去配置T3协议白名单。

    # coding=utf-8

    # FileName: weblogic_filter.py

    # Description:

    import time,re,os,sys

    IP = sys.argv[1]

    print 'HOST_IP=',IP

    PORT = sys.argv[2]

    print 'PORT=',PORT

    USERNAME = sys.argv[3]

    print 'USERNAME=',USERNAME

    PASSWORD = sys.argv[4]

    print 'PASSWORD=',PASSWORD

    mydomain = sys.argv[5]

    mydomain = mydomain.rstrip()

    print 'DOMAIN_NAME=',mydomain

    URL='t3://'+IP+':'+PORT

    connect(USERNAME,PASSWORD,URL)

    edit()

    startEdit()

    cd('/SecurityConfiguration/' + mydomain)

    cmo.setConnectionFilter('weblogic.security.net.ConnectionFilterImpl')

    set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+'  * * allow t3 t3s'), String('IP3'+'  * * allow t3 t3s'), String(IP4+'  * * allow t3 t3s'), String('0.0.0.0/0 * * deny t3 t3s')], String))

    save()

    activate()

    如上,python脚本中,在set('ConnectionFilterRules',jarray.array([String('IP1'+' * * allow t3 t3s'), String('IP2'+'  * * allow t3 t3s')],String))中添加需要配置的白名单配置规则即可。显然然,这里笔者这里是偷懒了,有兴趣的朋友,可以将规则也配置到配置文件中去,那么脚本即可通用了,只需要修改配置文件即可,使用起来会更灵活。最后,只需将脚本部署到可以访问目标实例的服务器上,配置好conf.cfg配置文件,就可以很轻松的解决T3协议禁用的问题。

    [小结]

    以上提供的方法,需要注意的是相关的脚本中的一些JDK版本及路径、WLS_HOME路径是需要根据实际情况进行修改的。如果再结合相关自动化产品将对应的场景进行任务编排,通过产品去将调用批量作业脚本、服务重启等操作编排到一个任务里面去,实现自动化调度,白屏操作,这将是一个不错的运维场景。

    展开全文
  • 绿盟科技——【威胁通告】Weblogic WLS组件IIOP协议远程代码执行漏洞(CVE-2020-2551) 详细从操作方法如下: 点击左侧服务,然后在右侧点击服务器配置下的协议,选择IIOP,在锁定服务器配置后进行编辑。 ...
  • IIOP协议导致的反序列化。环境weblogic10.3.6+jdk1.6idea+jdk1.8+jdk1.6IIOPIIOP,Internet Inter-ORB Protocol(互联网内部对象请求代理协议),它是一个用于CORBA 2.0及兼容平台上的协议;用来在CORBA对象请求代理...
  • Weblogic基于IIOP协议反序列化漏洞详总
  • 2020年1月15日,Oracle发布了一系列的安全补丁,其中Oracle WebLogic Server产品有高危漏洞,漏洞编号CVE-2020-2551,CVSS评分9.8分,漏洞利用难度低,可基于IIOP协议执行远程代码。 经过分析这次漏洞主要原因是错误的...
  • 使用jmx监控weblogic启用iiop协议

    千次阅读 2012-04-06 14:42:09
    使用jmx监控weblogic服务器。建一个java工程,引入weblogic.jar到工程里面。 package com.tst.idc.weblogic; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; ...
  • Weblogic通过HTTP/T3/IIOP协议部署war包

    千次阅读 2020-04-24 23:52:26
    水文一篇,主要应对存在弱...几处登陆点(HTTP/T3/IIOP)共用账号锁定,只要加起来错误过五次,就会锁定半个小时。 最常见做法:HTTP console应用部署 最常见方法,此处略过。 可以参考:https://www.cnblogs.com/D...
  • 在Oracle官方发布的2020年1月关键补丁更新公告CPU(Critical Patch Update)中,公布了一个Weblogic WLS组件IIOP协议中的远程代码执行漏洞(CVE-2020-2551),此漏洞存在于WebLogic服务器的核心组件中,当WebLogic...
  • 第三方 jmx 客户端连接 weblogic 9.2 使用 iiop 协议 1.使用 iiop 协议weblogic 开启 iiop 控制台:域--&gt;环境--&gt;服务器--&gt;选择你配置的服务器--&gt;选择协议选项卡--&gt;选择...
  • 攻击者可以通过IIOP协议远程访问Weblogic Server服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下远程执行任意代码。 IIOP协议以Java接口的形式对远程对象进行访问,默认启用。 影响版本 ...
  • Weblogic IIOP反序列化漏洞影响的协议为IIOP协议,该漏洞是由于调用远程对象的实现存在缺陷,导致序列化对象可以任意构造,在使用之前未经安全检查,攻击者可以通过 IIOP 协议远程访问 Weblogic Server 服务器上的...
  • 近期Oracle发布2020年10月关键补丁更新。其中针对 WebLogic Server Core组件,且评分为9.8的严重...它们均和T3、IIOP 协议相关,允许未经身份验证的攻击者通过网络实现远程代码执行。T3、IIOP 协议用于在 WebLogi...
  • 0x00 前言 ...从Oracle 官方的CPU公告中可以看出该漏洞存在于weblogic核心组件,影响的协议IIOP。其实经过分析发现,该漏洞原理上类似于RMI反序列化漏洞(CVE-2017-3241),和之前的T3协议所引发的一系列.
  • 漏洞概述:今日,Oracle官方发布WebLogic安全更新,其中修复了一个CVSS评分为9.8的严重漏洞(CVE-2020-14645),该漏洞通过T3协议和IIOP协议进行利用,攻击者可以实现远程代码执行,进而控制服务器。由于漏洞利用...
  • Weblogic_alive-源码

    2021-03-31 16:49:26
    Weblogic_alive 逻辑: -s(扫描模块)进行weblogic-ip +端口页面重新扫描,目标ip或域名保存在ip-scan.txt,支持c段(格式192.... -i(IIOP模块)进行weblogic-iiop协议扫描,目标ip或域名保存在ip-iiop.txt,一行一
  • 该漏洞可以绕过Oracle官方在2019年10月份发布的安全补丁,攻击者可以通过IIOP协议远程访问Weblogic Server服务器上的远程接口,传入精心构造的数据,在目标服务器上执行任意代码。近期深信服千里目安全实验室成功...
  • WebLogic RMI 编程(四)

    2007-09-25 19:23:00
    使用 IIOP 上的 RMI 以下部分提供 IIOP 上的 RMI 的... WebLogic RMI-IIOP 概述 协议兼容性 什么是 IIOP 上的RMI? IIOP 上的 RMI 将 RMI 扩展为可在 IIOP 协议中工作。这样带来了两个可以利用的好处。在 Java 到 Jav
  • 0x00 基础概念学习这个漏洞需要一些前置知识,比如CORBA与RMI简单的概述一下:CORBA是OMG制定的一套技术标准,用于分布式应用,其中用到了IDL进行跨语言支持,客户端与服务端之间用IIOP协议进行通信RMI是另一种...
  • 简单的Jconsole连接到weblogic进程,只能连接Platform MBean server,看不到自定义MBean。 这时我们需要连接到 WebLogic MBean server,通过如下方式: 1. 创建wlfulclient.jar ...2. 启用IIOP协议(A...
  • WebLogic CVE-2020-2551漏洞

    2020-05-19 18:35:17
    主要是利用IIOP协议进行的攻击。从0开始学习复现这个洞不免又会设计到Java反序列化漏洞中那些老生常谈的名词理解,涉及到Java反序列化中的一些协议、行为、结构。 RMI、JRMP LDAP 主要充当目录服务的协议 ...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

iiop协议weblogic