news 2026/6/9 21:12:01

buuctf系列解题思路祥讲--[ZJCTF 2019]NiZhuanSiWei1——文件包含漏洞和伪协议的利用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
buuctf系列解题思路祥讲--[ZJCTF 2019]NiZhuanSiWei1——文件包含漏洞和伪协议的利用

1、解题思路

题目是一个源码,分析代码

得目标分别接收text,file,password三个参数,我们首先要满足file_get_contents($text,'r')==="welcome to the zjctf",所以

构造第一个payload:

text=data://text/plain,welcome to the zjctf,这里可能有人会疑惑为什么我们要用伪协议来写这个字段而不直接写text=该字段呢,因为题目用的file_get_contents函数作用是读取$text对应的 “文件资源” 的内容,而不是直接读取$text变量的值。所以我们借用伪协议把字符串伪装成文件资源。

构造第二个payload:

然后看到file不能包含flag,因为被正则匹配了,但是看到注释的useless文件,猜测这个可能是突破,就想到有可能是被执行了,所以想到用filter伪协议,这个伪协议会绕过 PHP 的直接解析执行能直接获取文件的源码

file=php://filter/read=convert.base64-encode/resource=useless.php

然后我们先输入这俩个payload可以得到base64编码后的useless.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"); // 必须返回字符串 } } }

如果当前对象file属性存在输出,‘你很接近了,加油’???噢噢噢噢,看这里的flag提示和tostring魔术方法自动执行输出当前的file属性那这里应该就是利用password反序列化输出file=flag.php,那我们就在本地序列化一下得到序列化字符“O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}”(记得赋予file属性)

输入payload得到这么个玩意(这里可能会有人疑惑为什么file变回useless.php。。。因为使用filter伪协议的话,该文件不会被执行,会影响输出结果,所以就默认useless好了)

页面显示我们已经找到他了,但是没有值,应该是隐藏了,检查源代码成功发现flag值

2、涉及知识点

主要是file_get_contents是读取对应的 “文件资源” 的内容

伪协议:data&filter

HP封装伪协议之php流filter,关键功能是在读取文件内容时对数据进行预处理(比如编码),这个过程会绕过PHP的直接解析执行能直接获取文件的源码

基本格式如下: php ://filter/[过滤方式]/[过滤器]/resource=[目标文件]

data:// 伪协议的核心是将数据直接嵌入到 URL / 请求中,无需依赖外部文件, data:// 伪协议的核心是将字符串 “伪装成文件资源”

基本格式如下:data://(<MIME类型>)(;base64),<数据内容>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 19:12:39

MySQL JDBC驱动终极指南:8.0.16版本快速上手

想要在Java项目中轻松连接MySQL数据库吗&#xff1f;MySQL 8.0.16 JDBC驱动就是你的最佳选择&#xff01;本指南将带你从零开始&#xff0c;一步步掌握这个强大工具的配置和使用技巧。&#x1f3af; 【免费下载链接】MySQL8.0.16版本JDBC驱动Jar包下载 本仓库提供 MySQL 8.0.16…

作者头像 李华
网站建设 2026/6/10 7:51:22

【Redis】一篇文章详解Redis

Redis 详细知识指南 一、Redis 是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的、高性能的键值对存储数据库。它由 Salvatore Sanfilippo 于 2009 年创建&#xff0c;现在是最受欢迎的 NoSQL 数据库之一。 1.1 核心特征 Re…

作者头像 李华
网站建设 2026/6/9 20:35:12

电商工具赋能达人管理与精准营销实战指南

电商人必看 达人营销效率提升300%的秘密武器 在达人合作越来越卷的当下&#xff0c;小青苔达人营销正以"系统化达人管理数据驱动营销决策"的组合拳&#xff0c;重构着品牌与达人合作的效率逻辑。本文将深度拆解该工具四大核心功能&#xff0c;揭秘电商人手中的"…

作者头像 李华
网站建设 2026/6/10 16:37:40

5分钟学会使用OpenVINO Notebooks:从零开始的AI推理实战指南

5分钟学会使用OpenVINO Notebooks&#xff1a;从零开始的AI推理实战指南 【免费下载链接】openvino_notebooks openvino_notebooks: 这是OpenVINO Toolkit的Jupyter笔记本集合&#xff0c;提供了一系列关于深度学习模型推理、模型训练和实时演示的交互式教程和示例。 项目地址…

作者头像 李华
网站建设 2026/6/9 19:53:16

本科论文答辩难吗? 虎贲等考AI智能写作:https://www.aihbdk.com/

本科论文答辩作为大学学业的收官之战&#xff0c;一直是毕业生关注的焦点。“答辩难吗&#xff1f;” 这个问题没有绝对答案&#xff0c;它既不是无法逾越的鸿沟&#xff0c;也并非轻易就能通关的 “走过场”。其难度本质上取决于论文质量、准备程度与应变能力的综合表现&#…

作者头像 李华
网站建设 2026/6/10 15:31:25

Flink SQL 的 LIMIT 子句语义、坑点与实战技巧

一、LIMIT 的官方定义到底说了什么&#xff1f; 先回顾一下你贴的官方文档&#xff08;Batch 部分&#xff0c;意译一下&#xff09;&#xff1a;LIMIT 子句用于约束 SELECT 语句返回的行数&#xff1b;一般会和 ORDER BY 一起使用&#xff0c;以确保结果是确定性的&#xff08…

作者头像 李华