[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,游戏结束~

相关推荐
折翼的恶魔6 分钟前
前端学习之样式设计
前端·css·学习
IT_陈寒25 分钟前
JavaScript性能优化:3个被低估的V8引擎技巧让你的代码提速50%
前端·人工智能·后端
云飞云共享云桌面30 分钟前
SolidWorks服务器多人使用方案
大数据·运维·服务器·前端·网络·电脑·制造
Algebraaaaa32 分钟前
Qt中的字符串宏 | 编译期检查和运行期检查 | Qt信号与槽connect写法
开发语言·c++·qt
Red Car32 分钟前
javascript 性能优化实例一则
开发语言·javascript·ecmascript
友友马33 分钟前
『 QT 』Hello World控件实现指南
开发语言·qt
艾小码37 分钟前
从Hello World到变量数据类型:JavaScript新手避坑指南
前端·javascript
一只学java的小汉堡1 小时前
Java 面试高频题:HashMap 与 ConcurrentHashMap 深度解析(含 JDK1.8 优化与线程安全原理)
java·开发语言·面试
huohaiyu2 小时前
Hashtable,HashMap,ConcurrentHashMap之间的区别
java·开发语言·多线程·哈希
街尾杂货店&2 小时前
css word-spacing属性
前端·css