码迷,mamicode.com
首页 > Web开发 > 详细

php序列化函数漏洞----unserialize()函数

时间:2018-05-29 11:01:46      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:PHP反序列化   unserialize()   实验吧   

unserialize()函数概念

unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE。与之相对的函数serialize()序列化函数。

我们看一个题目
题目:天网管理系统,链接: http://ctf5.shiyanbar.com/10/web1/

1、进入题目查看网页源码

技术分享图片
这行提示比较霸气,直接让你判断你的用户名的md5值是不是等于0,这里利用php处理MD5哈希缺陷,遇到哈希值是0e开头的字符串被当做0,QNKCDZO就是这样的字符串。推荐网站;https://www.cnblogs.com/Primzahl/p/6018158.html.
2、输入这个特殊字符串,查看一下
技术分享图片
3、给了一个路径,查看一下子
技术分享图片
这里又得到一个源码,里面关键的部分说的就是unserialize()函数。从源码中很明显可以看出,post传输的username值应该是一个数组。这样才能分别得出user,pass的值。
我们直接给出数组是不行的,因为unserialize()函数需要处理序列化之后的字符串,然后将其反序列化为php的值。所以我们输入的值应该是经过序列化函数serialize()处理后的数组,然后交由unserialize()函数去处理。
编写序列化字符串脚本:
<?php
$a=array(“user” => true,”pass” => true) //或false
$b=serialize($a)
echo $b
?>
这里要记着数组的值要根据提示用布尔值,不然不会得到flag
最后将得到的结果填入文本框便可以拿到flag。

推荐一篇文章:https://blog.csdn.net/cnbird2008/article/details/8664026

php序列化函数漏洞----unserialize()函数

标签:PHP反序列化   unserialize()   实验吧   

原文地址:http://blog.51cto.com/12332766/2121394

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!