您當前的位置:首頁(yè) > 新(xīn)聞資訊 > 産(chǎn)品動态 > 正文(wén)

【新(xīn)東網安(ān)全大咖帶您走進應用(yòng)安(ān)全】中(zhōng)木(mù)馬了?别捉急,我來拯救你!

發布時間: 2016-10-31 15:25:51  
分(fēn)享到:

 

 

文(wén)/ 邵元明  信息安(ān)全部

 

 

 

 

 
專欄介紹

新(xīn)東網自2001年成立以來,掌握大數據、雲計算、通信、物(wù)聯網及區(qū)塊鏈等信息技(jì )術,擁有(yǒu)一支逾16年經驗的強大IT團隊。為(wèi)沉澱企業技(jì )術實力,繼續發揮行業優勢,《東網快訊》特邀新(xīn)東網技(jì )術大咖帶您走進這些先進信息技(jì )術,揭秘新(xīn)東網16年來的技(jì )術成果,每周五發布

 

在WEB2.0時代,随着WEB應用(yòng)與用(yòng)戶的交互逐漸增多(duō),文(wén)件上傳功能(néng)作(zuò)為(wèi)WEB應用(yòng)的基本功能(néng)也在越來越多(duō)的網站中(zhōng)被普遍使用(yòng)。例如,許多(duō)網站都允許用(yòng)戶自行上傳頭像、一些社交類網站允許用(yòng)戶上傳照片、一些服務(wù)類網站需要用(yòng)戶上傳證明材料的電(diàn)子檔、電(diàn)商(shāng)類網站允許用(yòng)戶上傳圖片展示商(shāng)品情況等。然而,看似不起眼的文(wén)件上傳功能(néng)如果沒有(yǒu)做好安(ān)全防護措施,就存在巨大的安(ān)全風險,黑客可(kě)以通過上傳WEBSHELL文(wén)件來對服務(wù)器進行控制。

 

 

 

WEBSHELL又(yòu)稱網頁(yè)木(mù)馬文(wén)件,根據開發語言的不同又(yòu)分(fēn)為(wèi)ASP木(mù)馬、PHP木(mù)馬、JSP木(mù)馬等。如果該類木(mù)馬利用(yòng)腳本語言中(zhōng)的系統命令執行、文(wén)件讀寫等函數功能(néng),一旦上傳到服務(wù)器被腳本引擎解析,攻擊者就可(kě)以實現對服務(wù)器的控制。

 


 

稍有(yǒu)經驗的開發者都知道對文(wén)件上傳功能(néng)進行一些限制,防止用(yòng)戶上傳網頁(yè)木(mù)馬文(wén)件。但是如果開發者沒有(yǒu)使用(yòng)有(yǒu)效的限制手段,就往往不能(néng)很(hěn)好地阻止攻擊者上傳木(mù)馬文(wén)件。下面,我們對一些常見的限制手段進行分(fēn)析:

 

一、JavaScript檢測

 

JavaScript檢測是在客戶端浏覽器上使用(yòng)JavaScript腳本對上傳的文(wén)件進行檢測。由于JavaScript是在客戶端運行的,攻擊者可(kě)以通過禁用(yòng)JavaScript腳本、修改JavaScript腳本、在上傳過程中(zhōng)攔截修改數據包等方式輕易地繞過JavaScript檢測。

 

 

二、MIME類型和文(wén)件内容檢測

 

一些開發者會在服務(wù)端通過上傳文(wén)件的MIME類型和文(wén)件内容對文(wén)件進行檢查,如隻允許MIME類型為(wèi)圖片或文(wén)件内容中(zhōng)包含圖片類型文(wén)件頭的文(wén)件上傳,以此阻止用(yòng)戶上傳網頁(yè)木(mù)馬文(wén)件。這種方式也存在缺陷。因為(wèi)MIME類型是由客戶端提交的可(kě)以被篡改,而在網頁(yè)木(mù)馬文(wén)件中(zhōng)添加圖片類型的文(wén)件頭并不會影響網頁(yè)木(mù)馬文(wén)件正常執行,因此攻擊者可(kě)以通過篡改或僞造請求包,發送MIME類型和文(wén)件頭符合要求的木(mù)馬文(wén)件。

 

 

三、文(wén)件擴展名(míng)檢測

 

相比較前面兩種檢測模式,在服務(wù)端針對文(wén)件擴展名(míng)的檢測會更加有(yǒu)效。因為(wèi)正常情況下,如果用(yòng)戶上傳的網頁(yè)木(mù)馬文(wén)件不是以響應的腳本文(wén)件擴展名(míng)上傳的,則無法正常運行,達不到控制網站服務(wù)器的目的。然而,如果對文(wén)件擴展名(míng)檢測的實現方式不當的話仍然存在風險。文(wén)件擴展名(míng)檢測通常分(fēn)為(wèi)黑名(míng)單檢測和白名(míng)單檢測兩種:

 

