很多電影網站,論壇或其它機構為了方便會員或成員上傳電影或者交流文件,都允許用戶的上傳權限,因為只有允許這個權限,用戶才可以上傳文件,但這個權限在允許斷點再傳的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服務器的文件,唯一要負責任的人是你。引用一句古龍小說中的話:“刀本身並沒有錯,錯的是拿它的手”。