关于反序列化漏洞的一些理解
php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct, __destruct, __toString, __sleep, __wakeup等等。这些函数在某些情况下会自动调用,比如__construct当一个对象创建时被调用,__destruct当一个对象销毁时被调用,__toString当一个对象被当作一个字符串使用。为了更好的理解magic方法是如何工作的,在2.php中增加了三个magic方法,__construct, __destruct和__toString。可以看出,__construct在对象创建时调用,__destruct在php脚本结束时调用,__toString在对象被当作一个字符串使用时调用。这些魔术函数有点类似c++里的构造函数和析构函数。而反序列化漏洞正是利用魔术函数执行脚本。
序列化函数serialize()执行的操作是保存一个类,至于为什么要保存,可以举一个简单的例子来看一下,比如php中一个脚本b需要调用上一个脚本a的数据,而脚本b需循环多次,因为脚本a执行完后其本身的数据就会被销毁,总不可能b每次循环时都执行一遍脚本a吧,serialize()就是用来保存类的数据的,而unserialize()则是将保存的类的数据转换为一个类。
知道了这些后就可以看反序列化漏洞是如何利用魔术函数的了,先来看一个例子,以下php代码保存为test.php
<?phpclass FileClass{public $filename = 'error.log';// 当对象被作为一个字符串会读取这个文件public function __toString(){return file_get_contents($this->filename);}} class User
{ // Class data public $age = 0; public $name = ''; // 允许对象作为一个字符串输出上面的data public function __toString() { return 'User ' . $this->name . ' is ' . $this->age . ' years old. <br />'; }
} // 用户可控 $obj = unserialize($_GET['usr_serialized']); // 输出__toString echo $obj; ?>
然后创建1.txt
然后创造利用函数1.php
<?php include 'test.php';
$fileobj = new FileClass();
$fileobj->filename = '1.txt'; echo serialize($fileobj); ?>
new fileclass这个类时会调用_tostring()这个魔术函数,通过指定filename为1.txt
访问http://192.168.153.138/test.php?usr_serialized=O:9:"FileClass":1:{s:8:"filename";s:5:"1.txt";}
成功显示了1.txt的内容。利用成功。
关于反序列化漏洞的一些理解相关推荐
- 序列化和反序列化漏洞的简单理解
1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.Web ...
- java 反序列化漏洞 利用思路简介
目录 序列化的过程 readObject方法 反射链 完成反序列漏洞实践 结论 之前听别人讲解反序列化的漏洞听的晕乎乎的,刚脆就趁着周末研究一下反序列化漏洞,并且搭建实战环境实际操作了一把,明白了之后 ...
- Typecho反序列化漏洞分析
0x00 前言 在刷buu 的时候做到一道关于 Typecho 的题 ,[GKCTF2020]EZ三剑客-EzTypecho wp 中说到可以利用Typecho 的 反序列化 poc 来打,感觉直接用 ...
- 调用 php_最全的PHP反序列化漏洞的理解和应用
原创:f1r3K0合天智汇 php反序列化漏洞,又叫php对象注入漏洞,是一种常见的漏洞,在我们进行代码审计以及CTF中经常能够遇到. 01学习前最好提前掌握的知识 PHP类与对象(https://w ...
- php反序列化漏洞 freebuf,最全的PHP反序列化漏洞的理解和应用
原创:f1r3K0 php反序列化漏洞,又叫php对象注入漏洞,是一种常见的漏洞,在我们进行代码审计以及CTF中经常能够遇到. 01学习前最好提前掌握的知识PHP类与对象(https://www.ph ...
- JAVA反序列化漏洞简单理解
反序列化原理 关于反序列化的原理不在多说,和php类似,序列化的数据是方便存储的,而存储的状态信息想要再次调用就需要反序列化 Java反序列化的API实现 实现方法 Java.io.ObjectOut ...
- php phar 混淆,深入理解PHP Phar反序列化漏洞原理及利用方法(一)
Phar反序列化漏洞是一种较新的攻击向量,用于针对面向对象的PHP应用程序执行代码重用攻击,该攻击方式在Black Hat 2018会议上由安全研究员Sam Thomas公开披露.类似于对编译二进制文 ...
- 深入理解JNDI注入与Java反序列化漏洞利用
rmi 和 jndi 这些概念,一直接触,但是看了会儿 还是略微懵逼,这篇文章 暂时理清了我的思路 [承上启下]----------------------------------上边属于我自己瞎扯的 ...
- 个php反序列化漏洞,PHP反序列化漏洞学习(一)
前言:PHP反序列化也是web安全中常见的一种漏洞,这次就先来大致了解一下PHP反序列化漏洞的基础知识. 一.PHP序列化和反序列化 在学习PHP反序列化漏洞时,先来了解一下基础的知识. (一)PHP ...
最新文章
- 335b装配程序流程图_某建设项目装配式框架结构PC构件吊装监理细则(方案)
- matlab mesh与surf比较
- LOST OF DETAIL!!!的数学原理
- native react 更新机制_深度使用react-native的热更新能力,必须知道的一个shell命令...
- 学习笔记Hadoop(十五)—— MapReduce编程进阶
- xfce中鼠标的“反转卷轴方向“
- 一步步安装Ubuntu 13.10服务版
- 水仙花数python代码输入一个介于3到5的正整数_Python练习题——自幂数(水仙花数)...
- STM32F103定时器输入捕获功能
- 12、常见Conditional注解源码解析-ConditionalOnBean(写作中...)
- Tricks(十七) —— 数组与字典(map)
- 【poj1995】Raising Modulo Numbers
- anaconda 创建,激活,退出,删除环境
- MySQL数据库安装教程
- PMP考纲解读 |【人】任务3—支持团队绩效(二)
- POJ 3713 枚举 + Tarjan 割点
- 在电脑的网络中看不到计算机,在网上邻居中看不到自己的电脑也看不到别人的解决方法...
- Android Studio制作.9.png图片
- C#:DataGridView边框线、标题、单元格的各种颜色
- 【安卓基础】基于Android Studio的家庭理财通项目
热门文章
- 消除“马路黑洞”,计讯物联智能井盖综合管理系统平台有绝招
- 社团检测之节点相似度指标
- 基于android的防抖音直播,基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能...
- 去掉SDI工程中CView的白色边框
- 爬虫+数据可视化分析
- 2023 极术通讯-安谋科技与此芯科技携手共建Arm PC SIG
- 2018最新蚂蚁3期JAVA互联网高级架构师视频教程
- b camp;amp;b-c 什么意思在c语言里,大工20春《camp;c++语言程序设计》复习资料二...
- 互联网协议入门及DNS原理入门
- Matlab之绘制带帷幕的网格曲面图