安全矩阵

 找回密码
 立即注册
搜索
查看: 2772|回复: 0

PHP反序列化入门简述及CTF小实例

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2022-1-9 20:06:29 | 显示全部楼层 |阅读模式
原文链接:PHP反序列化入门简述及CTF小实例

1.序列化及反序列化序列化就是将一个对象转换成字符串。(字符串包括 属性名 属性值 属性类型和该对象对应的类名。)
反序列化则相反将字符串重新恢复成对象
serialize() //将一个对象转换成一个字符串【序列化】


unserialize() //将字符串还原成一个对象【反序列化】

2.序列化的无类和有类php反序列化技术可以简单分成两种,一个是无类,一个即为有类。
简单理解,无类就是没有class,有类就为有class。
2.1无类小案例
看本地的一个小环境的源码。


由此简单分析可知,如果我们想得到flag,那我们的参数str的值就要等于M9,(因为key赋值为M9),这里又出现了一个反序列化函数,所以我们要将传入的值先序列化。


传入url:http://127.0.0.1/test.php?str=s:2:"M9";


即可完成。
2.2有类小案例(重点)
当遇到有类时,我们就先要掌握一个小知识点,魔术方法。
  1. __construct()//创建对象时触发
  2. __destruct() //在到某个对象的所有引用都被删除或者当对象被显式销毁时触发
  3. __call() //在对象上下文中调用不可访问的方法时触发
  4. __callStatic() //在静态上下文中调用不可访问的方法时触发
  5. __get() //用于从不可访问的属性读取数据
  6. __set() //用于将数据写入不可访问的属性
  7. __isset() //在不可访问的属性上调用 isset()或 empty()触发
  8. __unset() //在不可访问的属性上使用 unset()时触发
  9. __invoke() //当脚本尝试将对象调用为函数时触发
复制代码

这是一些常见的魔术方法,这里我们运行一个简单程序来有助于了解


这里,我们没有看到任何的参数调用,这些参数输出的值都是在不经意间触发的,就像是一种潜规则一样。
例如当你创建一个对象时,就会触发__construct,就像是说起自己的女朋友,心中会马上浮现出她的身影是一样的,没有人特意让你去想,是自己无意识的规则调用。

魔术方法大全官方文档:https://www.php.net/manual/zh/language.oop5.magic.php

2.3 网鼎杯CTF反序化赛题复现
​​



首先确定,有class有类,并且有魔术方法,那这里我们推测应该需要触发魔术方法得到flag。
读取源码我们获得的解题信息如下;
1.需要我们读取flag.php


2.涉及到两个魔术方法:__conststruct和__destruct(触发条件在上面)
3.存在 is_valid 过滤
4.op弱类型判断
知道了这些已知条件,我们便开始解题
1.首先需要传入一个参数str,通过is_valid()规定了传入的每一个字符的ASCII码的范围必须在32到125之间,然后对这个’str’进行反序列化操作。


2.从__destruct()代码中可以看到,如果op === “2”,那么op会被赋值为"1",然后content会赋值为空,并执行process函数,这里 if 中的判断语句用的是强类型比较。


3.所以我们这里要让op不等于2,让它赋值给process
4.这里我们再看看prosscess函数代码


代码内容为:如果op == “1”,执行write()函数;如果op ==“2”,执行read函
函数,同时将结果赋值给$res,然后输出;否则将输出"Bad Hacker!"。
由于这里使用的是==判断,属于弱类型,所以我们只需要将op的值写为op==" 2",即===不成立为false,==成立为true,执行到read函数。
5.这里我们继续观察read函数

这里是使用filename调用file_get_contents函数将文件内容赋值给$res输出,这里的filename是我们可控的。

6.这里思路就出来了,我们需要涉及对象 FileHandler,变量 op 及 filename,content,进行构造输出

7.查看源代码,成功得到flag


其他解题思路:https://www.cnblogs.com/Cl0ud/p/12874458.html
  1. php反序列化好文推荐:
  2. https://www.freebuf.com/articles/web/221213.html
  3. https://www.cnblogs.com/20175211lyz/p/11403397.html
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 22:57 , Processed in 0.016935 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表