[ZJCTF 2019]NiZhuanSiWei1

news2024/11/23 1:00:49

拿到是一段php代码

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);     //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

file_get_contents() 把整个文件读入一个字符串中。并且必须等于welcome to the zjctf,如果满足就会以一级标题的形式输入数据

内层if语句是一个正则表达式,如果file变量中有flag字符就直接退出程序,反之就包含file变量,继续将password进行反序化,输出。

根据提示信息,可知需要三个参数:text,file,password,且 text 的文本内容也已经限定,那么桌面建立一个文本文档,内容为:welcome to the zjctf,尝试用PHP伪协议 file 协议读取,发现没有反应

那还有一个GET写入方法,data://协议

触发正确回显说明方法正确

接着构造file,因为内层if语句对file进行了正则匹配,不能存在flag

这时要注意一下包含语句右侧注释了一个usless.php

访问后是空白页面,想到了读取源码的filter://协议

成功获取源码,最后就就是进行base64解密,得到一串PHP代码

看到注释的flag.php,继续访问,在网页源码中得到提示:现在还不能给我flag,说明方向是对的,已经走到最后一步了

<?php  

class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
?>  

源码中定义了一个名叫flag的类,类中包含一个PHP魔术方法

__tostring方法的含义是:当一个对象被当做字符串调用的时候,就会自动执行

刚好在我们上面的源码中$password变量在被序列化后会执行echo,也就是被当做字符串调用

所以我们可以先利用file传参包含useless.php文件,再利用pssword变量对Flag类进行整个序列化的操作,最终达到输出flag的目的

<?php  

class Flag{  //flag.php  
    public $file = 'flag.php';  

}  
$a = serialize(new Flag);
echo urlencode($a)
?>  

构造序列化,将Flag类中的file赋值为flag.php

这样当file_get_contents读取的时候就会直接读取flag.php

将序列化并且url编码后的数据赋给password,最后查看页面回显了Flag类中的数据,得知执行成功,最后查看网页源码获取flag

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

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

相关文章

【高端设计】DDR4设计方法与仿真分析(一)

本文主要介绍了DDR4设计方法与仿真分析&#xff0c;并示范SIwave如何做DDR4的瞬时眼图、SSN、on-die de-cap影响、DBI耗电分析与规范性测试。 1.DDR4和DDR3的区别 1.1 DDR4传输速度与带宽增加 DDR3 1600/1866MHz -> DDR4 1866/3200MHz DDR3采用多点分支单流架构&#xff…

【电路原理学习笔记】第2章:电压、电流和电阻:2.7基本电路的测量

第2章&#xff1a;电压、电流和电阻 2.7基本电路的测量 用来测量电压的仪器是电压表&#xff0c;用来测量电流的仪器是电流表&#xff0c;用来测量电阻的仪器是欧姆表。通常&#xff0c;这3种仪器被集成到一个称为万用表的仪器中。在万用表中&#xff0c;可以通过开关选择特定…

Python接收摄像头输出的YCbYCr数据并显示图像(附Python源码)

前言 摄像头用的OV的2640&#xff0c;输出YCbYcr的十六进制数据&#xff0c;数据保存成字符串形式的hex文件&#xff0c;之后用Python读取文件&#xff0c;并显示图片。 文章先搭建Python环境&#xff0c;之后编程实现十六进制数据显示图片的功能。 十六进制文件格式如下图&am…

el-table合计样式修改,增加图片

这里的表格用的是el-table组件。如上图&#xff0c;在底部合计的两个字段上增加图片。合计用的是:summary-method"getSummaries"。增加图片的原理其实就是获取这个单元格的dom元素定位&#xff0c;然后在这个元素里面增加 img元素&#xff0c;还可以设置样式。如下图…

Django之常用组件

