unserialize反序列化

在这里插入图片描述
在这里插入图片描述

简单来说序列化就是存档,反序列化就是读档

在这里插入图片描述

在这里插入图片描述

通过serialize函数来将对象、类等序列化

在这里插入图片描述

反序列化,将字符串重新解析成对象。

在这里插入图片描述
在这里插入图片描述

将数组进行序列化

在这里插入图片描述

在这里插入图片描述

魔术方法就是一个小机关,当满足条件就自动触发。

在这里插入图片描述

对象触发和对象触发完,自动销毁。

所以只有_construct 和_destruct显示
在这里插入图片描述
在这里插入图片描述

现在使用反序列化,就显示了_wakeup和_destruct

在这里插入图片描述
在这里插入图片描述

变量un去调用类里面的zkaq这个方法,最后执行这个zkaq这个方法。

在这里插入图片描述

destruct在最后

在这里插入图片描述

反序列化的核心就是你要处理的数据,放入反序列化函数,去执行

反序列化一定需要白盒审计。
在这里插入图片描述
在这里插入图片描述

进入靶场,让我们先看下源码

http://59.63.200.79:8010/uns/index.php?source

flag in ./flag.php <?php
Class readme{
    public function __toString()
    {
        return highlight_file('Readme.txt', true).highlight_file($this->source, true);
    }
}
if(isset($_GET['source'])){
    $s = new readme();
    $s->source = __FILE__;
    echo $s;
    exit;
}
//$todos = [];
if(isset($_COOKIE['todos'])){
    $c = $_COOKIE['todos'];
    $h = substr($c, 0, 32);
    $m = substr($c, 32);
    if(md5($m) === $h){
        $todos = unserialize($m);
    }
}
if(isset($_POST['text'])){
    $todo = $_POST['text'];
    $todos[] = $todo;
    $m = serialize($todos);
    $h = md5($m);
    setcookie('todos', $h.$m);
    header('Location: '.$_SERVER['REQUEST_URI']);
    exit;
}
?>
<html>
<head>
</head>

<h1>Readme</h1>
<a href="?source"><h2>Check Code</h2></a>
<ul>
<?php foreach($todos as $todo):?>
    <li><?=$todo?></li>
<?php endforeach;?>
</ul>

<form method="post" href=".">
    <textarea name="text"></textarea>
    <input type="submit" value="store">
</form>

__FILE__:显示当前文件的绝对路径。

在这里插入图片描述
在这里插入图片描述

前面都没怎么仔细说明,这里就详细说明一下吧

创建了一个类(相当于创建了一个函数),
然后当source接收到传参值,且不为空,
new一个类
把phpinfo赋值给source,之前那个新new的类里面的变量this去调用source,返回1为真,触发
最后这个新new的类输出phpinfo
在这里插入图片描述
在这里插入图片描述

反序列化,把序列化解析出来。

在一个类里面,如果一个传参满足了魔术方法,就会自动触发,
在这里插入图片描述

在这里插入图片描述

2行代码相等

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值