?

基于PHP文件上傳漏洞防范策略研究

2021-03-15 05:44陳軍章
安陽工學院學報 2021年2期
關鍵詞:白名單服務器端攻擊者

陳軍章

(許昌信息工程技術研究中心,許昌職業技術學院,河南 許昌 461000)

1 文件上傳漏洞概述

1.1 文件上傳漏洞簡介

文件上傳是WEB開發中一項基本的功能,是指將本地文檔、視頻、音頻、圖片等文件上傳到服務器上,以便自己或其他用戶下載或瀏覽的過程,如論壇發圖片、發微信朋友圈、發微博等都用到了上傳功能[1]。

文件上傳漏洞是指程序員在WEB應用中利用客戶端上傳功能控制、檢測、處理的不足,通過向WEB服務器上傳特定的可執行文件(如木馬、Web-Shell、病毒、惡意腳本等)以達到獲取關鍵數據操控主機的目的。

1.2 文件上傳漏洞的危害

WEB應用開發人員在實現文件上傳功能過程中,如果沒有對文件格式、后綴嚴格校驗,WEB中存在文件上傳漏洞,攻擊者可能利用此漏洞直接上傳病毒、木馬、釣魚圖片、包含了腳本的圖片、惡意腳本文件、WebShell等,再通過訪問這些惡意的腳本中的惡意代碼,最終可能會導致用戶信息泄露,被釣魚、欺詐,甚至使攻擊者可以直接上傳WebShell到服務器,進而得到自己想要的信息和權限,最終達到對數據庫執行、服務器文件管理、服務器命令執行等惡意操作,甚至完全控制服務器系統,在服務器系統中為所欲為。

2 文件上傳漏洞檢測技術分析

目前,針對文件上傳漏洞WEB開發和服務,管理人員也加入了文件上傳檢測機制,大致有客戶端腳本檢測、服務器端文件擴展名檢測、服務器端內容檢測、服務端Content-Type類型檢測、服務端path參數檢測等[2,3]。

2.1 客戶端腳本檢測

這類檢測通常是在上傳頁面里添加特定的檢測上傳文件擴展名的代碼,通過判斷擴展名是否合法,從客戶端檢測控制上傳文件的安全性[4,5]。但對于這種檢測方法,專業的攻擊者可以通過將需要上傳的惡意代碼文件類型改為允許上傳的類型,很輕松的躲過文件上傳的檢測。例如:將hack.php改為hack.jpg上傳,配置BurpSuite代理進行抓包,然后再將文件名hack.jpg改為hack.php。

2.2 服務器端文件擴展名檢測

在服務器端對文件擴展名進行檢測就是設置黑名單或白名單[6,7],即黑名單是禁止特定擴展名的文件上傳,白名單是僅允許指定擴展名的文件上傳。服務器端檢測包括了Content-Type檢測、黑名單檢測、白名單檢測等。

Content-Type檢測是在用戶提交上傳文件時驗證是否為要求的文件類型,如果是允許上傳,如果不是則禁止上傳。這種檢測方法可以通過抓包來修改Http開頭的Content-Type輕松繞過。

服務器端的黑名單檢測往往是把常見的危險文件的擴展名放在一個文件中(如execomatdlljsvbsphphtmlaspcer等等),當客戶端上傳文件時,對上傳文件的擴展名進行過濾,如果上傳的文件擴展名在黑名單中則不允許上傳。這種檢測方式看似可以有效地防止危險文件上傳,但限制不夠全面(如IIS默認支持解析aspcdxasacer等文件類型),攻擊者通常還可以利用擴展名的大小寫(如上傳.Php)、特殊文件名(如“.exe空格”)、名單列表繞過(如上傳黑名單中不存在的擴展名文件)等方式完成攻擊。

白名單檢測是在服務器端指定允許上傳文件的擴展名,如果上傳文件的擴展名在指定的范圍內,允許上傳,否則禁止上傳。顯然,白名單檢測要比黑名單過濾安全性高。在白名單檢測中,攻擊者可以使用%00、0x00、0x0a等截斷繞過白名單檢測(如上傳photo.jpg,BurpSuite抓包,將文件名改為photo.php%00.jpg,選中%00,進行urldecode),或使用雙寫擴展名繞過白名單檢測(如photo.php.jpg)。

2.3 服務器端文件內容檢測

服務器端文件內容檢測是指當服務器接收到用戶上傳文件后,通過檢測文件幻數、文件相關信息、文件渲染等方式驗證文件的合法性,如果合法則允許上傳,否則禁止上傳[8,9]。針對文件內容檢測,攻擊者可以通過制作的圖片馬進行繞過(burpsuit改包或者copy 1.jpg/b+2.php/a 3.jpg生成圖片馬或者直接用別人做好的圖片馬)。

2.4 服務器解析漏洞

2.4.1 IIS解析漏洞

IIS7.0后對之前版本的漏洞進行了修復,但在IIS7.0后的服務中開啟Fast-CGI狀態,服務器在解析URL地址時,會將xxx.jpg/xxx.php解析為PHP文件。這也會使攻擊者用此繞過服務器的檢測。同時,在Windows操作系統中,文件名不能以空格或“.”開頭,也不能以空格或“.”結尾。當把一個文件命名為以空格或“.”開頭或結尾時,會自動地去掉開頭和結尾處的空格和“.”。利用此特性,也可能造成“文件解析漏洞”[10]。

