欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

文件上传漏洞原理与实例测试

来源:本站整理 作者:佚名 时间:2016-07-23 TAG: 我要投稿

为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门。即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的。
0x01 为什么文件上传存在漏洞
上传文件的时候,如果服务器脚本语言,未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件,包括上传脚本文件。
如果是正常的PHP文件,对服务器则没有任何危害。
PHP可以像其他的编程语言一样,可以查看目录下的文件,查看文件中的吗内容,可以执行系统命令等。
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的PHP文件,从而控制整个网站,甚至是服务器。这个恶意的PHP文件,又被称为WebShell。
0x02 哪里存在文件上传漏洞
服务器配置不当
开源编辑器的上传漏洞
本地文件上传限制被绕过
过滤不严或被绕过
文件解析漏洞导致文件执行
文件路径截断
0x03 文件上传实例(本地测试)
裸体的文件上传
    文件信息
"utf-8">
"" enctype="multipart/form-data" method="POST" name="uploadfile">
    上传文件: "file" name="upfile" />
    "submit" value="上传" name="submit">
if (isset($_POST['submit'])) {
    var_dump($_FILES['upfile']);
    echo "文件名:".$_FILES['upfile']['name']."";
    echo "文件大小:".$_FILES['upfile']['size']."";
    echo "文件类型:".$_FILES['upfile']['type']."";
    echo "临时路径:".$_FILES['upfile']['tmp_name']."";
    echo "上传后系统返回值:".$_FILES['upfile']['error']."";
    echo "====================保存分各线========================";
    if ($_FILES['upfile']['error'] == 0) {
        if (!is_dir("./upload")) {
            mkdir("./upload");
        }
        $dir = "./upload/".$_FILES['upfile']['name'];
        move_uploaded_file($_FILES['upfile']['tmp_name'],$dir);
        echo "文件保存路径:".$dir."";
        echo "上传成功...";
        echo "图片预览:";
        echo ".$dir.">";
    }
}
 ?>

设置本地代理用Burp Suite 抓包,通过对比我们可以看到,PHP中的和分别对应数据包中和。
穿上下内衣的文件上传
    文件信息
"utf-8">
"" enctype="multipart/form-data" method="POST" name="uploadfile">
    上传文件: "file" name="upfile" />
    "submit" value="上传" name="submit">
if (isset($_POST['submit'])) {
    var_dump($_FILES['upfile']);
    echo "文件名:".$_FILES['upfile']['name']."";
    echo "文件大小:".$_FILES['upfile']['size']."";
    echo "文件类型:".$_FILES['upfile']['type']."";
    echo "临时路径:".$_FILES['upfile']['tmp_name']."";
    echo "上传后系统返回值:".$_FILES['upfile']['error']."";
    echo "====================保存分各线========================";
    $flag = 0;
    switch ($_FILES['upfile']['type']) {
        case 'image/jpeg':
            $flag = 1;
            break;
        default:
            die("文件类型错误.....");
            break;
    }
    if ($_FILES['upfile']['error'] == 0 && $flag ) {
        if (!is_dir("./upload")) {
            mkdir("./upload");

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载