news 2026/9/14 10:32:28

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/9/14 2:01:31

【高并发场景下的秘密武器】:ASP.NET Core 9 WebSocket压缩协议实战落地

第一章&#xff1a;ASP.NET Core 9 WebSocket压缩协议概述在现代实时Web应用开发中&#xff0c;WebSocket已成为实现双向通信的核心技术。随着数据交互频率的提升&#xff0c;网络传输效率成为性能优化的关键点之一。ASP.NET Core 9 引入了对 WebSocket 压缩协议的原生支持&…

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

RAG实践指南:一文搞定大模型RAG过程

RAG是什么&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;, 一种AI框架&#xff0c;将传统的信息检索系统(例如数据库)的优势与生成式大语言模型(LLM)的功能结合在一起。不再依赖LLM训练时的固有知识&#xff0c;而是在回答问…

作者头像 李华
网站建设 2026/9/13 18:59:33

一份全面的AI_Agent知识地图

本文是一篇关于AI Agent的全面综述&#xff0c;系统介绍了AI Agent从诞生到应用的完整框架。内容涵盖配置文件定义&#xff08;静态与动态&#xff09;、记忆机制&#xff08;短期与长期&#xff09;、计划与决策能力、行动执行、多智能体协作模式、自我进化机制、测试评估方法…

作者头像 李华
网站建设 2026/9/14 10:40:36

软件、硬件的兼容性的测试,你知多少?

对于基于计算机平台的软件,在测试过程中必须考虑软、硬件的兼容性,在设计测试用例的过程中必须考虑数据转换或转移的问题,应该尽力发现其可能带来的错误。不仅是基于计算机平台的软件,对于嵌入式软件也一样,在软件升级时,也需要考虑硬件平台的兼容性。一个软件具有良好的…

作者头像 李华
网站建设 2026/9/14 1:24:57

【翻译】【SOMEIP-SD】Page37 - Page39

文章目录5.1.2.4.4 IPv6 Endpoint Option5.1.2.4.4 IPv6 Endpoint Option SOME/IP-SD 使用IPv6 Endpoint Option去标记一个Endpoint。Endpoint包含发送者的IP地址、传输协议&#xff08;TCP/UDP&#xff09;、Port号。Port号同时适用与Event和Notification Event [PRS_SOMEIP…

作者头像 李华
网站建设 2026/9/14 19:25:26

Raft算法(二)

日志项的结构与理解 日志项是Raft中存储数据的基本单元&#xff0c;由以下三部分组成&#xff1a; 指令&#xff08;Command&#xff09;&#xff1a;客户端请求的操作指令&#xff0c;由状态机执行。索引值&#xff08;Log Index&#xff09;&#xff1a;连续递增的整数&#…

作者头像 李华