天天看點

51.檔案上傳篇一 詳解檔案上傳過程和繞過檔案上傳

1、檔案上傳過程

01 用戶端選擇發送的檔案->伺服器接收->網站程式判斷->臨時檔案->移動到指定的路徑


02 伺服器接收的資源程式:
	upload.php
	<?php
	    if ($_FILES["file"]["error"] > 0)
	      {
	      echo "Error: " . $_FILES["file"]["error"] . "<br />";
	      }
	    else
	      {
	      echo "Upload: " . $_FILES["file"]["name"] . "<br />";
	      echo "Type: " . $_FILES["file"]["type"] . "<br />";
	      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
	      echo "Stored in: " . $_FILES["file"]["tmp_name"];
	      }
	?>

03 用戶端上傳表單:
	upload.html
	<html>
	 <head></head>
	 <body> 
	  <form action="upload.php" method="post" enctype="multipart/form-data"> 
	   <label for="file">Filename:</label> 
	   <input type="file" name="file" id="file" /> 
	   <br /> 
	   <input type="submit" name="submit" value="Submit" /> 
	  </form>  
	 </body>
	</html>
           

2、檔案上傳錯誤代碼

值:0; 沒有錯誤發生,檔案上傳成功。
值:1; 上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
值:2; 上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
值:3; 檔案隻有部分被上傳。
值:4; 沒有檔案被上傳。
           

3、網站檔案常見的字尾名

asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
//過濾的時候可以傳入這種格式:aspasp、phpphp、大小寫轉換
           

4、造成漏洞的原因

01 程式代碼和系統缺陷
	a)	檔案可以直接上傳可執行腳本:moon.php
	
	b)	js腳本限制前端  
		i.儲存頁面,修改html
		ii.抓包改包
		iii. 禁止js檔案運作 
		
	c)	黑名單過濾不全:窮舉字尾名 moon.phtml
		i.黑名單:指定的字尾名是禁止上傳的,一般窮舉字尾即可
		窮舉字典:
				php
				php1
				php2
				php3
				php4
				php5
				pht
				phtml
				html
				htm
				PhP
				PhP1
				PhP2
				PhP3
				PhP4
				PhP5
				PhT
				Phtml
				HTML
				HTM
				php.
				php 
				php::$DATA
				php. .
				php . 
				php ..
				php.  
				phphpp
				PhPhPP
				asp
				asa
				cdx
				cer
				php
				aspx
				ashx
				jsp
				php3
				php.a
				shtml
				phtml
				ASP
				ASA
				CDX
				CER
				PHP
				ASPX
				ASHX
				JSP
				PHP3
				PHP.A
				SHTML
				PHTML
				Asp
				Asa
				Cdx
				Cer
				Php
				Aspx
				Ashx
				Jsp
				Php3
				Php.a
				Shtml
				Phtml
 		ii.白名單:就是允許上傳檔案字尾,如jpg png gif 等其他圖檔格式
	
	d)	content-type檔案類型的檢測:抓包修改http檔案類型即可

	e)	檔案頭檢測:修改檔案頭 或 圖檔一句話
			JPEG (jpg),檔案頭:FFD8FF 
			PNG (png),檔案頭:89504E47 
			GIF (gif),檔案頭:47494638 
			TIFF (tif),檔案頭:49492A00 
			Windows Bitmap (bmp),檔案頭:424D
		制作圖檔一句話:
		copy 1.gif/b+moon.php shell.php

	f)	檔案名可控且字尾名不可控:IIS6.0解析漏洞
		檔案名可控,檔案字尾隻能是jpg,可利用iis6.0漏洞。(檔案名:moon.asp;)(字尾.jpg)(其中檔案名的分号,相當于一個注釋符号)
		moon.asp;.jpg,可上傳,可解析。
		moon.asp;jpg,雖不能上傳,但是可以解析。
					
	e)	IIS6.0目錄解析漏洞:檔案夾為x.asp,隻要上傳檔案到這個檔案夾裡,通路就會執行腳本

	f)	 %00截斷的應用場景  
			直接截斷檔案名
			建立目錄可控 %00截斷建立目錄 利用iis6.0解析漏洞 上傳檔案到這個目錄裡面
			截斷參數 生成檔案
		
		
02 程式邏輯出錯
	雙檔案上傳
	空格檔案上傳


03 部署環境
	apache開啟重寫子產品
	LoadModule rewrite_module modules/mod_rewrite.so
	重寫解析   .htaccess
	<FilesMatch "jpg">
	SetHandler application/x-httpd-php
	</FilesMatch>


04 IIS7.0/7.5/nginx的配置錯誤   1.jpg/.php
	iis7.0|iis7.5|nginx 開啟 fast-cgi
	//https://blog.csdn.net/weixin_45588247/article/details/118889668


05 漏洞
	nginx<=0.83
	/1.jpg%00php


06 系統特性
	上傳檔案名a.php:.jpg的時候 會在目錄下生成a.php的空白檔案 
	php+window+iis
	利用PHP 和 Windows環境的疊加特性,以下符号在正則比對時的相等性:
	雙引号"     =   點号.
	大于符号>   =   問号?
	小于符号<   =   星号*
	檔案名.<或檔案名.<<<或檔案名.>>>或檔案名.>><空檔案名
	寫入filename.<<<


07 NTFS交換資料流
	:$DATA 建立檔案
	::$DATA 建立和寫入檔案


08 補充
	window系統裡面會把檔案名的最後一個點 會自動去掉 
	如上傳moon.php.最後還是會變成moon.php
           

2021.08.06 (0:17:51)