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

【php反序列化字符串逃逸】

反序列化字符串逃逸原理

原理

请添加图片描述
就会报错
请添加图片描述

可以反序列化类中不存在的元素

<?php
class user{public $name;public $age;
}
$b='O:4:"user":3:{s:4:"name";s:3:"bob";s:3:"age";s:2:"10";s:6:"gender";s:3:"boy";}';
print_r(unserialize($b));

得到的结果,多了一个boy

user Object
([name] => bob[age] => 10[gender] => boy
)

PHP 在反序列化时,底层代码是以 ; 作为字段的分隔,以 } 作为结尾(字符串除外),并且是根据长度判断内容的

O:4:"user":3:{s:4:"name";s:3:"bob";s:3:"age";s:2:"10";s:6:"gender";s:3:"boy";}s:6:"gender";s:4:"boy";

这是不会报错的,但是也不会进行反序列化。结果依然不变。

}后面的序列化内容不影响

请添加图片描述
我们在结尾加任何字符都是不会报错的,通过这两个原理看到下面的demo:

请添加图片描述
filter就是把序列化后的一个b替换成两个a ,这里会输出原始序列化和替换后的序列化,最后是反序列化,输出如下:

请添加图片描述
经过了filter的处理 因为ydsaa长度为5不为4,所以反序列化的时候报错了,之前我们知道php是通过;}来识别序列化长度的,只需要把username后面添加;} 让它提前闭合
请添加图片描述
再把变量名的数量更改了,因为我们上图的变量名长度只有3,但实际传入了18,得补足变量名长度就能成功把后面的age变量给修改了
请添加图片描述

练习一

发现了www.zip源码,主要的问题出在login.php
请添加图片描述
login.php

<?phpinclude 'function.php';
$config =  include_once 'config.php';$username = $_POST['username'];
$password = $_POST['password'];
$sql = $_POST['sql'];$login = new 
http://www.xdnf.cn/news/19403.html

相关文章:

  • Go 面试题: new 和 make 是什么,差异在哪?
  • ADSL 代理 Proxy API 申请与使用指南
  • NLP技术突破:浅层与深层语义分析全解析
  • test隐藏能力
  • 5-ATSAM3X8-定时器
  • 架构选型:为何用对象存储替代HDFS构建现代数据湖
  • 腾讯混元翻译大模型Hunyuan-MT-7B:重塑跨语言沟通的技术革命
  • 定时器设计之->分级时间轮
  • 基于SpringBoot的二手交易平台【2026最新】
  • 2025我“生发”了『折行』|『内注』|『终端正偿』|『中文负偿』四大“邪术”(前二造福python代码阅读者;后二助力所有艺术人)
  • Kali自带的录屏工具:recordmydesktop
  • 基于单片机电动车充电桩/充电车棚环境监测设计
  • 如何将照片从电脑传输到安卓设备
  • vscode翻译插件
  • Kafka 架构原理
  • 【大模型】大模型微调-RLHF(强化学习)
  • Certificate is Signed Using a Weak Signature Algorithm漏洞解决
  • Uniapp 图片前端上传功能实现与详解
  • JVM:内存区域划分、类加载的过程、垃圾回收机制
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • 项目升级--mysql主从复制和读写分离
  • 统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
  • 9.1C++——类中特殊的成员函数
  • GitHub 热榜项目 - 日榜(2025-09-01)
  • Android面试指南(六)
  • 科学研究系统性思维的方法体系:数据收集模板
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • JVM核心机制:类加载与内存结构详解
  • Axios与Ajax:现代Web请求大比拼
  • 彻底搞懂 C++ 中的 `typename`