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

unserialize()函数概念php

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

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

一、进入题目查看网页源码web

php序列化函数漏洞----unserialize()函数
这行提示比较霸气,直接让你判断你的用户名的md5值是否是等于0,这里利用php处理MD5哈希缺陷,遇到哈希值是0e开头的字符串被当作0,QNKCDZO就是这样的字符串。推荐网站;http://www.javashuo.com/article/p-kdsdvvqj-ca.html.
二、输入这个特殊字符串,查看一下
php序列化函数漏洞----unserialize()函数
三、给了一个路径,查看一会儿
php序列化函数漏洞----unserialize()函数
这里又获得一个源码,里面关键的部分说的就是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/8664026ide

相关文章
相关标签/搜索