正在阅读:

文件上传漏洞演示脚本之内容验证

6,753

前几天小弟博客更新了文件上传漏洞的各种验证绕过方法,今天终于到了最后一篇了,科普文到此结束,希望大家能学习到一点东西,继续支持小站。

关于文件上传过程中图像大小及相关信息检测,通常我们会使用getimagesize()函数,此函数会返回一个数组。


Array
(
[0] => 400
[1] => 362
[2] => 2
[3] => width="400" height="362"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)

演示代码:

<?php
/**
 * Created by 独自等待
 * Date: 14-1-22
 * Time: 下午10:12
 * Name: upload5.php
 * 独自等待博客:http://www.waitalone.cn/
 */
//文件上传漏洞演示脚本之内容验证
$uploaddir = 'uploads/';
if (isset($_POST['submit'])) {
    if (file_exists($uploaddir)) {
        //print_r($_FILES);
        $file_name = $_FILES['upfile']['tmp_name'];
        print_r(getimagesize($file_name));
        $allow_ext = array('image/png', 'image/gif', 'image/jpeg', 'image/bmp');
        $img_arr = getimagesize($file_name);
        //print_r($img_arr);
        $file_ext = $img_arr['mime'];
        if (in_array($file_ext, $allow_ext)) {
            if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {
                echo '文件上传成功,保存于:' . $uploaddir . $_FILES['upfile']['name'] . "\n";
            }
        } else {
            echo '此文件不允许上传' . "\n";
        }
    } else {
        exit($uploaddir . '文件夹不存在,请手工创建!');
    }
    //print_r($_FILES);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=gbk"/>
    <meta http-equiv="content-language" content="zh-CN"/>
    <title>文件上传漏洞演示脚本--内容验证实例</title>
<body>
<h3>文件上传漏洞演示脚本--内容验证实例</h3>

<form action="" method="post" enctype="multipart/form-data" name="upload">
    请选择要上传的文件:<input type="file" name="upfile"/>
    <input type="submit" name="submit" value="上传"/>
</form>
</body>
</html>

文件内容检测绕过方法:

使用getimagesize()函数检测,会判断文件是否是一个有效的图片文件,如果不是则会报错,我们可以使用文件头欺骗来绕过。

利用copy命令合成一个图片马,上传即可,如下图所示:

文件上传漏洞演示脚本

更高级的绕过

突破php 的imagecopyresampled 和imagecopyresized 实现图片马

Encoding Web Shells in PNG IDAT chunks

相关文章

文件上传漏洞演示脚本之js验证

文件上传漏洞演示脚本之MIME验证

文件上传漏洞演示脚本之目录验证

文件上传漏洞演示脚本之服务端扩展名验证

目前有:4条访客评论,博主回复3

  1. winpa01
    2014-02-04 02:06

    不错,你是我的偶像。。。 [/呲牙]

  2. PgHook
    2014-02-17 10:36

    首先表达一下,我对大牛的膜拜,好像这个上传有点问题啊!我试了木有成功啊,图片都木有上传成功。求指点下。。

    • 独自等待
      2014-02-17 10:56

      @PgHook:确实是可以上传的,不知道你哪里操作错了。

  3. PgHook
    2014-02-17 11:11

    Array ( [0] => 24 [1] => 24 [2] => 1 [3] => width=”24″ height=”24″ [bits] => 8 [channels] => 3 [mime] => image/gif )
    我上传了一个gif的图片(没做任何操作),就返回上面那段,web那个uploads目录也没东西。我在刚刚开始学php,有的东西也是半懂不懂的,所以源码只能看懂个大概。

  4. PgHook
    2014-02-17 14:34

    呵呵!搞定了,我的uploads文件夹的权限不够,我不知道你的qq啊??这是我的2577592105。

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