黑名(míng)單檢測:黑名(míng)單定義了一系列不安(ān)全的擴展名(míng)。服務(wù)器端在接受文(wén)件後,與黑名(míng)單擴展名(míng)對比,如果文(wén)件擴展名(míng)與黑名(míng)單裏的擴展名(míng)匹配,則認為(wèi)文(wén)件不合法。例如,可(kě)以将ASP、PHP、JSP等常見的腳本文(wén)件擴展名(míng)列入黑名(míng)單禁止上傳。黑名(míng)單主要存在的問題是黑名(míng)單的完整性問題,如asa、cer、cdx、php3等一些不常用(yòng)的擴展名(míng)可(kě)能(néng)沒有(yǒu)加入黑名(míng)單;在進行黑名(míng)單匹配前沒有(yǒu)文(wén)件擴展名(míng)進行大小(xiǎo)寫轉換操作(zuò),且黑名(míng)單擴展名(míng)全部為(wèi)小(xiǎo)寫,那就意味着php、asp這樣的擴展名(míng),隻要換成PHP、ASP就能(néng)正常上傳;在Windows系統下,如果文(wén)件名(míng)以小(xiǎo)數點、下劃線(xiàn)或空格作(zuò)為(wèi)結尾,系統保存文(wén)件時會自動去除将這些字符,因此如果黑名(míng)單中(zhōng)沒有(yǒu)包括類似“asp.”或者“asp_”這樣的擴展名(míng),攻擊者可(kě)以通過上傳這些擴展名(míng)的網頁(yè)木(mù)馬文(wén)件繞過黑名(míng)單檢測實現上傳木(mù)馬。

 

 

白名(míng)單檢測的機制恰恰相反,通常是根據業務(wù)實際需要事先定義好上傳的文(wén)件擴展名(míng)隻能(néng)為(wèi)JPG、PNG、GIF、7Z等無安(ān)全風險的擴展名(míng),當攻擊者上傳其他(tā)擴展名(míng)的文(wén)件就會被拒絕。相比之下,白名(míng)單檢測機制的可(kě)靠性會更強一些,不像黑名(míng)單檢測機制一樣容易被繞過,但在一些特殊情況下攻擊者仍有(yǒu)一些方法可(kě)以繞過檢測機制進行攻擊:

 

1、對于IIS6.0而言,若文(wén)件目錄名(míng)以.ASP或.ASA等腳本文(wén)件擴展名(míng)形式結尾,則該文(wén)件目錄下的所有(yǒu)文(wén)件都會被當做ASP文(wén)件解析。因此,如果上傳功能(néng)允許用(yòng)戶自定義上傳的文(wén)件路徑,則可(kě)以通過将文(wén)件路徑設置為(wèi)以.ASP結尾的形式進行攻擊,此時即使上傳的網頁(yè)木(mù)馬文(wén)件符合擴展名(míng)白名(míng)單仍會被作(zuò)為(wèi)腳本解析。此外,在IIS6.0的環境下如果上傳類似于1.php;1.jpg形式的網頁(yè)木(mù)馬文(wén)件,也會被當做腳本解析。

 

 

2、在windows環境下,/x00是終止符,如果文(wén)件路徑或文(wén)件名(míng)包含/x00則在保存文(wén)件的時候系統會自動将/x00後的内容略去,因此可(kě)以上傳類似于1.php/x001.jpg這樣的文(wén)件或将文(wén)件上傳目錄設置為(wèi)1.php/x00。系統在保存文(wén)件時都會将文(wén)件保存為(wèi)1.php這樣的腳本文(wén)件,從而達到攻擊目的。

 

 

 

3、Apache在解析文(wén)件時如果遇到無法識别的擴展名(míng),将會從後向前解析,直到碰到認識的擴展名(míng)為(wèi)止。如果擴展名(míng)白名(míng)單中(zhōng)包含Apache無法解析的擴展名(míng)(以.7z為(wèi)例),則可(kě)以構造類似于:1.php.7z這樣的文(wén)件名(míng)進行上傳。由于7z文(wén)件Apache無法解析,Apache最終會将該文(wén)件作(zuò)為(wèi)PHP腳本解析。

 

 

4、Nginx在早期的版本中(zhōng),如果用(yòng)戶在URL後加上類似于/1.php這樣的字符串進行訪問,URL中(zhōng)的文(wén)件就會被按照字符串中(zhōng)的腳本類型進行解析。因此可(kě)以通過上傳一個擴展名(míng)符合白名(míng)單要求的網頁(yè)木(mù)馬文(wén)件,訪問時在URL後加上上述字符串将該文(wén)件解析為(wèi)網頁(yè)木(mù)馬。

 

 

綜上所述,要保障文(wén)件上傳功能(néng)的安(ān)全性就需要限制用(yòng)戶上傳的文(wén)件類型,防止用(yòng)戶上傳網頁(yè)木(mù)馬文(wén)件。在服務(wù)端對擴展名(míng)進行白名(míng)單檢測是相對安(ān)全的做法,但如果處理(lǐ)不當仍然存在風險。建議對文(wén)件上傳功能(néng)進行如下處置,可(kě)以避免本文(wén)中(zhōng)各種文(wén)件上傳漏洞:

 

1、在服務(wù)端對擴展名(míng)進行白名(míng)單校驗,擴展名(míng)不符合白名(míng)單的不允許上傳;

 

2、上傳過程不允許用(yòng)戶直接設置文(wén)件路徑,必要時可(kě)以使用(yòng)預先設置路徑列表中(zhōng)的匹配索引值,嚴禁洩露文(wén)件絕對路徑;

 

3、對文(wén)件進行重命名(míng),使用(yòng)随機性好的文(wén)件目錄和文(wén)件名(míng)進行保存;

 

4、對文(wén)件的上傳目錄和臨時文(wén)件目錄設置不解析和執行;

 

5、有(yǒu)條件時可(kě)以将文(wén)件以數據的形式保存和讀取。

 

分(fēn)享到:
地址:福建省福州市銅盤路軟件大道89号軟件園A區(qū)26号樓 電(diàn)話:0591-83519233 傳真:0591-87882335 E-mail:doone@doone.com.cn
版權所有(yǒu) 新(xīn)東網科(kē)技(jì )有(yǒu)限公(gōng)司 京ICP證000000号 閩公(gōng)網安(ān)備 35010202001006号