WEB漏洞 PHP 反序列化 (有类)

简介: WEB漏洞 PHP 反序列化

触发:unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法:
参考:https://www.cnblogs.com/20175211lyz/p/11403397.html
__construct()//创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发

本地代码示例

<?php
class ABC{
    public $test;
    function __construct(){
        $test =1;
        echo '调用了构造函数<br>';
    }
    function __destruct(){
        echo '调用了析构函数<br>';
    }
    function __wakeup(){
        echo '调用了苏醒函数<br>';
    }
}
echo '创建对象a<br>';
$a = new ABC;
echo '序列化<br>';
$a_ser=serialize($a);
echo '反序列化<br>';
$a_unser = unserialize($a_ser);
echo '对象快要死了!';
?>

运行结果:

创建对象a
调用了构造函数
序列化
反序列化
调用了苏醒函数
对象快要死了!调用了析构函数
调用了析构函数

代码分析:

参考链接:
https://www.cnblogs.com/20175211lyz/p/11403397.html
class 这个关键字 一看就能看出来 这是一个类
定义三个函数 每个函数 都有一个魔术方法
__construct() 函数 当你创建对象的时候会自动触发此魔术方法
__destruct() 函数  反序列化结束后触发这个方法 简单理解代码都执行后自动触发
__wakeup() 函数  若反序列化函数unserialize存在 优先调用此方法
代码从第一行运行 因为创建了一个类 类中有函数 所以前面三个函数只有在调用的时候
才会触发  然后执行第一个echo 打印出 "创建对象" 此时 创建了对象 会自动触发__construct方法
打印出 "调用了构造函数"  继续向下执行代码 打印 "序列化" 序列化函数没有执行 跳过打印 " 反序列化" 
反序列化函数执行后 优先执行__wakeup魔术方法 打印 "调用了苏醒函数" 此时 反序列化进程结束了 打印 
"对象快死了" 并触发__destruct 方法 打印 "调用了析构函数" 最后整段代码结束 再次触发析构函数 完

网上公开的靶场讲解 (感谢这位大佬)

http://111.67.196.76:1088/unserialize/01/index.php


提示 /index.php?re=hello

所以url传参方式re = 序列化字符

解题思路

观察代码 利用文件读写函数 把hello.php 内容更改 获取反序列化
定义了类 类中__destruct魔术方法 unserialize函数 
代码从上到下分析
类中定义tes变量 
函数中使用文件操作 对hello.php文件进行写入
fputs函数 打开这个文件 把test变量的值写入此文件
然后关闭文件
创建一个类 使用re参数接收数据 并使用stripslashes函数 去掉反斜杠
然后调用反序列化函数

得知流程后 把代码复制到phpstom里 然后精简代码 进行序列化

<?php
class a {   // 有类序列化 
    var $test = 'hello';   // 关键变量 是将此变量值写入文件里 
}
$class = new a();   // 创建对象
echo(serialize($class));  // 获取数据
?>
O:1:"a":1:{s:4:"test";s:5:"hello";}

此时 内容已成功显示出来 。

所以说 学习反序列化 还是要求有一定的代码基础

IT界 以后不会编程,真的很难存活。



相关文章
|
5天前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
随着PHP 8的正式发布,这一版本带来了多项重大改进和新特性,旨在提升性能、增加语言的灵活性并简化开发流程。本文将详细探讨PHP 8中的关键更新,包括JIT编译器、联合类型、命名参数、匹配表达式等,并分析这些新特性如何影响现代Web开发的实践。通过引用最新的性能数据和开发者反馈,我们将深入理解PHP 8带来的变革,以及它对现有项目和未来趋势的潜在影响。
|
6天前
|
安全 大数据 PHP
深入理解PHP 7中的新特性及其对现代Web开发的影响
【6月更文挑战第28天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,揭示这些变化如何重塑Web开发领域。我们将一窥未来PHP的发展趋势,并分析开发者如何利用这些新特性来构建更快、更安全、更易于维护的应用程序。
10 1
|
7天前
|
开发框架 中间件 PHP
Laravel框架:优雅构建PHP Web应用的秘诀
**Laravel 框架简介:** Laravel是PHP的优雅Web开发框架,以其简洁语法、强大功能和良好开发者体验闻名。它强调代码的可读性和可维护性,加速复杂应用的构建。基础步骤包括安装PHP和Composer,然后运行`composer create-project`创建新项目。Laravel的路由、控制器和Blade模板引擎简化了HTTP请求处理和视图创建。模型和数据库迁移通过Eloquent ORM使数据库操作直观。Artisan命令行工具、队列、事件和认证系统进一步增强了其功能。【6月更文挑战第26天】
10 1
|
8天前
|
程序员 PHP 数据库
深入理解PHP 7的新特性及其对现代Web开发的影响
【6月更文挑战第26天】随着互联网技术的飞速发展,PHP作为服务端脚本语言的佼佼者,其最新版本PHP 7带来了性能和功能上的显著提升。本文将深度剖析PHP 7中的新特性,并探讨这些变化如何优化现代Web开发实践,提升应用性能及开发效率。我们将从语言本身的变化到实际应用案例,全面解读PHP 7给开发者带来的福音。
9 1
|
18小时前
|
IDE 编译器 测试技术
PHP 8新特性解析及其对现代Web开发的影响
本文深入探讨了PHP 8版本中引入的新特性,并分析了这些变化如何影响现代Web开发的实践。通过引用最新的性能测试数据和开发者社区反馈,本文揭示了PHP 8在提升开发效率、增强代码安全性及优化性能方面所做出的贡献。同时,文章还讨论了PHP 8新特性对于现有项目升级路径的实际指导意义,为读者提供了关于是否以及如何迁移至PHP 8的洞见。
5 0
|
18小时前
|
搜索推荐 编译器 测试技术
PHP 8新特性及其对现代Web开发的影响
随着PHP 8的发布,开发者社区迎来了一系列创新特性,这些特性旨在提升语言性能、增强类型系统并改进错误处理机制。本文将深入探讨PHP 8中的JIT编译器、联合类型、错误处理等关键更新,并通过实证数据展示这些变化如何优化代码执行和提高开发效率。我们将通过案例分析,阐述新特性在实际项目中的应用,以及它们如何影响未来PHP Web开发的走向。
|
1天前
|
编译器 PHP 开发者
探索PHP 8的新特性及其对现代Web开发的影响
【7月更文挑战第3天】随着PHP 8的发布,这个广受欢迎的服务器端脚本语言迎来了一系列创新的功能和性能提升。本文将深入探讨PHP 8中的新特性,分析它们如何优化代码编写流程、提高应用程序性能,并讨论这些变化给现代Web开发带来的深远影响。从联合类型到JIT编译器,我们将一窥PHP未来的发展蓝图。
|
2天前
|
PHP
如何在PHP中创建一个自定义的观察者类?
【7月更文挑战第2天】如何在PHP中创建一个自定义的观察者类?
5 0
|
2天前
|
PHP
PHP中,你可以使用class关键字来定义一个类
【7月更文挑战第2天】PHP中,你可以使用class关键字来定义一个类
7 0
|
2天前
|
安全 编译器 测试技术
PHP 8新特性深度解析及其对现代Web开发的影响
本文旨在深入探讨PHP 8的新增特性及其在现代Web开发中的应用与影响。通过分析PHP 8引入的类型系统、性能改进、语言结构更新等关键变化,文章将展示这些新特性如何提升代码质量、加快执行速度,以及简化开发流程。引用权威数据和案例研究,结合科学方法论,本文将论证PHP 8为开发者带来的具体益处,并预测其对未来Web技术趋势的潜在影响。