《基于ASP上傳源碼的漏洞分析及解決策略的創(chuàng)建》由會員分享,可在線閱讀,更多相關(guān)《基于ASP上傳源碼的漏洞分析及解決策略的創(chuàng)建(4頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于ASP上傳源碼的漏洞分析及解決策略的創(chuàng)建
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2012)33-7899-04
隨著基于ASP 技術(shù)建立的動態(tài)網(wǎng)站越來越多,由于網(wǎng)站的交互功能,導(dǎo)致ASP木馬被上傳至網(wǎng)站的可能性也越來越大。而ASP木馬與正常的ASP文件并無本質(zhì)不同,夾雜在正常ASP文件中難以分辨。當(dāng)服務(wù)器被上傳ASP木馬并執(zhí)行后,黑客可以對文件進(jìn)行創(chuàng)建、修改、刪除、上傳、下載,服務(wù)器數(shù)據(jù)毫無安全可言。ASP木馬甚至可以運(yùn)行命令行程序,創(chuàng)建用戶賬號,安裝后門程序,利用系統(tǒng)漏洞可將用戶權(quán)限提升為管理員權(quán)限,其高度的隱蔽性和難查殺性,對網(wǎng)站的安全造成了嚴(yán)
2、重的威脅。
所謂上傳漏洞是指利用程序開發(fā)者在開發(fā)過程中的一些漏洞,將ASP、JSP、PHP等格式的木馬上傳至網(wǎng)站目錄內(nèi),進(jìn)而取得WEBSHELL,甚至管理員權(quán)限的一種方法?!τ谏蟼髀┒吹姆治龊脱芯浚瑧?yīng)該從上傳文件的文件路徑(FilePath)和文件名稱(FileName)的源代碼兩個方面入手。
1 文件路徑(FilePath)上傳漏洞分析
文件路徑(FilePath)上傳漏洞主要是由于上傳文件的路徑(FILEPath)過濾不嚴(yán)引起的。比如動網(wǎng)程序、動易程序等上傳文件的源碼都存在這類漏洞,而且采用這種上傳方式的網(wǎng)站大有人在,在此分析一下其部分源碼:
在這段源碼中,最關(guān)鍵
3、的就這兩句:
◆formPath=upload.form("filepath")
◆filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&fileExt
下面來看一下上傳漏洞是如何形成的。在第一句代碼中,從變量filepath中獲取文件的保存路徑,然后在第二句中,用路徑變量formPath加隨機(jī)生成的數(shù)字及經(jīng)過判斷的擴(kuò)展名合成為一個新的變量,這個變量Filename就是上傳文件保存的路徑及名
4、稱。比如選擇"a.jpg";文件上傳,在上傳過程中,隨文件一起上傳的還有一個FilePath變量,假設(shè)其值為"image";,當(dāng)這些值傳到upfile.asp中,filename就變成了"image/201210190820944973.jpg";,上傳成功后,該a.jpg就被保存到image文件夾內(nèi),文件名字也被改成了"201210190820944973.jpg";。
這是設(shè)計者的想法,似乎無懈可擊。但細(xì)細(xì)研究,就會發(fā)現(xiàn)問題,其突破點(diǎn)就在變量身上。如果將FilePath值改為"image/b.asp_";("_";表示二進(jìn)制的00的意思),這樣,該變量提交入upfile.asp后,F(xiàn)
5、ilename值就變成了"image/b.asp_/201210190820944973.jpg";,服務(wù)器在讀取這段變量時,因為"_";是二進(jìn)制的00,認(rèn)為該變量語句已經(jīng)結(jié)束了,于是"_";后面的字符也就被忽略掉了,這樣一來Filename就成了"image/b.asp";,程序再用file.SaveAs進(jìn)行保存,這個文件就保存成了b.asp文件,這種上傳文件路徑(FilePath)漏洞就出現(xiàn)了,隨之而來的嚴(yán)重后果在此就不分析了。
2 文件名稱(FileName)上傳漏洞分析
文件名稱(FileName)上傳漏洞主要是上傳文件名稱(FileName)過濾不嚴(yán)謹(jǐn)造成的。筆者收集并閱
6、讀了大量的上傳程序源碼,發(fā)現(xiàn)上傳文件名稱過濾不嚴(yán)的形式是多種多樣的,但其核心問題的表現(xiàn)形式基本差不多,在此以一段最典型的代碼進(jìn)行分析說明,其部分源碼如下:
上面代碼中正常運(yùn)行所涉及到參數(shù)主要包括:
◆FixName()函數(shù),其接下來的源碼為:
從上面代碼可以看出,系統(tǒng)中asp.dll文件映射的類型(asp、asa、cer、cdx、htr、shtml等)全部被過濾了,除此之外,還有小數(shù)點(diǎn)、單引號也被過濾,甚至連Chr(0)都過濾了(這兒的Chr(0)是16進(jìn)制的00,表示為二進(jìn)制是00000000,就是前面在文件路徑上傳漏洞中大顯神通的空字符)。
◆CheckFileEx
7、t()函數(shù),源碼形式為:
這個函數(shù)對經(jīng)過FixName()函數(shù)審核后的文件擴(kuò)展名再次判斷,共有三次檢查。第一次是判斷傳遞來的文件擴(kuò)展名是否為空;第二次是判斷文件擴(kuò)展名是否屬于asp、asa等四種禁止傳的文件類型;第三次就是用該擴(kuò)展名同后臺自定義的上傳擴(kuò)展名進(jìn)行對比,符合就允許上傳。
下面上傳一個文件來看其流程。比如上傳文件為"c.cer";,用"FileExt = FixName(File.FileExt)";過濾這個文件時,因為cer屬于fixName()函數(shù)的過濾范圍,所以擴(kuò)展名cer就成了空。當(dāng)把這個空的擴(kuò)展名傳遞給CheckFileExt()函數(shù),在其進(jìn)行到"If File
8、Ext=""or IsEmpty(FileExt)";語句時,就會因為FileExt為空而退出交互,拒絕上傳。
這種設(shè)計思路,多重的判斷的審核,好像非常嚴(yán)謹(jǐn),但是只要認(rèn)真琢磨,一樣會發(fā)現(xiàn)問題,其突破點(diǎn)就在FixName()函數(shù)中。從上面上傳"c.cer";文件時我們知道,"cer";會被過濾為空,但如果我們把上傳文件擴(kuò)展名改為ccerer,同時在后臺自定義上傳類型中增加"ccerer";、"cer";。這樣,擴(kuò)展名為ccerer的文件在經(jīng)過第一步FixName()函數(shù)過濾后,變成了cer(中間的cer字符被過濾為空),傳遞此值到CheckFileExt()函數(shù)時,可以通過第一個關(guān)卡(擴(kuò)展
9、名不為空),再通過第二個限制類型的關(guān)卡,最后到對比后臺上傳類型關(guān)卡,順利通過CheckFileExt()的三次的判斷,并給定CheckFileExt = True,這樣就把這個擴(kuò)展名ccerer的文件上傳到服務(wù)器中了,并且上傳后的擴(kuò)展名是"cer";。由于cer文件同asp文件一樣,可以被執(zhí)行,這就是典型的文件名稱(FileName)上傳漏洞了。
在此,有讀者可能會問:如果上傳擴(kuò)展名為aaspsp_或aaspsp.格式的文件,經(jīng)過FixName()函數(shù)的過濾,變成了asp_或asp.文件,而這兩種格式同樣不在限制的范圍,只要在后臺中加上這幾種類型,是不是就可以把上傳的文件保存為asp格式?
10、經(jīng)過筆者仔細(xì)研究分析,發(fā)現(xiàn)事實并不是這樣。先說小數(shù)點(diǎn),在FixName()中,有這么一句:FixName = Replace(FixName,".",""),將小數(shù)點(diǎn)過濾為空,所以aaspsp.這條路就斷了。再來看空格,雖然FixName()中沒有過濾空格,但在CheckFileExt()讀取后臺上傳類型時有這么一句:"If FileExt = Trim(Forumupload(i)) Then ";,其中有個Trim(),Trim的作用是刪除字符串開始和尾部的空格。雖然在后臺能寫入了asp_類型,但在讀取時,卻會被Trim()過濾成asp,而aaspsp_通過層層關(guān)卡到了此處,已變成了asp
11、_,同樣被拒絕上傳。
3 解決對策與方案
通過前面對上傳漏洞產(chǎn)生原理的詳細(xì)分析,我們很容易得到解決此類問題的思路,主要應(yīng)該從源代碼的編寫、非法上傳的文件檢測查殺以及服務(wù)器配置這三個方面進(jìn)行解決。由于上文已經(jīng)對上傳文件名稱(FileName)漏洞和上傳文件路徑(FilePath)漏洞的源碼進(jìn)行了分析,所以從源代碼入手解決這類漏洞,在此不再作詳述,只要大家針對上述問題對代碼略作補(bǔ)丁,使源代碼過濾更加嚴(yán)格就可解決此類問題,下面主要從另外二個角度進(jìn)行分析。
3.1 對上傳文件進(jìn)行檢測查殺
其解決的原理是:不管別人是利用何種漏洞,上傳至服務(wù)器的文件我們一律給以檢測,判斷上傳的圖片
12、格式是否合法。即:判斷該文件是否符合圖像的規(guī)范,如果是木馬偽裝的圖片肯定是不合法的,然后用FSO刪除即可。這兒結(jié)合著代碼,給大家解析:
以上的代碼表明,假設(shè)你利某種漏洞,"合理";地將該"偽圖像";文件上傳了,而我們接著再使用自定義函數(shù)來對此"偽圖像";文件進(jìn)行甄別,判斷該文件是否符合圖像的規(guī)范,若符合圖像的規(guī)范則通過,若是木馬偽裝的圖像文件則FSO做出刪除該文件的操作,以此來達(dá)到阻止木馬文件上傳目的。
3.2 對服務(wù)器進(jìn)行優(yōu)化配置
這是假設(shè)我們無法阻止asp木馬文件上傳至服務(wù)器,那么應(yīng)該對IIS進(jìn)行規(guī)范設(shè)置,對訪問用戶權(quán)限進(jìn)行嚴(yán)謹(jǐn)分配,對重要文件夾(易被asp木馬上傳的目的
13、文件夾)進(jìn)行充分限權(quán),讓上傳進(jìn)來的asp木馬無用武之地。
1)規(guī)范設(shè)置IIS
在IIS的運(yùn)用程序配置中,刪除不需要的程序映射,這是避免因為過濾不夠被攻擊者上傳了某些特殊類型的木馬進(jìn)行攻擊的辦法。應(yīng)當(dāng)只留下.asp、.asa、.aspx三個映射,去掉.cer、.config等其他映射。這樣,就是別人傳上去了.cer等格式文件,也是一種無用的木馬。
2)嚴(yán)控訪問權(quán)限
互聯(lián)網(wǎng)用戶一般都以"Internet來賓賬戶";訪問Web站點(diǎn)的,因此嚴(yán)格控制Internet來賓賬戶的訪問權(quán)限是非常重要的。應(yīng)該在Web站點(diǎn)必要的目錄,去掉"執(zhí)行";權(quán)限,即將執(zhí)行權(quán)限改為"無";,也就是這個
14、目錄下的文件,只能讀取,不能運(yùn)行。尤其是上傳目錄,比如UploadFiles這樣的目錄,還有圖片目錄,一定要設(shè)置為只讀。這樣設(shè)置以后,黑客即使利用安全漏洞上傳了ASP木馬,但由于沒有執(zhí)行權(quán)限而無法運(yùn)行,同樣可以起到保護(hù)的作用。
3)隱藏或刪除無關(guān)組件
為防范ASP木馬對服務(wù)器操作系統(tǒng)的入侵,可以刪除或隱藏不安全的組件。ASP木馬利用的常用組件分別是:FileSystemObject組件、WScript.Shell組件、Shell.Application組件、WScript.Network組件等,對于不需要的組件可以用RegSrv32/u命令刪除,需要的組件可以通過修改注冊表將組件改
15、名,同樣可以阻止ASP木馬上傳的作用。
4 結(jié)束語
總之,ASP木馬程序在管理員嚴(yán)格的權(quán)限控制之下,是可以防范的。我們要從源代碼編寫這個源頭入手,對上傳文件進(jìn)行嚴(yán)格審核,并及時更新系統(tǒng)補(bǔ)丁,嚴(yán)格控制"Internet來賓帳戶";訪問權(quán)限,盡可能避免ASP木馬被非法上傳,通過細(xì)致的網(wǎng)站目錄執(zhí)行權(quán)限控制,避免大部分ASP木馬的運(yùn)行,采用不安全組件的隱藏、刪除及訪問權(quán)限設(shè)置,可以將ASP木馬運(yùn)行后的危害大大降低。嚴(yán)格、綜合、全面的權(quán)限體系將使黑客利用ASP木馬入侵Web站點(diǎn)的陰謀無法輕易得手。
參考文獻(xiàn):
【1】 張明.ASP建網(wǎng)策略與案例.北京:科學(xué)出版社,2011.
【2】 杜方冬,吳珊,胡宇峰.徹底捍衛(wèi)數(shù)據(jù)安全.濟(jì)南:山東電子音像出版社,2011.
【3】 張濤,胡銘曾,云曉春.計算機(jī)網(wǎng)絡(luò)安全性分析建模研究.通信學(xué)報,2011,26(12):100-109.