PHP反序列化---字符串逃逸(增加/减少)

简介: PHP反序列化---字符串逃逸(增加/减少)

一、PHP反序列化逃逸--增加:

首先分析源码:

<?php
highlight_file(__FILE__);
error_reporting(0);
class A{
    public $v1 = 'ls';
    public $v2 = '123';
    public function __construct($arga,$argc){
        $this->v1 = $arga;
        $this->v2 = $argc;
    }
}
$a = $_GET['v1'];
$b = $_GET['v2'];
$data =  serialize(new A($a,$b));
$data = str_replace("ls","pwd",$data);
var_dump(unserialize($data));

通过分析代码,后台将我们输入的字符串中的 'ls' 全部都替换为了 'pwd'。

我们可以利用这个漏洞构造以下payload:

原有字符串的长度为66,加长后的字符串超出了66之后,就将我们想要写入的序列化语句挤了出来,并且挤出的字符串的末尾为 ;} 将序列化语句闭合,将闭合符号后面的语句直接注释掉,达到了我们的目的。


二、PHP反序列化逃逸--减少:

<?php
highlight_file(__FILE__);
error_reporting(0);
class A{
    public $v1 = "abcsystem()system()system()";
    public $v2 = '123';
    public function __construct($arga,$argc){
            $this->v1 = $arga;
            $this->v2 = $argc;
    }
}
$a = $_GET['v1'];
$b = $_GET['v2'];
$data = serialize(new A($a,$b));
$data = str_replace("system()","",$data);
var_dump(unserialize($data));
?>

逃逸减少的代码通过 str_replace()函数将输入字符串中的 'system()' 替换成了 "" 空字符。

通过这个特性构造payload:

利用溢出的长度将事先准备的后面的字符串吃掉,并且衔接上我们自己想要写入的字符串,达到我们的目的。

相关文章
|
7天前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
21天前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
3月前
|
存储 PHP 索引
|
5月前
|
存储 监控 安全
Pikachu PHP 反序列化通关解析
Pikachu PHP 反序列化通关解析
|
4月前
|
PHP
php删除字符串中的所有空格
php删除字符串中的所有空格
27 0
|
4月前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之如何使用PHP SDK调用函数并在请求体(body)中传递字符串
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
PHP
PHP反序列化--引用
PHP反序列化--引用
|
5月前
|
PHP
PHP反序列化--pop链
PHP反序列化--pop链
|
5月前
|
安全 PHP
PHP反序列化--_wakeup()绕过
PHP反序列化--_wakeup()绕过
|
5月前
|
存储 PHP 数据库
PHP序列化基础知识储备
PHP序列化基础知识储备