攻防:文件上傳漏洞的攻擊與防護

很多系統管理員都有過系統被上傳後門,木馬或者是網頁被人篡改的經歷,這類攻擊至關一部分是經過文件上傳進行的。入侵者是如何作到這些的,又該如何防護,本文以PHP腳本語言爲例,簡要介紹文件上傳漏洞,並結合實際漏洞演示如何利用漏洞進行上傳攻擊。php

1、 文件上傳漏洞與WebShell的關係

文件上傳漏洞是指網絡攻擊者上傳了一個可執行的文件到服務器並執行。這裏上傳的文件能夠是木馬,病毒,惡意腳本或者WebShell等。這種攻擊方式是最爲直接和有效的,部分文件上傳漏洞的利用技術門檻很是的低,對於攻擊者來講很容易實施。web

文件上傳漏洞自己就是一個危害巨大的漏洞,WebShell更是將這種漏洞的利用無限擴大。大多數的上傳漏洞被利用後攻擊者都會留下WebShell以方便後續進入系統。攻擊者在受影響系統放置或者插入WebShell後,可經過該WebShell更輕鬆,更隱蔽的在服務中隨心所欲。shell

這裏須要特別說明的是上傳漏洞的利用常常會使用WebShell,而WebShell的植入遠不止文件上傳這一種方式。數據庫

1 Webshell簡介

WebShell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也能夠將其稱之爲一種網頁後門。攻擊者在入侵了一個網站後,一般會將這些asp或php後門文件與網站服務器web目錄下正常的網頁文件混在一塊兒,而後使用瀏覽器來訪問這些後門,獲得一個命令執行環境,以達到控制網站服務器的目的(能夠上傳下載或者修改文件,操做數據庫,執行任意命令等)。瀏覽器

WebShell後門隱蔽較性高,能夠輕鬆穿越防火牆,訪問WebShell時不會留下系統日誌,只會在網站的web日誌中留下一些數據提交記錄,沒有經驗的管理員不容易發現入侵痕跡。攻擊者能夠將WebShell隱藏在正常文件中並修改文件時間加強隱蔽性,也能夠採用一些函數對WebShell進行編碼或者拼接以規避檢測。除此以外,經過一句話木馬的小馬來提交功能更強大的大馬能夠更容易經過應用自己的檢測。<?php eval($_POST[a]); ?>就是一個最多見最原始的小馬,以此爲基礎也涌現了不少變種,如<script language="php">eval($_POST[a]);</script>等。安全

2 文件上傳漏洞原理

大部分的網站和應用系統都有上傳功能,如用戶頭像上傳,圖片上傳,文檔上傳等。一些文件上傳功能實現代碼沒有嚴格限制用戶上傳的文件後綴以及文件類型,致使容許攻擊者向某個可經過Web訪問的目錄上傳任意PHP文件,並可以將這些文件傳遞給PHP解釋器,就能夠在遠程服務器上執行任意PHP腳本。服務器

當系統存在文件上傳漏洞時攻擊者能夠將病毒,木馬,WebShell,其餘惡意腳本或者是包含了腳本的圖片上傳到服務器,這些文件將對攻擊者後續攻擊提供便利。根據具體漏洞的差別,此處上傳的腳本能夠是正常後綴的PHP,ASP以及JSP腳本,也能夠是篡改後綴後的這幾類腳本。網絡

m 上傳文件是病毒或者木馬時,主要用於誘騙用戶或者管理員下載執行或者直接自動運行;框架

m 上傳文件是WebShell時,攻擊者可經過這些網頁後門執行命令並控制服務器;運維

m 上傳文件是其餘惡意腳本時,攻擊者可直接執行腳本進行攻擊;

m 上傳文件是惡意圖片時,圖片中可能包含了腳本,加載或者點擊這些圖片時腳本會悄無聲息的執行;

m 上傳文件是假裝成正常後綴的惡意腳本時,攻擊者可藉助本地文件包含漏洞(Local File Include)執行該文件。如將bad.php文件更名爲bad.doc上傳到服務器,再經過PHP的include,include_once,require,require_once等函數包含執行。

此處形成惡意文件上傳的緣由主要有三種:

m 文件上傳時檢查不嚴。一些應用在文件上傳時根本沒有進行文件格式檢查,致使攻擊者能夠直接上傳惡意文件。一些應用僅僅在客戶端進行了檢查,而在專業的攻擊者眼裏幾乎全部的客戶端檢查都等於沒有檢查,攻擊者能夠經過NC,Fiddler等斷點上傳工具輕鬆繞過客戶端的檢查。一些應用雖然在服務器端進行了黑名單檢查,可是卻可能忽略了大小寫,如將.php改成.Php便可繞過檢查;一些應用雖然在服務器端進行了白名單檢查卻忽略了%00截斷符,如應用原本只容許上傳jpg圖片,那麼能夠構造文件名爲xxx.php%00.jpg,其中%00爲十六進制的0x00字符,.jpg騙過了應用的上傳文件類型檢測,但對於服務器來講,由於%00字符截斷的關係,最終上傳的文件變成了xxx.php。

m 文件上傳後修改文件名時處理不當。一些應用在服務器端進行了完整的黑名單和白名單過濾,在修改已上傳文件文件名時卻百密一疏,容許用戶修改文件後綴。如應用只能上傳.doc文件時攻擊者能夠先將.php文件後綴修改成.doc,成功上傳後在修改文件名時將後綴改回.php。