2.4.2 Apache解析漏洞

Apache解析文件的規則是從右至左開始判斷解析,如果遇到不可識別文件后綴時,Apache解析就再往左判斷。例如:hack.php.cde.abc,“.cde”和“.abc”這兩種后綴是apache在解析時不可識別的,apache在解析時就會把hack.php.cde.abc解析成為hack.php。

Apache解析漏洞[11](CVE-2017-15715),在Apache 2.4.0到2.4.29版本配置文件中的php解析表達式<FilesMatch.php$>存在可以匹配字符串結尾的換行符漏洞,攻擊者可以利用"%0A"繞過上傳黑名單上傳文件。

2.4.3 nginx解析漏洞

在nginx8.03以下的版本也存在和IIS7一樣的漏洞,Nginx默認也是以CGI的方式支持PHP解析的,服務器在解析URL地址時,會將xxx.jpg/xxx.php解析為PHP文件。還有一種方法是上傳一個名字為 hello.jpg,文件內容為:<?php fputs(fopen('hack.php','w'),'<?php eval($_POST[cmd])?>');?>。然后訪問hello.jpg/.php,在這個目錄下就會生成一個木馬文件hack.php。

3 文件上傳漏洞防御策略

針對以上可能出現的文件上傳漏洞,應該從WEB應用的開發、WEB容器、服務平臺的配置管理、WEB服務器運維、網絡安全設備運維等多方面打造立體式的文件上傳漏洞防御體系,如圖1所示。

圖1 文件上傳漏洞防御體系

3.1 WEB應用開發階段防御

WEB應用開發過程中雖然在客戶端對上傳文件進行JS檢測可以被專業的攻擊者很容易突破,但對一般的攻擊者而言,還是可以對基礎性的試探起到一定的防御效果。

在服務器端對文件類型的檢查可以使用MIME Type、后綴檢查等多種方式結合,在檢查過程中強烈推薦使用白名單方式進行過濾,黑名單的方式已經無數次被證明是不可靠的。同時還需對%00截斷符、對HTTP包頭的Content-Type和上傳文件的大小進行檢查。此外,對于圖片的處理,可以使用resize函數或壓縮函數對圖片進行預處理,在處理圖片的過程中破壞圖片中可能包含的惡意代碼。

在服務器接收文件時,使用隨機數改寫文件名和文件路徑。攻擊者要執行上傳文件中的代碼,首先他要訪問到這個文件,通過使用隨機數改變上傳后的文件名和路徑,會導致攻擊者找不到上傳的文件,而無法進行攻擊。

3.2 WEB服務器端防御

在WEB服務器端文件上傳的目錄應設置為不可執行。通過對WEB容器設置不可執行權限,即使攻擊者上傳了含有惡意的腳本文件,也會因為不能解析執行而無法發動攻擊。

在WEB服務器端為文件服務器單獨設置域名。由于瀏覽器同源策略的關系,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題都將得到解決。

在服務器端增加安全設備WAF。WAF是專門的WEB應用安全設備,可以對WEB應用程序客戶端的各類請求進行內容檢測和驗證,確保其安全性與合法性,對非法的請求予以實時阻斷,通過對漏洞的上傳利用行為和惡意文件的上傳過程檢測,從而達到有效防御的目的。

3.3 WEB運維人員防御

隨著技術的不斷進步,隱藏的攻擊手法不斷推陳出新,惡意文件也在千變萬化,WEB服務運行后,WEB的運維人員就變得尤為重要。運維人員應有較強的安全意識,在平時的運維過程中,經常使用安全檢測工具對WEB系統進行安全掃描,及時發現潛在漏洞并修復。定時查看系統日志,通過查看WEB服務器日志以發現入侵痕跡。定時關注WEB系統所使用到的第三方插件的更新情況,如有新版本發布建議及時更新,如果第三方插件被爆有安全漏洞更應立即進行修補。定時關注WEB服務搭建平臺版本及補丁的更新,特別是漏洞修復補丁,應做到及早更新修復。

4 結束語

文件上傳漏洞的危害性無須贅述,對攻擊者來講,文件上傳漏洞一直是攻擊WEB甚至服務器的一種重要利用手段,隨著技術的不斷更新,對WEB開發人員和WEB運維人員來說,唯有不斷地學習,深入了解掌握漏洞相關知識,才可以更加從容地應對這類攻擊。

猜你喜歡
白名單服務器端攻擊者
基于貝葉斯博弈的防御資源調配模型研究
UAC提示太煩 教你做個白名單
2019年“移動互聯網應用自律白名單”出爐
正面迎接批判
正面迎接批判
基于Qt的安全即時通訊軟件服務器端設計
基于Qt的網絡聊天軟件服務器端設計
移動互聯網白名單認證向中小企業開放
一種基于Java的IM即時通訊軟件的設計與實現
基于C/S架構的嵌入式監控組態外設擴展機制研究與應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合