[WMCTF2020]Make PHP Great Again 2.01

embedded/2024/10/19 1:28:51/

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

这不用审吧,啊喂.

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

require_once() 

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

require_once 和 include_once 机制在处理文件包含时,是基于文件的绝对路径来进行“已包含”检查的。这意味着,不论文件是通过直接路径、相对路径、符号链接(软链接)还是硬链接被引用,只要这些引用最终解析到同一个文件的绝对路径上,require_once 或 include_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,游戏结束~ 


http://www.ppmy.cn/embedded/118459.html

相关文章

PHP isset() 和 empty() 区别

这两个函数在PHP编程中经常用于检查变量是否已设置或是否为空&#xff0c;但它们各自的用途和行为有所不同。 isset() 函数 isset()函数用于检测变量是否已设置并且非NULL。如果指定变量存在并且值不是NULL&#xff0c;则返回true&#xff1b;否则返回false。这个函数可以检查…

人工智能与机器学习原理精解【22】

文章目录 人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;ANN 结构一、按网络拓扑结构分类二、按网络内部信息流向分类三、神经元与连接四、激活函数与损失函数五、学习与训练 人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;的工作…

区块链行业DDoS防护:直面DDoS攻击

作为区块链行业的一员&#xff0c;我们经常需要面对一系列严峻的安全挑战&#xff0c;其中DDoS攻击无疑是最为棘手的问题之一。这些攻击不仅威胁着区块链网络的稳定性和可用性&#xff0c;还可能导致用户信任度下降&#xff0c;甚至影响整个行业的健康发展。 区块链行业DDoS防…

恶意AI大模型的兴起将改变网络安全

LLM 的恶意版本&#xff08;如 ChatGPT 的黑暗变体&#xff09;的兴起正在通过使用更复杂和自动化的攻击来升级网络战。 这些模型可以生成令人信服的网络钓鱼电子邮件、传播虚假信息并制作有针对性的社会工程消息。 所有这些非法功能都对在线安全构成了重大威胁&#xff0c;并加…

[半导体检测-7]:半导体检测技术:无图案晶圆检测与图案晶圆检测

前言&#xff1a; 半导体检测技术中&#xff0c;无图案晶圆检测与图案晶圆检测是两种重要的检测方式&#xff0c;它们在检测原理、应用场景及挑战等方面存在显著差异。以下是对这两种检测技术的详细分析&#xff1a; 一、无图案晶圆检测 1. 检测原理 无图案晶圆检测主要关注…

【FastAPI】使用FastAPI和Redis实现实时通知(SSE)

在当今快速发展的Web应用程序中&#xff0c;实时通知已成为用户体验的重要组成部分。无论是社交媒体更新、消息通知&#xff0c;还是系统状态提醒&#xff0c;实时数据推送可以极大地提升用户互动性。本文将详细介绍如何使用FastAPI和Redis实现Server-Sent Events (SSE) 来推送…

Redis的持久化机制

Redis的持久化机制主要有两种&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09;。这两种机制各有特点和适用场景。 1. RDB&#xff08;Redis Database&#xff09; 工作原理&#xff1a;RDB是将Redis在某个时刻的内存数据…

C++标准库双向链表 list 中的insert函数实现。

CPrimer中文版&#xff08;第五版&#xff09;&#xff1a; //运行时错误&#xff1a;迭代器表示要拷贝的范围&#xff0c;不能指向与目的位置相同的容器 slist.insert(slist.begin(),slist.begin(),slist.end()); 如果我们传递给insert一对迭代器&#xff0c;它们不能…