反序列化字符串逃逸(字符变少)

2021/4/20 10:27:09

本文主要是介绍反序列化字符串逃逸(字符变少),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

先上源码

<?php
function change($str){
    return str_replace("xx","x",$str);
}
$a=$_GET['a'];
$b=$_GET['b'];
class ddd{
    public $a;
    public $b;
    public function __construct($d,$f)
    {
        $this->a=$d;
        $this->b=$f;
    }

}
$dd=new ddd($a,$b);
$q=serialize($dd);
echo '过滤前'.$q ;
echo "<br>";
echo '过滤后:'.change(serialize($dd));
$c= change(serialize($dd));
echo "<br>";
print_r( unserialize($c));
?>

先来看一下正常序列化。
在这里插入图片描述我们把b的序列的复制下来";s:1:“b”;s:5:“admin”;},这里从“开始是因为正好可以跟前面的”闭合后面会说到。
我们再来看看过滤后的序列化。
在这里插入图片描述
红框框这里明显少了很多xx,这里就不符合序列化逻辑,过滤后由于少了23个xx所以他会吃掉后面23个字符。
在这里插入图片描述
第一部分是原来的23个字符,第二部分是被吃掉的字符串,我们可以看到他会吃掉我们输入的";s:1:",很显然更不符合序列化逻辑,这个时候我们可以在";s:1:“b”;s:5:“admin”;}前面多加几个字符串从而避免被吃掉。

可以看到添加完字符串,蓝色部分正好是46位且后面的"刚好跟46后面的"闭合形成一个正常的序列化。
在这里插入图片描述

这样我们就能正常的反序列化了,原理的化要多动手试试。



这篇关于反序列化字符串逃逸(字符变少)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程