m 使用第三方插件時引入。好多應用都引用了帶有文件上傳功能的第三方插件,這些插件的文件上傳功能實現上可能有漏洞,攻擊者可經過這些漏洞進行文件上傳攻擊。如著名的博客平臺WordPress就有豐富的插件,而這些插件中每一年都會被挖掘出大量的文件上傳漏洞。

3 文件上傳攻擊實例

前文已經提到形成文件上傳漏洞的緣由有多種,下面以其中的第二種爲例,選取 LibrettoCMS文件上傳漏洞(漏洞exploit-db編號爲60560)詳解整個漏洞的利用過程。

Libretto是一款使用PHP語言和MySQL語言開發的內容管理系統。LibrettoCMS 2.2.2版本容許未驗證的用戶上傳文件,而且能夠對已上傳的文件進行後綴名修改。雖然系統限制用戶只能上傳doc和pdf格式的文件,但修改文件名時處理錯誤,致使用戶可修改文件後綴名。攻擊者能夠將惡意文件後綴改成doc或者pdf,上傳成功後再將後綴修改成php便可執行。

l 上傳doc後綴的WebShell

訪問該系統的文件管理頁面/plugins/pgrfilemanager/PGRFileManager.php,上傳一個正常的doc文件,發現能夠上傳成功。編寫一個PHP語言的WebShell後門,也能夠從網上下載已有的WebShell,並將WebShell文件的後綴修改成doc,此處將myshell.php後門修改成myshell.doc。

準備好WebShell之後訪問PGRFileManager.php文件管理頁面將myshell.doc上傳到服務器,如圖1所示,doc後綴的myshell已經成功上傳。此時經過瀏覽器訪問該doc格式的myshell是沒法正常執行的。

 

 

圖1 mybshell.doc成功上傳

l 將WebShell後綴改成php

在文件管理頁面右鍵點擊mybshell.doc並選擇rename進入修改文件名稱頁面,將mybshell.doc改成mybshell.php並點擊Ok按鈕提交修改結果(如圖2所示)。此時myshell文件的後綴已被成功修改了php,受該應用編碼實現影響文件管理頁面已經沒法讀取myshell.php文件,但咱們在系統服務器的文件上傳目錄裏能夠看見修改後的文件(如圖3所示)。

圖2 將mybshell.doc修改成mybshell.php

 

 

圖3 服務器裏myshell後綴已改成php

l 執行Webshell

此時服務器上傳目錄裏的WebShell已是php後綴,服務器環境已能夠正常解析,經過瀏覽器直接訪問該文件:http://192.168.20.174/vlun/Mylibretto/userfiles/myshell.php,輸入WebShell中咱們設置的密碼便可登陸到該WebShell頁面(如圖4所示)。從圖中咱們能夠看到,僅經過該WebShell文件攻擊者就能夠在服務器上進行文件管理,數據庫管理,執行系統命令,執行任意PHP代碼。藉助該WebShell,攻擊者能夠將其餘WebShell文件放置到更深層的目錄中,或者將PHP後門代碼直接添加到系統中已有的不多用的php文件中以防止被系統管理員發現。

 

 

圖4 成功訪問WebShell後門

4 文件上傳漏洞防護

l 系統開發階段的防護

系統開發人員應有較強的安全意識,尤爲是採用PHP語言開發系統。在系統開發階段應充分考慮系統的安全性。對文件上傳漏洞來講,最好能在客戶端和服務器端對用戶上傳的文件名和文件路徑等項目分別進行嚴格的檢查。客戶端的檢查雖然對技術較好的攻擊者來講能夠藉助工具繞過,可是這也能夠阻擋一些基本的試探。服務器端的檢查最好使用白名單過濾的方法,這樣能防止大小寫等方式的繞過,同時還需對%00截斷符進行檢測,對HTTP包頭的content-type也和上傳文件的大小也須要進行檢查。

l 系統運行階段的防護

系統上線後運維人員應有較強的安全意思,積極使用多個安全檢測工具對系統進行安全掃描,及時發現潛在漏洞並修復。定時查看系統日誌,web服務器日誌以發現入侵痕跡。定時關注系統所使用到的第三方插件的更新狀況,若有新版本發佈建議及時更新,若是第三方插件被爆有安全漏洞更應當即進行修補。對於整個網站都是使用的開源代碼或者使用網上的框架搭建的網站來講,尤爲要注意漏洞的自查和軟件版本及補丁的更新,上傳功能非必選能夠直接刪除。除對系統自生的維護外,服務器應進行合理配置,非必選通常的目錄都應去掉執行權限,上傳目錄可配置爲只讀。

l 安全設備的防護

文件上傳攻擊的本質就是將惡意文件或者腳本上傳到服務器,專業的安全設備防護此類漏洞主要是經過對漏洞的上傳利用行爲和惡意文件的上傳過程進行檢測。惡意文件變幻無窮,隱藏手法也不斷推陳出新,對普通的系統管理員來講能夠經過部署安全設備來幫助防護。目前華三通訊公司發佈的SecPath IPS系列產品通過長期的積累,不但能夠基於行爲對網絡中大量文件上傳漏洞的利用進行檢測,同時還能基於內容對惡意文件進行識別。

2、 結束語

對攻擊者來講,文件上傳漏洞一直都是獲取服務器shell的重要途徑。對系統維護人員來講,文件上傳漏洞的巨大危害也無須贅述,積極學習,深刻了解漏洞的相關知識能夠更從容的面對這類攻擊。

 

轉載自:http://www.h3c.com.cn/About_H3C/Company_Publication/IP_Lh/2014/05/Home/Catalog/201408/839582_30008_0.htm

相關文章
相關標籤/搜索