序列化就是把一个对象转成字符串的形式,可以保存起来
反序列化就是把已经转成字符串的对象,再还原变成原对象
一个实例
定义了一个baby 对象,再定义一个$file 变量。中间的自定义函数先不管,我们先给$file一个变量值 flag.php ,通过serialize函数 将这个对象变为 字符串。
就是0开头绿色那条。解释下这个字符串
0:4:"baby" 0 对象 4 d 对象名长度 s 字符串 4 变量名长度 "file"变量名 后面就是变量值长度和值
再通过unserialize 函数 将字符串反序列化 还原成 $file=flag.php
这就是序列化 和反序列化的过程!
漏洞的核心思想还是在于unserialize函数,漏洞利用的核心思路在于控制魔术方法中的代码从而产生代码注入,SQL注入,目录遍历等一系列的漏洞利用。
这是一道运用反序列化漏洞的ctf题目。看到上面这个源码,当这个对象被序列化后,__tostring() 将自动执行下面的语句,file_get_contents()
如果括号中时flag.php ,那就会输出flag.php的值,就能得到flag了。这里就用到了反序列化漏洞,当你给$password 传入一个 序列化的值,序列化的$file=flag.php 这就是我们可以控制的序列化的值,再经过反序列化,就输出了这个Falg 对象。执行$file=flag.php,输出 file_get_contents(flag.php)。。这是反序列化漏洞的一种利用方式
网友评论