PHP反序列化&POP链构造:理解与利用

如有疑惑,尽管提问;如有错误,请您指正!

[MRCTF2020]Ezpop为例:

本题的入口?通过pop传入序列化数据

本题的出口?通过include包含flag.php

我们要传入什么?序列化数据,其内容是一个类的实例,这个实例是层层嵌套的,以保证在反序列化时能触发一系列操作,达到包含flag的目的

怎么得到这个实例?这一过程叫POP链的构造,我们要根据已有类的信息,生成一个实例,并序列化。本文把这个实例命名为$a。

可能你会问,我们传入序列化数据,怎么就触发原有php文件的函数了呢?这就是漏洞所在。我们不需要在原php中new一个实例,我们只要传入实例的序列化数据,它就会自动匹配到对应的类上并触发函数。

构造$a的思路如下,本文仅将思路叙述一遍,并不说明思路如何寻找:

  1. 首先注意到__wakeup,它在反序列化时触发。所以$a应该是Show类
  2. 触发__wakeup后,会对source进行正则匹配。如果将一个类当作字符串使用时,会触发__tostring。所以,$a->source是Show类,因为Sho
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值