一、分页器组件 class Pagination(object):def __init__(self,current_page,all_count,per_page_num2,pager_count11):"""封装分页相关数据:param current_page: 当前页:param all_count: 数据库中的数据总条数:param per_page_num: 每页显示的数据条数:par…

峰会来袭 | CAD模型转换工具选择的难点和关键点解答

作为世界顶尖的3D软件开发SDK和CAD模型转换工具——HOOPS Exchange已问世十多年&#xff0c;深受开发者好评&#xff0c;并在工业测量、机械加工、造船设计等领域都有广泛的应用。 本次峰会将围绕CAD软件造型技术的多样性、CAD模型数据解析的难点、3D模型转换的经典问题等&…

曝光调整和曝光融合论文粗读

曝光调整论文调研 M. Afifi, K. G. Derpanis, B. Ommer and M. S. Brown, “Learning Multi-Scale Photo Exposure Correction,” 2021 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), Nashville, TN, USA, 2021, pp. 9153-9163, doi: 10.1109/CVPR4…

开放式耳机什么牌子性价比好,这些高颜值蓝牙耳机分享给你

入耳式耳机在运动过程中会与耳道产生摩擦&#xff0c;产生咀嚼音、摩擦音等杂音&#xff0c;会让耳朵难受&#xff0c;听音也会受到影响&#xff0c;特别是像边看电视剧边吃零食等情况&#xff0c;会很影响体验感&#xff0c;所以开放式耳机不入耳的设计完全处理了这一问题&…

卷积神经网络| 猫狗系列【AlexNet】

首先&#xff0c;搭建网络&#xff1a; AlexNet神经网络原理图&#xff1a; net代码&#xff1a;【根据网络图来搭建网络&#xff0c;不会的看看相关视频会好理解一些】 import torchfrom torch import nnimport torch.nn.functional as Fclass MyAlexNet(nn.Module): def…

Linux系统之neofetch工具的基本使用

Linux系统之neofetch工具的基本使用 一、neofetch工具介绍1.1 neofetch简介1.2 neofetch特点 二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本 三、安装neofetch工具3.1 配置yum仓库3.2 安装neofetch3.3 查看neofetch版本 四、neofetch工具的基本使用4.1 直接使用neofet…

quilt data-Working with the Catalog

Quilt Catalog 是 Quilt 的第二部分。它提供了一个在您的 S3 存储桶上的界面&#xff0c;将 Quilt 的数据包和搜索等功能带到了 Web 界面上。 请注意&#xff0c;您可以在不使用 Quilt Catalog 的情况下使用 Quilt Python API&#xff0c;但它们是设计为配合使用的。 简要介绍…

【实现openGauss5.0企业版一主一备搭建部署】

【实现openGauss5.0企业版一主一备搭建部署】 &#x1f53b; 前言&#x1f53b; 一、安装前准备&#x1f530; 1.1 openGauss安装包下载&#x1f530; 1.2 安装环境准备⛳ 1.2.1 硬件环境要求⛳ 1.2.2 软件环境要求⛳ 1.2.3 软件依赖要求⛳ 1.2.4 修改 hosts 和 hostname&#…

【react】创建启动react项目和跨域代理:

文章目录 1、创建启动react项目&#xff1a;2、跨域代理&#xff1a;【1】文档&#xff1a;[https://create-react-app.dev/docs/proxying-api-requests-in-development/](https://create-react-app.dev/docs/proxying-api-requests-in-development/)【2】src/setupProxy.js: 1…

阿姆斯特丹大学Max Welling教授-深度学习和自然科学

目录 简介 AI4Science & Science4AI 深度学习简介 AI4Science Science4AI 总结/结束语 参考 简介 人工智能一直与自然科学有着深厚的联系。 人工神经网络最初被认为是生物神经网络的抽象&#xff0c;许多后续算法&#xff08;例如强化学习&#xff09;也是如此。 神经…

springcloud actuator暴露端点漏洞修复

前段时间网络安全的同事突然通知系统漏洞&#xff0c;swagger漏洞和暴露多余端点等&#xff0c;可能会泄露信息。刚开始只是修改了相关配置。如下&#xff1a; 更改config配置 management:security:enabled: true security:user:name: xxxpassword: xxxbasic:enabled: trueen…

配置tensorflow1.15版本遇到的问题:conda环境管理/tensorflow历史版本下载/pycharm中如何使用conda中的虚拟环境

0、前言&#xff1a; 我之前在做配置环境&#xff0c;或者不懂的操作时&#xff0c;总是遇到问题在csdn或者网上搜就行了&#xff0c;然后解决问题之后&#xff0c;也不知道期间搜了哪些知识。也记不住一些修改的地方&#xff0c;这就导致&#xff0c;我十分担心好不容易搭好的…

spring系列-SpringCloud

SpringCloud概述 微服务概述 什么是微服务 目前的微服务并没有一个统一的标准&#xff0c;一般是以业务来划分 将传统的一站式应用&#xff0c;拆分成一个个的服务&#xff0c;彻底去耦合&#xff0c;一个微服务就是单功能业务&#xff0c;只做一件事。 与微服务相对的叫巨石 …

“提高个人生产力:思维导图在时间管理和计划中的应用“

在高效成为当今时代职场人高频谈论的一个词后&#xff0c;时间管理和计划的重要性也日渐显现。一个好的时间管理和计划可以在不知不觉中有效帮助我们更加合理的安排时间&#xff0c;保证工作的有序进行和按时完成。通过合理的协调工作与休息之间的关系&#xff0c;避免我们浪费…

15、服务端实战:数据库工具封装

在了解完 NestJS 的基础配置之后&#xff0c;服务端的内容将引来一个比较重要的环节&#xff1a;数据库。 因为数据库的内容比较多&#xff0c;所以相关内容将分为两个章节来展开讨论&#xff1a; 数据库工具封装 - 将封装统一的数据库操作工具类&#xff0c;方便后期开发于集…

识别肿瘤内微生物的生物信息学工具—MEGA

谷禾健康 已有研究证明宿主微生物在癌症预防和治疗反应中的关键作用&#xff0c;了解宿主微生物和癌症之间的相互作用&#xff0c;可以推动癌症诊断和微生物治疗(即用微生物作为药物)。 然而肿瘤内微生物组数据通常是复杂的&#xff0c;想要厘清相互关系也是极为困难的&#xf…