iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
1
Security

資安x系統x絕對領域系列 第 9

[Day04]原始碼檢測x弱點修補X驗證攻擊-File Upload

其實講完[Day04]原始碼檢測x弱點修補X驗證攻擊-Path Manipulation還有點意猶未盡。
感覺如果沒有講檔案上傳(File Upload)感覺有點缺漏,就一起列在Day04裡面一起補上了!:)

[弱點描述]

就是一個利用上傳功能的弱點。

[攻擊方式]

利用網站應用程式上傳功能將後門檔案或惡意程式植入網站,後續透過這樣的弱點得到目的。

[驗證範例]

假設是一個上傳照片的功能,但我們可以上傳其他壞壞的檔案進去。
前端網頁中有控管是否字元一定要包含JPG。
所以我們上傳了Hello.jpg.asp(假設是惡意程式),是可以繞過的。

前台送出時會做副檔名是否為JPG的判斷

var_URL = window.URL || window.webkitURL;
	$('#f_UploadImage").on('change',function(){
		var file,img;
		if (( file = this.files[0]{
			if(file.name.indexOf(".jpg") > -1{
				img = new Image();
				img.onload = function(){
					sendFile(file);
				};

所以改成這樣可以嗎?

HttpPostedFile file = context.Request.Files[s];
string fileName = file.FileName;
string fileExtenstion = file.ContentType;
if (fileExtension.Contains("jpg") || fileExtenstion.Contains("png"))

不行哦,因為我們會用修改Content-type改成JPG一樣可以繞過此段檢查:
http://ithelp.ithome.com.tw/upload/images/20161212/20103647KUIKh2P7rJ.png

//謝謝同事JohnDoe 大大提供的例子 =v=+

[防禦方式]

(1)黑名單,相較之下比較不安全,如果真的要採黑名單制,請加入遞迴檢查
(2)白名單,相較之下比較安全,但仍存在風險,指定資料夾路徑及英數字元,做擷字元副檔名判斷
(3)關閉.htaccess檔案或其他屬性設定檔上傳功能,範例請參考連結
(4)控管已上傳檔案資料夾的檔案權限或上傳後直接加密壓縮,設定該資料夾無法被執行

[開發者思維]

要將每個使用者都當作駭客,以最嚴謹的方式來過濾使用者的任何輸入值。


上一篇
[Day06]弱點掃描x概念x工具
下一篇
[Day07]弱點掃描x弱點修補x經驗分享
系列文
資安x系統x絕對領域47

1 則留言

0
Kathy Lai
iT邦新手 5 級 ‧ 2016-12-12 16:51:34

「Content-type改成JPG」是指.asp檔案裡面header標記為JPEG檔嗎?
(可以這樣繞!?覺得新奇。)

虎虎 iT邦新手 3 級‧ 2016-12-12 17:08:47 檢舉

可以哦,想改什麼都可以改什麼哦 XDDDD
用Chrome滑鼠右鍵按檢查,可以直接下去改參數,但寫在後端的話需要用工具去做修改XD

我要留言

立即登入留言