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:

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

相关推荐

  1. PHP 序列字符串逃逸

    2024-03-19 11:34:02       30 阅读
  2. PHP序列漏洞-字符串逃逸

    2024-03-19 11:34:02       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 11:34:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 11:34:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 11:34:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 11:34:02       20 阅读

热门阅读

  1. hdlbits系列verilog解答(Popcount3)-57

    2024-03-19 11:34:02       20 阅读
  2. 【NLP6-使用seq2seq模型架构实现英译法任务】

    2024-03-19 11:34:02       22 阅读
  3. 什么是docker(docker客户端、镜像、容器、仓库)

    2024-03-19 11:34:02       17 阅读
  4. 开发常用的一些工具总结

    2024-03-19 11:34:02       18 阅读
  5. oracle迁移至gbase,sql问题总结(完善中)

    2024-03-19 11:34:02       18 阅读
  6. MQ横向对比:RocketMQ、Kafka、RabbitMQ、ActiveMQ、ZeroMQ

    2024-03-19 11:34:02       16 阅读
  7. IOS面试题object-c 136-140

    2024-03-19 11:34:02       19 阅读