pass-06和pass-07:文件名后缀名后加空格或点

原理:

Win下xx.jpg[空格] 或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点 此处会删除末尾的点,但是没有去掉末尾的空格,因此上传一个.php空格文件即可。

用burp抓包,将上传的文件名后缀名php后面加  空格 或者 点

他们的代码 对比前面都是 缺少去除 文件名末尾的点和首尾去空的原因

 

pass-08:          ::$DATA绕过

 

NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。

备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA。

上传.php::$DATA绕过。(仅限windows)

不是众所周知的更能所以 程序员在写黑名单的时候会忽略

 

burp抓包修改后缀名为.php::$DATA

相比之前的代码 缺少了这一行

 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

 

 

pass-09:      一:.空格.绕过     二:Apache陌生后缀解析漏洞

 

一:点空格点  

move_upload_file的文件名直接为用户上传的文件名,我们可控。且会删除文件名末尾的点和首尾去空

 

burp抓包 改文件后缀       .php.空格.

 

二:Apache陌生后缀解析漏洞

 

burp抓包  把 文件后缀改为    .jpg.php.asd  或者  .php.asd       试了一下asd可以换成其他的

Apache 读取后缀名是从后往前读的  不认识asd后缀 继续读前面的php后缀

 

 

pass-10  :   双写后缀名绕过    代码敏感后缀名替换为空 

 

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");

        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

 

 

 

 

 将敏感文件替换为空字符串

 

直接上传phpinfo.php  结果为:

 

burp抓包把后缀名改为

.phpphp还是被换掉

 

改为.pphphp可以了

 

转载于:https://www.cnblogs.com/liqik/p/10711912.html

更多推荐