[WMCTF2020]Make PHP Great Again 2.01

又是php代码审计,开始吧.

这不用审吧,啊喂.

意思就是我们要利用require_once()函数和传入的file的value去读取flag的内容.,貌似呢require_once()已经被用过一次了,直接读取还不行,看一下下面的知识点.

require_once()

require_once() 是 PHP 中的一个非常有用的函数,用于在脚本中引入(包含)另一个文件。与 require() 函数类似,require_once() 在执行时也会尝试包含并运行指定的文件。但是,require_once() 函数有一个重要的区别:它会在尝试包含文件之前检查该文件是否已经被包含(或引入)过了。如果文件已经被包含过了,那么 require_once() 将不会再次包含该文件,从而避免了函数、类、变量等的重复定义问题。

require_onceinclude_once 机制在处理文件包含时,是基于文件的绝对路径来进行"已包含"检查的。这意味着,不论文件是通过直接路径、相对路径、符号链接(软链接)还是硬链接被引用,只要这些引用最终解析到同一个文件的绝对路径上,require_onceinclude_once 就会认为该文件已经被包含过,从而避免重复包含

/proc/self/root <=> /

在Linux系统中,/proc 是一个虚拟文件系统,它提供了一个接口来访问内核数据结构以及其他系统信息。/proc 文件系统中的一个特别重要的目录是 /proc/self,它是一个非常特殊的符号链接,指向访问它的进程的 /proc/[pid]/ 目录,其中 [pid] 是该进程的进程ID(PID)。

/proc/self 的特性

  • /proc/self 是一个指向当前进程自己的 /proc/[pid]/ 目录的符号链接。这意味着,无论哪个进程访问 /proc/self,它都会看到与自己相关的 /proc/[pid]/ 目录的内容。
  • 这个特性在编写需要获取当前进程信息的程序时特别有用,因为无论程序的PID是多少,它都可以通过访问 /proc/self 来获取这些信息,而无需首先查询或传递PID。

/proc/self/root 的含义

  • /proc/self/root/proc/self/ 目录下的一个特殊文件,它本身是一个符号链接,指向了根文件系统的挂载点。在大多数情况下,这个链接直接指向 /,即根目录。
  • 然而,在容器技术(如Docker)中,/proc/self/root 的指向可能会有所不同。在容器内部,/proc/self/root 可能不指向宿主机的根目录(/),而是指向容器内部的根文件系统,这取决于容器是如何配置和运行的。
  • 这种设计允许容器内的进程能够感知到自己运行在一个受限的、隔离的环境中,并且仍然可以通过 /proc/self/root 访问到这个环境的根文件系统。

总之,/proc/self/proc/self/root 提供了访问当前进程信息和根文件系统信息的便捷方式,同时也支持了Linux系统中复杂的容器化技术。

所以我们不能直接用伪协议去读取flag的内容,我们需要一点小小的技巧,就像人力有时尽一样,require_once()的匹配内容是有限的,咱们直接把require_once()累死来绕过,多让他读取几次总会有个极限的,而为了保证能够正确的读取到flag,填充的内容就为/proc/self/root.

目标明确开始构造payload.

复制代码
http://f14010d8-c800-46aa-9b4c-e3cfacce9ece.node5.buuoj.cn:81/?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

在进行一下base64解码,得到flag,游戏结束~

相关推荐
方也_arkling9 分钟前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
卢锡荣11 分钟前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
毕设源码-朱学姐12 分钟前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
A懿轩A24 分钟前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python
2301_8112329825 分钟前
低延迟系统C++优化
开发语言·c++·算法
web打印社区26 分钟前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
我能坚持多久28 分钟前
D20—C语言文件操作详解:从基础到高级应用
c语言·开发语言
橘子师兄44 分钟前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
RFCEO1 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
上天_去_做颗惺星 EVE_BLUE1 小时前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境