unserialize反序列化
程序员文章站
2022-03-09 14:25:49
...
简单来说序列化就是存档,反序列化就是读档
通过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行代码相等
上一篇: 浅谈Vue-cli 命令行工具
下一篇: 通过binlog恢复误删除的数据(一)