寒假学web--day09
简介
一些魔法函数与php反序列化漏洞
tips
反序列化和类的方法无关,不能把类的方法序列化
将php.exe所在目录放到环境变量中,就可以在终端里通过php.exe ./命令来执行php代码
魔术方法
__construct()
在实例化一个对象时会自动调用,可以用来初始化非public属性的值
php的构造方法不能重载
序列化与反序列化时,不会自动调用构造方法
__sleep() __wakeup()
会在序列化和反序列化时自动执行
serialize函数会检查类中是否存在魔术方法__sleep(),如果存在,该方法会被先调用,然后再执行反序列化,此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组,如果该方法未返回任何内容,则NULL被序列化,比如
return ['username','password'];
如果被反序列化的变量是是一个对象,在成功重新构造对象之后,php会自动试图去调用wakeup()成员函数
__destruct()
销毁类的对象时自动执行
在程序最后一段写杀死相应的php进程的代码可以绕过析构方法,如果是在浏览器访问
system('taskkill /fi "imagename eq php-cgi.exe" /f');
__call() __callstatic()
对象执行类不存在的方法时,就会调用call方法
直接执行类不存在的静态方法时,会自动调用get方法
__get __set __isset __unset
对不可访问或不存在的属性访问或引用时,会自动调用__get方法
对不可访问或不存在的属性赋值时,会自动调用__set方法
将类不可访问的属性作为isset函数的参数时,会自动调用__isset
将类不可访问的属性作为unset函数的参数时,会自动调用__unset
__tostring()
类的实例和字符串进行拼接或作为字符串使用时,会自动调用__tostring()方法
__invoke()
将类的实例被作为函数名字执行的时候,会调用invoke方法
__set_state()
执行var_export()时自动调用
__debuginfo()
执行var_dump时自动调用
__clone()
当使用clone关键字,clone一个对象时会自动调用
反序列化漏洞的条件
有反序列化提交的入口
被反序列化的类的魔术方法有可能被利用
绕过__wakeup方法
条件:
php5至php 5. 6.25之间的版本可以绕过
php7至php7 .0.10之间的版本可以绕过
绕过方法
让反序列化字符串中表示属性数量的值大于大括号内实际属性的数量时,wakeup方法就不会被调用
应用
常见的时wakeup里面会给一个属性赋值,而destruct里面可以由我们给属性赋值,所以我们需要绕过wakeup方法,让我们自己给这个属性传恶意代码
本地建一个php文件,把题目给的类的代码复制过来,然后进行实例化,给可以控制的属性传一个后门,再对这个对象序列化并urlencode
绕过O:/d的限制
有时候对我们的参数有过滤,不让输入 O:数字 的形式,试图防止反序列化某个对象
我们只需要把O:数字改为O:+数字,就可以绕过
妙用&绕过相等
原理
使两个变量指向同一块内存地址
应用
比如题目把/flag的内容赋值给了secret,然后后面要求属性password的值等于secret
这个时候,我们依然按照上面说的方法写一个脚本,然后写一个构造函数
function __construct(){$this->password = &$this->secret;
}
这样就能保证无论secret怎么改变,password都与secret的值相等
16进制绕过
反序列化后的字符串不能出现某个单词时,可以使用大写S绕过
即把s换成S,因为S支持ascll码
比如禁止使用name,我们就可以用n\97me代替
O:8:"backdoor":1:{s:4:"name";s:10:"phpinfo();";}O:8:"backdoor":1:{S:4:"n\97me";s:10:"phpinfo();";}
php反序列化字符逃逸
- 可以控制某个类中的属性值
- 间接控制了某个类的反序列化字符串
- 由于存在无脑过滤,字符增减,造成 描述中字符串的长度 和实际的不一致
- 从而能够逃逸出若干个字符,实现字符可控,从而闭合前面的双引号
- 实现反序列化字符串的完全可控
相关文章:
寒假学web--day09
简介 一些魔法函数与php反序列化漏洞 tips 反序列化和类的方法无关,不能把类的方法序列化 将php.exe所在目录放到环境变量中,就可以在终端里通过php.exe ./命令来执行php代码 魔术方法 __construct() 在实例化一个对象时会自动调用,可…...
深度解析:基于Vue 3的教育管理系统架构设计与优化实践
一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合,体现了现代前端开发的三大趋势: 响应式编程:通过Vue 3的Composition API实现细粒度响应 类型安全:约60%的组件采用TypeScript编写 原子化…...
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…...
mysql_store_result的概念和使用案例
mysql_store_result() 是 MySQL C API 中的一个函数,用于检索一个完整的结果集到一个客户端。当执行一个查询(通常是 SELECT 查询)并希望处理所有返回的数据时,可以使用此函数。 概念 mysql_store_result() 函数的原型如下&…...
docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜…...
黑盒/白盒运维监控
运维监控分为黑盒和白盒 黑盒:不深入代码,在系统角度看TPS,延迟等指标 白盒:深入代码分析,通过日志捕捉,以及主动上报告警等来进行监控 黑盒监控: 1. 页面功能:域名是否可访问&…...
奖励模型:解析大语言模型的关键工具
标题:奖励模型:解析大语言模型的关键工具 文章信息摘要: 奖励模型是理解和审核大语言模型(LLM)的重要工具,通过简单的评估方式提供了模型内部表征和性能的深入洞察。它不仅能静态比较模型表现,还可帮助诊断训练问题&a…...
Boot 系统选择U启动
1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...
001 mybatis入门
文章目录 mybatis是什么ORM是什么ORM框架和MyBatis的区别#{}和${}的区别编码流程UserDaoImpl.javaUserDao.javaUser.javadb.propertiesSqlMapConfig.xmlUserMapper.xmlMybatisTest.javapom.xmluser.sql 表现层 SpringMVC 业务层 Spring 持久层 Mybatis https://mybatis.org/myb…...
【前端SEO】使用Vue.js + Nuxt 框架构建服务端渲染 (SSR) 应用满足SEO需求
Nuxt.js 是一个基于 Vue.js 的通用应用框架,它简化了使用 Vue 构建服务端渲染 (SSR) 应用的流程。除了 SSR 之外,Nuxt.js 还支持静态站点生成(Static Site Generation, SSG),渐进式网络应用(Progressive We…...
sysbench压力测试工具mysql以及postgresql
sysbench压力测试工具mysql以及postgresql sysbench工具安装 [postgresoradb sysbench-1.0.20]$ ./autogen.sh ./autogen.sh: running libtoolize --copy --force libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, config. libtoolize: copying file config/ltm…...
9.中断系统、EXTI外部中断
中断系统原理 中断 中断系统是管理和执行中断的逻辑结构,外部中断是众多能产生中断的外设之一,所以本节我们就借助外部中断来学习一下中断系统。在以后学习其它外设的时候,也是会经常和中断打交道的。 中断:在主程序运行过程中…...
Oracle 12c 中的 CDB和PDB的启动和关闭
一、简介 Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...
RocketMQ原理—4.消息读写的性能优化
大纲 1.Producer基于队列的消息分发机制 2.Producer基于Hash的有序消息分发 3.Broker如何实现高并发消息数据写入 4.RocketMQ读写队列的运作原理分析 5.Consumer拉取消息的流程原理分析 6.ConsumeQueue的随机位置读取需求分析 7.ConsumeQueue的物理存储结构设计 8.Cons…...
【C++动态规划 网格】2328. 网格图中递增路径的数目|2001
本文涉及知识点 C动态规划 LeetCode2328. 网格图中递增路径的数目 给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递…...
Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…...
MySQL(高级特性篇) 12 章——数据库其它调优策略
一、数据库调优的措施 (1)调优的目标 尽可能节省系统资源,以便系统可以提供更大负荷的服务(吞吐量最大)合理的结构设计和参数调整,以提高用户操作的响应速度(响应速度更快)减少系统…...
单片机基础模块学习——DS18B20温度传感器芯片
不知道该往哪走的时候,就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚,分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点:占用端口少,电路设计方便 同时该协议要求通过上拉电阻…...
掌握长尾关键词优化技巧提升SEO效果与流量增长策略
内容概要 长尾关键词是指由三个或更多个词组成的关键词,这类关键词通常搜索量相对较低,但在搜索引擎优化(SEO)中的作用却不可忽视。它们能够精确定位用户的需求,因为长尾关键词往往反映了用户更具体的搜索意图。掌握长…...
AAAI2024论文解读|HGPROMPT Bridging Homogeneous and Heterogeneous Graphs
论文标题 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning 跨同构异构图的小样本提示学习 论文链接 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning论文下载 论文作者 Xingtong Yu, Yuan…...
高频 SQL 50 题(基础版)_620. 有趣的电影
高频 SQL 50 题(基础版)_620. 有趣的电影 一级目录 表:cinema id 是该表的主键(具有唯一值的列)。 每行包含有关电影名称、类型和评级的信息。 评级为 [0,10] 范围内的小数点后 2 位浮点数。 编写解决方案,找出所有影片描述为 …...
git的理解与使用
本地的git git除了最经典的add commit push用来做版本管理,其实他的分支管理也非常强大 可以说你学好了分支管理,就可以完成团队的配合协作了 git仓库 我们可以使用git init来初始化一个git仓库,只要能看见.git文件夹,就代表这…...
Java进阶(一)
目录 一.Java注解 什么是注解? 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解? java中注解(Annotation)又称java标注,是一种特殊的注释。 可以添加在包,类&…...
zookeeper的介绍和简单使用
1 zookerper介绍 zookeeper是一个开源的分布式协调服务,由Apache软件基金会提供,主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务,帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...
【学习笔记】深度学习网络-深度前馈网络(MLP)
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...
使用Java技术开发软件详细流程
1. 需求分析 与客户沟通:与客户或项目负责人交流,了解需要开发的软件目标、功能需求、性能要求、使用场景等。例如,如果要开发一个在线购物系统,需要明确用户是否可以浏览商品、添加到购物车、下单支付等功能。收集和整理需求&am…...
Kubectl 与 Helm 详解
在 Kubernetes 生态中,kubectl 和 Helm 是两个核心工具,分别用于直接管理 Kubernetes 资源和简化应用的部署与管理。本文将深入探讨 kubectl 和 Helm 的功能、使用场景、部署与更新方式,并对比它们的优缺点。 1. Kubectl 详解 1.1 什么是 Kubectl? kubectl 是 Kubernetes…...
uni-app 程序打包 Android apk、安卓夜神模拟器调试运行
1、打包思路 云端打包方案(每天免费次数限制5,最简单,可以先打包尝试一下你的程序打包后是否能用): HBuilderX 发行App-Android云打包 选择Android、使用云端证书、快速安心打包本地打包: HBuilderX …...
全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析
本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…...
AI学习(vscode+deepseek+cline)
1、网页生成不成功时,直接根据提示让模型替你解决问题 2、http://localhost:3000 拒绝链接时,cmd输入命令InetMgr,网站右键新建-配置你的网页代码物理地址,这里我还输入本机登录名及密码了,并把端口地址由默认80修改为…...
