字符串逃逸基础

字符串减少

反序列化分隔符
反序列化以;}结束,后面的字符串不影响正常的反序列化
属性逃逸
一般在数据先经过一次serialize再经过unserialize,
在这个中间反序列化的字符串变多或者变少的时候有可能存在反序列化属性逃逸。

image.png
这样是反序列不了 , 成员属性 不对 $b成员属性是两个
所以要改成
image.png

image.png

O:1:“A”:1:{s:2:“v1”;s:3:“a"b”;}

是字符还是格式符号 ,是由字符串长度3 来判断的
在前面字符串没有问题的情况下,;}是反序列化结束符,后面的字符串不影响反序列化结果
没有问题指的是三个一致:

成员属性数量一致
成员属性名称长度一致,
内容长度一致

属性逃逸
一般在数据先经过一次serialize再经过unserialize,
在这个中间反序列化的字符串变多或者变少的时候才有可能存在反序列化属性逃逸。
image.png
这里他肯定是不成功的
原本的序列化内容是这样的
O:1:"A":2:{s:2:"v1";s:11:"abcsystem()";s:2:"v2";s:3:"123";}
但是经过
str_replace(“system()”,“”,$data);
就是这样的
O:1:"A":2:{s:2:"v1";s:11:"abc";s:2:"v2";s:3:"123";}
长度都不一致了 看到反序列化不了 ,所以会直接flase

思考: 通过修改v2的值 "123"达到逃逸效果
image.png

image.png

image.png

字符串增多

字符串逃逸
反序列化字符串减少逃逸:多逃逸出一个成员属性
第一个字符串减少,吃掉有效代码,在第二个字符串构造代码
反序列化字符串增多逃逸:构造出一个逃逸成员属性
第一个字符串增多,吐出多余代码,把多余位代码构造成逃逸的成员属性

<?php
class A{
    public $v1 = 'ls';
    public $v2 = '123';

    public function __construct($arga,$argc){
        $this->v1 = $arga;
        $this->v2 = $argc;
    }
}
$data =  serialize(new A($a,$b));
$data = str_replace("ls","pwd",$data);

var_dump(unserialize($data));

image.png
str_replace把"ls"替换为"pwd"
字符增多,会把末尾多出来的字符挤出bool(false)
image.png
就会放回bool(false)
image.png
lslslslslslslslslslslslslslslslslslslslslsls";s:2:"v3";s:3:"666";}
image.png
这样就可以逃逸了
第一个字符串增多,吐出多余代码,把多余位代码构造成逃逸成员属性

增多例题:

image.png

减少例题:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值