1. 程式人生 > 其它 >檔案上傳副檔名檢測繞過

檔案上傳副檔名檢測繞過

一、副檔名檢測型別

1、黑名單檢測副檔名。一般會有一個專門的blacklist檔案,檔案中會包含常見的危險指令碼。如果上傳檔案的副檔名在黑名單內就不予通過 2、白名單檢測副檔名。白名單會檢測上傳檔案的副檔名是否為允許的型別,是就予以通過

二、繞過方法

(一)黑名單繞過

1、尋找黑名單副檔名的漏網之魚進行繞過 2、大小寫繞過,有時可能需要和空格一起用才能繞過 3、能被web容器解析的其他副檔名如jspx、aspx、ashx等 4、特殊字尾繞過,如php5等 5、雙寫字尾名繞過

(二)白名單繞過

1、利用中介軟體解析漏洞進行繞過 (1)IIS。給檔名加上奇怪的不被解析的字尾,如shell.php改為shell.php.abc,伺服器黑名單驗證只驗證副檔名是否符合規則,只要符合即可上傳 (2)nginx。利用空位元組漏洞,如1.jpg%00.php之類的檔名會被解析成php執行 (3)apache。apache解析檔名時是從右向左讀,遇到不能識別的檔名就會跳過,給檔名加上不能識別的字尾就可以繞過過濾機制,如shell.php.rar等 2、%00、0x00截斷,但是這種方法的前提條件是目標站點必須存在截斷上傳漏洞才能實現

三、示例——upload-labs Pass-06

1、先檢視提示 2、黑名單驗證,檢測部分的原始碼如下,可以採用大小寫混寫和空格的方式繞過
$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",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        
$file_name = trim($_FILES['upload_file']['name']); $file_name = deldot($file_name);//刪除檔名末尾的點 $file_ext = strrchr($file_name, '.'); $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字串::$DATA $file_ext = trim($file_ext); //首尾去空 if (!in_array($file_ext, $deny_ext
)) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext; if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true; } else { $msg = '上傳出錯!'; } } else { $msg = '此檔案型別不允許上傳!'; } } else { $msg = UPLOAD_PATH . '資料夾不存在,請手工建立!'; } }
3、抓包,在檔案字尾名前面加上一個空格,字尾名採用大小寫混寫,放包後上傳成功 4、使用蟻劍連線成功