【网络安全/CTF】unseping 江苏工匠杯
该题考察序列化反序列化及Linux命令执行相关知识。
题目
<?php
highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_user_func_array(array($this, $this->method), $this->args);}} function ping($ip){exec($ip, $result);var_dump($result);}function waf($str){if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {return $str;} else {echo "don't hack";}}function __wakeup(){foreach($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}
}$ctf=@$_POST['ctf'];
@unserialize(base64_decode($ctf));
?>
开门见山给出代码,考察代码分析能力。
首先,代码定义了一个名为ease的类,其中__construct()接收两个参数$method和$args,并将它们赋值给对应的属性。__destruct()在对象销毁时自动调用。它首先检查$method是否在可调用的方法数组中,如果是,则使用call_user_func_array()函数调用ping()方法,并将$args作为参数传递进去。
方法ping($ip)接收一个参数$ip,使用exec()函数执行$ip命令,并将结果存储在$result数组中,最后通过var_dump()打印出来。
方法waf($str)用于简单的Web应用防火墙(WAF)功能。它使用正则表达式检测是否包含一些特定的关键字,如|、&、;、/、cat、flag、tac、php、ls等。如果不包含这些关键字,则返回原始字符串;否则,输出"don’t hack"。
__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。它遍历$args数组,并对其中的每个元素调用waf()方法进行过滤。
也就是说,代码通过接收名为ctf的POST参数,对其进行base64解码并反序列化。
那么思路就很清晰了:构造可进行命令执行的ping命令,并经过序列化、base64加密后赋值给参数ctf。由于ctf在解码后会被反序列化,而反序列化时会执行wakeup魔术方法,即反序列化时会对ping命令中的关键字进行过滤来限制命令执行。所以我们可以使用双引号闭合等的方式进行绕过。
查看目录文件:

结果如下:

接下来就是访问flag_1s_here,由于flag被过滤,用双引号绕过。空格被过滤,用IFS进行绕过。(在PHP中,${}语法是用于取变量的值,并可以在花括号中使用任意的表达式,IFS默认为空格)
构造POC后回显如下:

传参:

那么接下来要做的就是打印php中的内容
将
cat flag_1s_here /flag_831b69012c67b35f.php
变化为
c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp
$()用于执行命令并获取其输出结果,这里将 ASCII 码为 57 的字符 / 通过 printf 命令输出。

传参:

相关文章:
【网络安全/CTF】unseping 江苏工匠杯
该题考察序列化反序列化及Linux命令执行相关知识。 题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($thi…...
鼠标悬浮在树组件节点上展示当前节点名称
方法一:使用CSS样式 在树组件的模板中,为每个节点的外层元素绑定一个类名,例如"tree-node",并设置一个自定义属性来保存节点名称。 <el-tree v-if"showCheck" ref"treeRef" :data"treeDa…...
构建创新学习体验:企业培训系统技术深度解析
企业培训系统在现代企业中发挥着越来越重要的作用,它不仅仅是传统培训的延伸,更是技术创新的结晶。本文将深入探讨企业培训系统的关键技术特点,并通过一些简单的代码示例,展示如何在实际项目中应用这些技术。 1. 前端技术&#…...
云计算:现代技术的基本要素
众所周知,在儿童教育的早期阶段,幼儿园都会传授塑造未来行为的一些基本准则。 今天,我们可以以类似的方式思考云计算:它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…...
(1)(1.11) SiK Radio v2(一)
文章目录 前言 1 概述 2 特点 3 状态LED灯 前言 SiK 遥测无线电是在自动驾驶仪和地面站之间建立遥测连接的最简单方法之一。本文提供了如何连接和配置无线电的基本用户指南。 3DR Radio v2(SiKRadio 的消费者版本) !Note 本页面以前的…...
视频号视频怎么保存到手机相册?
在微信视频号中看到喜欢的视频,想要缓存下载到手机,却怎么也找不到办法。很多朋友会选择去录屏,但保存下来的视频实在是不美观,而且费时费力!着实没必要!下面给大家推荐一款亲测有效的微信视频号视频下载方…...
【svn】win11最新svn每天自动化定时update、commit,隐藏窗口,定时脚本编写
本文使用schtasks结合bat脚本实现全自动svn update以及commit操作。执行时隐藏cmd窗口,全自动后台执行。 执行脚本 写脚本参考了网上很多文章,但是这些文章的方法都有问题或者已经失效,比如: 老版本的bat脚本,使用v…...
【YOLO系列】YOLOv3代码详解(四):模型脚本model.py
前言 以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。 本文仅对YOLOV3代码中关键部分进行了注释,未掌握基础代码的铁汁可以自己百度一下。 若文中内容有误,希望大家…...
Elasticsearch可视化平台Kibana [ES系列] - 第498篇
历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 全…...
Python深度学习029:pytorch中常用的模块或方法
PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…...
MongoDB创建和查询视图(二)
目录 基于$lookup创建关联查询视图 创建带有默认字符序的视图 字符序 创建视图 视图中的字符序 基于$lookup创建关联查询视图 基于$lookup命令,通过集合的关联查询,用户可以创建基于两个集合的视图并查询视图数据。应用在构建查询时,无需…...
【MYSQL】MYSQL 的学习教程(七)之 慢 SQL 优化思
1. 慢 SQL 优化思路 慢查询日志记录慢 SQLexplain 分析 SQL 的执行计划profile 分析执行耗时Optimizer Trace 分析详情确定问题并采用相应的措施 1. 慢查询日志记录慢 SQL 如何定位慢SQL呢? 我们可以通过 慢查询日志 来查看慢 SQL。 ①:开启慢查询日志…...
iOS - 真机调试的新经验
文章目录 获取真机 UDIDPlease reconnect the device.iOS 开发者模式Fetching debug symbols 很久没有在真机运行 iOS 测试了,今天帮忙调试,发现很多东西都变了,有些东西也生疏了,在这里记录下。 获取真机 UDID 创建Profile 需要…...
thinkphp6.0的workerman在PHP8.0下报错
一、我先升级了thinkphp6.0到最新版本: composer update topthink/framework二、结果提示我composer版本过低,需要升级到2,于是我又升级了composer composer self-update 三、我又升级了workerman: composer require topthink/think-work…...
SQL语句分类
关系分类 SQL区分为三类关系 表 在数据库中存储,可以对其进行增删改查 视图 通过计算定义的关系,并不在数据库中存储,只在需要的使用进行构造 临时表 在执行查询或更新时由SQL程序临时构造的,处理结束后就会删除 语言分类 数据查询…...
C# Onnx yolov8 pokemon detection
目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8 pokemon detectio 效果 模型信息 Model Properties ------------------------- date:2023-12-25T17:55:44.583431 author:Ultralytics task:detect license:AGPL-3.0 h…...
Flink电商实时数仓(六)
交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl,通过Interval join实现左右流的状态管理获取下单明细数据…...
本地部署Jellyfin影音服务器并实现远程访问内网影音库
文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…...
【React Native】第一个Android应用
第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…...
解决IOS transform rotate后文字无法显示,backface-visibility导致@click事件失效
问题一:IOS transform rotate后文字无法显示 网上搜到可以用backface-visibility:hidden来解决,这样做文字是出来了,但是click事件无效了。 问题二:backface-visibility导致click事件失效 在Vue中使用backface-visibility和cli…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
