正在阅读:

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

10,168

之前本站科普了文件上传漏洞中关于客户端JS验证,服务端MIME验证,以及服务端目录路径验证等文章,今天我们科普一下关于服务端扩展名验证的绕过。服务端扩展名的绕过使用的还是比较多的,很普遍。

服务端扩展名验证一般存在漏洞的都是采用黑名单机制来过滤用户上传文件,会有一个黑名单列表来包含不允许上传的脚本文件,例如fckeditor 2.4.3 或之前版本的黑名单。

文件上传漏洞演示脚本

服务端扩展名验证演示代码

<?php
/**
 * Created by 独自等待
 * Date: 14-1-22
 * Time: 下午9:30
 * Name: upload4.php
 * 独自等待博客:http://www.waitalone.cn/
 */
//文件上传漏洞演示脚本之服务端扩展名验证
$uploaddir = 'uploads/';
if (isset($_POST['submit'])) {
    if (file_exists($uploaddir)) {
        $deny_ext = array('.asp', '.php', '.aspx', '.jsp');
        //echo strrchr($_FILES['upfile']['name'], '.');
        $file_ext = strrchr($_FILES['upfile']['name'], '.');
        //echo $file_ext;
        if (!in_array($file_ext, $deny_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>

服务端扩展名验证绕过方法:

1、找黑名单扩展名的漏网之鱼 - 比如上面就漏掉了 asa 和 cer 之类

2、可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类

3、特别文件名构造 - 比如发送的 http 包里把文件名改成 help.asp. 或 help.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改, 然后绕过验证后,会被 windows 系统自动去掉后面的点和空格。

4、IIS 或 nginx 文件名解析漏洞 - 比如 help.asp;.jpg 或 http://www.xx.com/help.jpg/2.php这里注意网上所谓的 nginx 文件名解析漏洞实际上是 php-fpm 文件名解析漏洞,详见 http://www.cnbeta.com/articles/111752.htm

5、0x00 截断绕过 - 这个是基于一个组合逻辑漏洞造成的

6、双扩展名解析绕过攻击(1) - 基于 web 服务的解析逻辑

比如上传x.php.rar等文件

7、双扩展名解析绕过攻击(2) - 基于 web 服务的解析方式


如果在 Apache 的 conf 里有这样一行配置
AddHandler php5-script .php
这时只要文件名里包含.php
即使文件名是 test2.php.jpg 也会以 php 来执行

以上方法来自Bypass Upload Validation Framework V0.9,感谢原作者。

针对本文的代码,最简单的就是使用更改大小写上传即可,或者使用上面的多种方法测试。

文件上传漏洞演示脚本

相关文章:

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

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

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

目前有:0条访客评论

    留下脚印,证明你来过。

    *

    *

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