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

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

时间: 2024-08-27 23:57:03

php序列化函数漏洞----unserialize()函数的相关文章

php的serialize()函数和unserialize()函数

适用情境:serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方.这有利于存储或传递 PHP 的值,同时不丢失其类型和结构.比较有用的地方就是将数据存入数据库或记录在文件中的时候 serialize()可处理处资源类型外所有的类型,也可以序列化对象 <?php $array = array(); $array['keys'] = 'www'; $array['values']='11111'; $a = serialize($array); echo $a; 

PHP &quot;Unserialize()&quot;函数释放后重利用远程代码执行漏洞

PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中. PHP的‘process_nested_data’函数在实现上存在释放后重利用漏洞,攻击者通过向"unserialize()"函数传递构造的输入,利用此漏洞可破坏内存:"var_push_dtor()"函数在实现上存在空指针间接引用漏洞,攻击者通过向"unserialize()"函数传递构造的输入,利用此漏洞可造成崩溃.成功利用这些漏洞可造成任意代码执行.以下版本受到

serialize和unserialize函数

序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.1. serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = serialize($a); echo $s;

php unserialize函数反序列话数组

有没有,遇到这种情况:使用serialize函数序列化一个数组后,然后想通过unserialize函数反序话,得到该数组,可是确报错,得不到想要的结果. 从网上搜索,发现很多网友都遇到相同的问题,好像说这是unserialize函数的bug. 不过,好在有人已经解决了,我就借花献佛,将他记录下来,供大家使用: 1.假如,是utf-8的数据,请使用下面的函数反序列化(我没有验证,可以尝试下) function mb_unserialize($serial_str) { $serial_str= p

php函数漏洞原理解析

PHP是世界上最好的语言,是的,php在世界上养活了两类人,一类是编写php代码的人,一类是从事安全×××的这类人,因为在php中存在着有漏洞的函数.在一定条件作用下,这些函数没有按着函数发明者的意愿去解析.在ctf的web世界中也算待了几个月了,对学习当中的遇到的有问题的函数略做一下总结. md5()函数 定义:Md5()函数计算字符串的MD5散列 问题1:经过MD5()函数处理的字符串散列如果出现0e开头的,在被php处理的时候会被认为等于0.源码: <?php $user=$_GET['u

函数-内置函数,匿名函数,嵌套函数,高阶函数,序列化

函数简单说明 # 函数即"变量" # 高阶函数 # a.把一个函数名当做实参传给另一个函数(在不修改被装饰函数的源代码的情况下,为其添加功能) # b.返回值中包含函数名(不修改函数的调用方式) ''' import time def bar(): print("in the bar!") time.sleep(2) def foo(func): start_time = time.time() func() #根据内存地址,执行代码 stop_time = tim

python-3_函数_匿名函数_正则_yield_迭代器_序列化_内置函数_模块

L=['a','b','c','d'] for (offset,item) in enumerate(L):    print offset,item 打印的结果: 0 a1 b2 c4 d 迭代器: for i in range(100):     生成列表 for i in xrange(100)    迭代器,速度会比range快 readlines()    xreadlines() 例子: def run():    print "test1"    yield 1     

【实验吧web】FALSE,PHP sha1() md5()函数漏洞

原题目链接:http://www.shiyanbar.com/ctf/1787 参考答案链接:http://blog.csdn.net/zhaohansk/article/details/44153141 题目 PHP代码审计 hint:sha1函数你有认真了解过吗?听说也有人用md5碰撞o(╯□╰)o 格式:CTF{} 解题链接: http://ctf4.shiyanbar.com/web/false.php 解题 打开网址,是酱紫的: 随便输入用户名和密码: 发现是Get请求: 点开view

变量覆盖漏洞----extract()函数

Extract()函数引起的变量覆盖漏洞 该函数使用数组键名作为变量名,使用数组键值作为变量值.但是当变量中有同名的元素时,该函数默认将原有的值给覆盖掉.这就造成了变量覆盖漏洞. 一.我们来查看一串代码:1.文件将get方法传输进来的值通过extrace()函数处理.2.通过两个if语句分别判断是否存在gift变量,和变量gift的值和变量content的值是否相等.变量content的值是通过读取变量test的值获取到的.如果两个变量相等输出flag.如果不相等,输出错误. 二.但是我们并不知