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

unserialize()函数概念

成都创新互联专业为企业提供钦州网站建设、钦州做网站、钦州网站设计、钦州网站制作等企业网站建设、网页设计与制作、钦州企业网站模板建站服务,十载钦州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

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

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

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

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


文章标题:php序列化函数漏洞----unserialize()函数
文章出自:http://pwwzsj.com/article/piddoj.html