PHP反序列化和魔术方法

概念

概念和开发一样
在这里插入图片描述

相关函数

在这里插入图片描述
在这里插入图片描述

这两个函数是特征之一;
序列化的含义:
在这里插入图片描述
o 是对象(数组反序列化的话 是 a)
4 是对象长度, 之后名字, 2 是变量个数,
s代表字符串, 3 代表个数,后面 也是 一样的。
在这里插入图片描述
反序列化过程中 ,可控点只有变量,函数 不可控。
局限性在于 其中的 function 函数。函数没有危害性的话 漏洞也没有,或者xss之类的。

配合魔术方法可以造成危害:
在这里插入图片描述
序列化的时候调用默认的方法:
在这里插入图片描述
关键在于下面这几个函数:
在这里插入图片描述

简单题目:

bugku的
题目:
在这里插入图片描述
hint。PHP 是这个文件 ,存在文件包含漏洞:在这里插入图片描述
所以包含hint进去:用PHP伪协议读取
在这里插入图片描述
解码:

所以自己序列化一下对象:获取 序列化之后的字符串。

在这里插入图片描述

题目中执行echo 之前 会执行tostring函数,

在这里插入图片描述

在这里插入图片描述
所以 通过 函数去 读取 flag。PHP
payload
在这里插入图片描述
在这里插入图片描述
用input协议
php://input 是个可以访问请求的原始数据的只读流。

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
关于:
php://input,php://filter
我的理解是:两个协议都可以读文件而不执行,不过fitler 功能更多,可以编码和解码

注意点:

在这里插入图片描述

实战一个题目:(10:41秒 ~ )
在这里插入图片描述

在这里插入图片描述

如果在o:后面加上 +
在这里插入图片描述

因为+ 在url编码中 有其他作用,所以要把 + URL编码一下。
上图
能加+是因为 4 和+4 是一样的。
+4 可以绕过 正则。

PHP反序列化 bug

在这里插入图片描述
在这里插入图片描述
对应题目:
思路 是 直接修改o 后面代表 属性个数的数字即可。
注意 有时候要 base64 之后再传。

PHP session 反序列化

PHP bug:
在这里插入图片描述
eg:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bug

在这里插入图片描述

在这里插入图片描述

session 安全问题:
在这里插入图片描述
实战:

安恒 题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以尝试去如下构造:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

phar反序列化:

在这里插入图片描述

看起来 无害的函数:
在这里插入图片描述
在这里插入图片描述
这些函数 都可以~~

### PHP 反序列化过程中的魔术方法 #### __wakeup 方法PHP中,`unserialize()`函数用于将存储的字符串转换回其原始的PHP值。当对象被反序列化时,如果该类定义了`__wakeup()`方法,则此方法会在反序列化之后立即执行[^1]。 ```php <?php header("Content-Type:text/html;charset=utf-8"); highlight_file(__FILE__); class Demo { private $k1; public function f1(){ echo "f1 函数被调用"; } public function __wakeup() { echo "在被反序列化时被调用"; } } $f = new Demo(); $uz = serialize($f); echo "00000"."</br>"; unserialize($uz); ?> ``` 上述代码展示了如何通过`__wakeup()`来响应反序列化进程。每当一个Demo实例从串行状态恢复成活动的对象时,“在被反序列化时被调用”的消息就会显示出来。 #### __destruct 方法 另一个重要的魔术方法是在对象销毁前触发的`__destruct()`。这可以用来清理资源或执行其他必要的关闭工作。下面的例子说明了一个潜在的安全风险场景: ```php <?php class A{ public $cmd = 'ipconfig'; public function __destruct() { system($this->cmd); } public function __construct() { echo '123'.'<br>'; } } // 如果允许外部输入控制反序列化数据, 则可能造成命令注入漏洞. // 如下行为应严格避免: // unserialize($_GET['x']); ?> ``` 这里展示的是不安全的做法——直接对外部可控的数据进行反序列化可能会导致严重的安全隐患,比如远程代码执行(RCE)[^2]。 #### 安全实践建议 为了防止因不当使用反序列化而引发的风险,应当遵循一些最佳做法: - 不要从未受信任源接收并处理未经验证的数据; - 对于敏感操作,考虑采用更安全的方式替代反序列化; - 实施严格的白名单策略以限定可接受的数据结构形式;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值