简单了解反序列化
1. 什么是序列化和反序列化
序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
2. 序列化和反序列化的格式:
序列化的格式:不同的类型序列化之后的表示方式大同小异;
序列化与json的选择:
json数据的格式:
-
序列化使用serialize,特别是对象的存储。这是其存在的意义。
-
与对象无关的数据存储可以使用json,
-
数据交换时使用JSON,这也是其定义所在。
-
目前JSON是能用于UTF-8编码的数据。没办法进行对象的存储
3.session序列化引擎
php对session的处理有三种引擎分别为php、php_serialize、php_binary.经过这三者处理后的session结构都不相同。
4.常见函数——魔术方法
5.常见的漏洞利用
1. 字符串逃逸:
反序列化
原理:类似于SQL注入,都是因为对用户输入过滤严谨造成的封闭,而造成的命令执行:
反序列化底层实现逻辑:
反序列化:
反序列化会严格的按照字符串的格式(类型:长度:"变量名"; 类型:长度:"数据(可以是其它类型变量)"; 数字类型:数字; )进行,当正确的读取到 } 时,就不会再读取后面的数据了,因为正确的读取到},就代表着结束。加入在过程中有任何错误,那么反序列化过程就会终止
**例题: **
逃逸:ctfshow web入门 web262
问题:在进行replace时,前后替换的长度有了变换,所以能够进行简单的字符串逃逸
逃逸:buu安洵杯第一题:
问题:全部替换
2. CVE-2016-7124:__wakeup()函数漏洞
通过修改反序列化字符串的名称,内容的数字来进行错误的唤醒,错误唤醒,但是程序不会终止,而是继续进行,虽然错误了,也会有一个对象被唤醒
影响版本:PHP5<5.6.25 PHP7<7.0.10
例题:
功放世界第一个反序列化的题,
bugku安慰奖
3. 伪协议的利用
1. 常见文件利用
考点:php伪协议利用 利用data://伪协议传数据,利用php://filter伪协议读取文件数据
text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
file=php://filter/read=convert.base64-encode/resource=useless.php
2.PHAR伪协议利用
作用:phar文件是php的打包文件,在php.ini中可以通过设置phar.readonly来控制phar文件是否为只读,若非只读(phar.readonly=Off)则可以生成phar文件.
phar文件结构
四部分,stub、manifest、contents、signature
例题:CISCN2019 华北赛区 Day1 Web1 Dropbox
考点:phar文件,pop链构造
pop链:
可以简单理解为解题链,一环套一环,从一个文件中,找到下一个文件或者上一个文件是不是对本文件的内容进行了利用;例如例题中的:pop链构造:User(类)->filelsit(类)->file(类)(filename=flag.php)->close()(函数)
4.session反序列化
需要知道session_start()
这个函数已经这个函数所起的作用:
当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会依据客户端传来的PHPSESSID来获取现有的对应的会话数据(即session文件), PHP 会自动反序列化session文件的内容,并将之填充到 $_SESSION 超级全局变量中。如果不存在对应的会话数据,则创建名为sess_PHPSESSID(客户端传来的)的文件。如果客户端未发送PHPSESSID,则创建一个由32个字母组成的PHPSESSID,并返回set-cookie。
提示:
一般如果是session漏洞,源码中一般有session_hanlder='php_serialize'的设置和session_start()的提示
例题:
ctfshow web入门反序列化 web 263
5. 其它类型的组合拳
考点:强弱类型比较,php7.1+对类的属性(公有私有保护)不敏感
注意:
- protected和private的%00截断在复制粘贴之后可能消失,需要手动添加
- ``反引号,可以作为系统命令输出给var_dump
- 如果不能使用%00就使用\00来进行截断
- 传递进去的是字符串,在进行pop链的时候,想清楚反序列化的是什么
类型:
- 字符串逃逸
- 部分截断(关键字替换的时候两次长度不对等:少变长或者长变少)
- 全部截断
- 伪协议:
- 一般的伪协议:data,php://filter等
- PHAR伪协议:用伪协议读取的时候自动进行反序列化操作
- 本身的漏洞
- CVE-2016-7124:wakeup()的绕过
- php7.1+ ==>对类型不敏感
- session反序列化:自动进行反序列化操作
- ssrf+反序列化
- 过滤不严谨:
- 十六(使用大写的S)进制绕过字符串过滤
- 正则表达式不严谨>'[o]:\d+' 绕过:在数字前面加上+形成结构>o:+\d+
- 在PHP中,对类的名字大小写不敏感==>(car类和CAr类是等价的)
参考:
深入浅析PHP的session反序列化漏洞问题_php实例_脚本之家 (jb51.net)
CTF]PHP反序列化总结_Y4tacker的博客-CSDN博客_ctfshow 反序列化
https://www.bilibili.com/video/BV1bJ411C7xv?from=search&seid=2459185202854297460
https://www.bilibili.com/video/BV1JZ4y1c7ro?p=37
https://www.freebuf.com/news/172507.html
https://blog.csdn.net/qq_43431158/article/details/99544797
__EOF__

本文链接:https://www.cnblogs.com/upstream-yu/p/15191503.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix