很多電影網站,論壇或其它機構為了方便會員或成員上傳電影或者交流檔案,都允許使用者的上傳許可權,因為只有允許這個許可權,使用者才可以上傳檔案,但這個許可權在允許斷點再傳的ftp伺服器中,可以導致很大的問題出來。
允許斷點再傳的ftp伺服器程式,都必須支援一個“Rest”的命令,如果這個命令是用在上傳命令前(send命令), 是告訴ftp伺服器我要上傳的檔案會是從ftp伺服器中存在的那個檔案的什麼位置中開始寫。
例子:
假設ftp伺服器中存在一個檔案Readme.txt,檔案大小為1000 bytes,串連上這個ftp伺服器(假設我有寫入權限,ftp伺服器是支援斷點再傳的),我本地中也有一個叫Readme.txt的檔案,檔案大小為500 bytes。好了,我開始做壞事。
1、串連上這個ftp伺服器(用系統內建的 ftp://ftp.exe/,在內網的可能無法使用,因為 ftp://ftp.exe/用的是port模式)
2、dir(查看Readme.txt大小,確定了是1000 bytes)
3、quote rest 1000(告訴ftp伺服器我將要傳送的檔案是從檔案位置1000開始)
4、send Readme.txt
5、dir(再次查看Readme.txt大小,現在Readme。txt變成1500 bytes了)
為什麼Readme.txt會變大了?很簡單,因為我本地的那個Readme.txt的500位元組上傳成功,並寫入到ftp伺服器中存在的那個1000 bytes的Readme.txt檔案中了。問題是出在第二條命令,如果沒有第二條命令,我的第4個命令(Send Readme.txt),就會得到一個Permission Deny的錯誤,第二條命令是讓ftp伺服器信任我們將要進行一個斷點再傳的操作,如果沒有第二條命令,ftp伺服器將以為我們進行的是一個複蓋原檔案的操作(複蓋原檔案操作需要另外的許可權才可以進行)。
說到這裡,大家應該明白了主題的意思了吧,通過很簡單的操作,任何具有寫入權限的使用者,都可以改動其它使用者上傳的檔案,單是這一點,就存在很大的安全性漏洞了。如果上傳的是重要檔案,隨意的修改可以令檔案完全破壞了;如果是可執行檔或一些zip或rar檔案,會不會有些熟悉各種檔案結構的天才瘋子,將一些惡意代碼也加到那些檔案,令執行者系統受到破壞或者執行了他們的後門代碼或其它,由於本身對於這些檔案結構並不熟悉,我只說這是一個未知之數。
但在電腦的世界中,很多不可能的事最後都被創造成可能,所以我無法下定論。但單是能破壞到檔案這一點,已是很具破壞性了,想想一個500M的影視檔案,被人多加了位元組進去的話,估計是無法再被觀看的了,播放這些檔案的程式一般都會說不是合法的影視檔案,無法播放等等。至於zip,rar等檔案,winzip或winrar肯定會說壓縮檔已遭到破壞,crc檢驗碼不對等等的錯誤。
這個問題只是在允許斷點再傳的FTP服務中存在,但現在90%的FTP服務程式都是允許斷點再傳的,所以這問題在普遍的FTP伺服器都會存在。
防範方法:
如果一定需要給使用者上傳許可權的話,最好的防範方法是每個使用者都給他建立一個目錄,將那個使用者的許可權完全鎖在這個目錄內,那麼使用者就沒有許可權可以查看其它使用者的目錄,也就是說無法造成以上所說的破壞。
以上所說的在Serv-U V4.0中測試過,測試平台是Win 2K Server。如果其它ftp服務程式不存在這種問題,那不在此文章討論範圍內。 現在windows系統中架設ftp伺服器,用得最多最流行的還是Serv-U,所以管理員們要多留心了。這文章並不是要教人做壞事,如果你用這種方法去破壞ftp伺服器的檔案,唯一要負責任的人是你。引用一句古龍小說中的話:“刀本身並沒有錯,錯的是拿它的手”。