当前位置: 首页 > ai >正文

BUUCTF[ACTF2020 新生赛]Include 1题解

BUUCTF[ACTF2020 新生赛]Include 1题解

  • 题目分析:
  • 知识准备:
    • `php://filter` 过滤器参数说明
    • 常用过滤器功能对照表
  • 开始解题:
    • 原理解析
    • 构造payload
  • 总结

题目分析:

生成靶机,打开网址,查看源码,抓包查看有无隐藏信息(公式化)。
点击tips:
tips
发现一段留言:Can you find out the flag?,同时我们观察url

http://163da250-9a0d-4ec7-9002-49df5c87e38b.node5.buuoj.cn:81/?file=flag.php

结合题目标题以及url中的?file=flag.php,几乎就可以断定有文件包含漏洞了。

知识准备:

在开始解题之前,我们需要了解PHP伪协议的知识:
PHP伪协议通过替换数据报的头部信息来欺骗网络协议。

以下是关于 php://filter 参数的过滤器整理表格:

php://filter 过滤器参数说明

参数类型过滤器名称作用
必须项resource=<要过滤的数据流>指定待筛选过滤的数据流(必填)
可选项(读链)read=<过滤器1|过滤器2>读链设置一个或多个过滤器,用管道符 | 分隔
可选项(写链)write=<过滤器1|过滤器2>写链设置一个或多个过滤器,用管道符 | 分隔
默认链<过滤器1|过滤器2>未加前缀的过滤器列表将根据操作类型(读/写)自动应用到对应链

常用过滤器功能对照表

过滤器类型过滤器名称作用
字符串过滤器string.rot13等同于 str_rot13(),进行 ROT13 字符变换
string.toupper等同于 strtoupper(),将字符串转为大写
string.tolower等同于 strtolower(),将字符串转为小写
string.strip_tags等同于 strip_tags(),移除 HTML/PHP 标签
转换过滤器convert.base64-encode等同于 base64_encode(),进行 Base64 编码
convert.base64-decode等同于 base64_decode(),进行 Base64 解码
convert.quoted-printable-encode将 8-bit 字符串编码为 Quoted-Printable 格式(可打印字符)
convert.quoted-printable-decode将 Quoted-Printable 格式解码为 8-bit 字符串

开始解题:

原理解析

后端代码大概可能是下面这样:

include($_GET['file'])

如果我不使用PHP伪协议,读取flag.php之后,include()就会自动执行其中的PHP代码,这样就无法在网站前端阅读到完整的源码。但是如果我们使用php://filter,对文件中的命令进行一些处理,就可以获得完整的源码。

构造payload

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

payload中的每一个过滤器都能从上面的表格中找到,payload实现了把flag.php中的所有字符转换为BASE64编码,以逃脱include()执行php代码,获得完整源码
base64

BASE64解码得到:

<?php
echo "Can you find out the flag?";
//flag{5b7c82b0-4473-42a3-bb8c-068dcd50a1d0}

FLAG被注释掉了,但是通过PHP伪协议找到了。

总结

本题的提示还是非常明显的,没有绕弯,主要考察了CTFer对文件包含漏洞和PHP伪协议的理解,总的来说不是很难适合初学者(比如我)。

http://www.xdnf.cn/news/10592.html

相关文章:

  • NVM,Node.Js 管理工具
  • 【Delphi】接收windows文件夹中文件拖拽
  • (Python网络爬虫);抓取B站404页面小漫画
  • Python-matplotlib库之核心对象
  • 设计模式——备忘录设计模式(行为型)
  • Kotlin 中 companion object 扩展函数详解
  • Java连接Redis和基础操作命令
  • 【Linux】Ubuntu 20.04 英文系统显示中文字体异常
  • 什么是线程上下文切换?
  • 【SpringBoot】| 接口架构风格—RESTful
  • 概率统计:AI大模型的数学支柱
  • Linux--进程概念
  • 【redis实战篇】第七天
  • 03- javascript的运行原理
  • 启动metastore时报错MetaException(message:Version information not found in metastore
  • 海底三维可视化平台
  • 使用Python进行函数作画
  • azure devops 系列 - 常用的task
  • C++面向对象编程:类与对象详解
  • CppCon 2014 学习:(Costless)Software Abstractions for Parallel Architectures
  • 已有的前端项目打包到tauri运行(windows)
  • Python应用range函数初解pro
  • arc3.2语言sort的时候报错:(sort < `(2 9 3 7 5 1)) 需要写成这种:(sort > (pair (list 3 2)))
  • EXCEL--累加,获取大于某个值的第一个数
  • DeepSeek模型高级应用:提示工程与Few-shot学习实战指南
  • 【深度学习-Day 21】框架入门:神经网络模型构建核心指南 (Keras PyTorch)
  • MySQL中的字符串分割函数
  • Python 训练营打卡 Day 33-神经网络
  • tex中的表格4:自动表格宽度自动换行tabularx宏包
  • 结构化控制语言(SCL) 与梯形图(LAD)相互转换的步骤指南