淺析檔案上傳漏洞
檔案上傳
成因
- 對於上傳檔案的字尾名(副檔名)沒有做較為嚴格的限制
- 對於上傳檔案的MIMETYPE 沒有做檢查
- 許可權上沒有控制對於上傳的檔案的檔案許可權,(尤其是對於shebang型別的檔案)
- 對於web server對於上傳檔案或者指定目錄的行為沒有做限制
客戶端校驗
-
前段js驗證
- 可通過審計修改js程式碼或burp改包繞過
伺服器校驗
-
content-type欄位校驗
- 將Content-Type修改為image/gif,或者其他允許的型別
- 刪除整行
- 刪除掉ontent-Type: image/jpeg只留下c,將.php加c後面即可,但是要注意,雙引號要跟著c.php
- 將Content-Type修改為content-Type
- 將 Content-Type: application/octet-stream 冒號後面 增加一個空格
-
檔案頭校驗
- 將檔案頭修改為可允許上傳檔案型別的檔案頭
-
檢查副檔名
-
黑名單策略
-
列表名繞過
- 查詢黑名單中的漏網之魚,比如asa,cer,cer,ashx,asa,cer,cdx,htr,
-
大小寫繞過
- 比如aSp,pHp等
-
能被解析的字尾名:jsp,jspx,jspf,asp,asa,cer,aspx,ashx,php,php ,php3,php4,exe,exee
-
上傳.htaccess檔案
-
通過.htaccess 檔案呼叫 php 的解析器去解析一個檔名只要包含”cimer”這個字串的任意檔案。一個自定義的.htaccess 檔案可以以各種各樣的去繞過很多上傳驗證機制。(配合黑名單檢測)
-
1.建立.htaccess 檔案,內容如下:<FilesMatch “cimer”>
SetHandler application/x-httpd-php
-
上傳 php 木馬檔名包含 cimer
- 將一句話密碼設定為cimer
-
-
利用 php 解析器來解析 jpg 檔案建立.htaccess 檔案內容如下:AddType application/x-httpd-php .jpg
-
-
空格繞過
- 在字尾名後新增空格
-
檔名繞過
- php1,php2,php3,php4,php5,Php,aSp
-
特殊字元繞過
- 1.asp_
-
-
白名單策略
- 通過解析漏洞上傳
-
0x00截斷繞過
假設檔案的上傳路徑為【http://xx.xx.xx.xx/upfiles/lubr.php.jpg】,通過抓包截斷將【lubr.php】後面的【.】換成【0x00】。在上傳的時候,當檔案系統讀到【0x00】時,會認為檔案已經結束,從而將【lubr.php.jpg】的內容寫入到【lubr.php】中,從而達到攻擊的目的。
上傳抓包後(假如上傳的jpg檔名字為1.jpg)在hex中找到1.jpg對應的十六進位制,將“.”對應的十六進位制(.的十六進位制是2e)改為00,go,在上刀連線就行了-
00截斷就是利用程式設計師在寫程式時對檔案的上傳路徑過濾不嚴格,產生0x00上傳截斷漏洞。PS:0x00是字串的結束識別符號
-
例:1.php%00.jpg
-
限制條件
- PHP<5.3.29,且GPC關閉
-
原理
- 0x00是字串的結束識別符號,系統在對檔名的讀取時,如果遇到0x00,就會認為讀取已結束。
- 注:00指的是檔案的16進位制內容裡的00,而不是檔名中的00 !!!就是說系統是按16進位制讀取檔案(或者說二進位制),遇到ascii碼為零的位置就停止,而這個ascii碼為零的位置在16進位制中是00,用0x開頭表示16進位制,也就是所說的0x00截斷。
-
-
雙副檔名繞過
- apache的conf配置有AddHandler php5-script.php沒有註釋掉,檔名1.php.jpg就能當作php執行
-
-
檔案型別驗證
- 通過抓包將content-type欄位改為允許上傳的型別
原理
檔案上傳漏洞是指網路攻擊者上傳了一個可執行的檔案到伺服器,伺服器未經任何檢驗或過濾,從而造成檔案的執行。這裡上傳的檔案可以是木馬,病毒,惡意指令碼或者WebShell等。
危害
- 上傳檔案是Web指令碼語言,伺服器的Web容器解釋並執行了使用者上傳的指令碼,導致程式碼執行。
- 上傳檔案是Flash的策略檔案crossdomain.xml,黑客用以控制Flash在該域下的行為(其他通過類似方式控制策略檔案的情況類似);
- 上傳檔案是病毒、木馬檔案,黑客用以誘騙使用者或者管理員下載執行。
- 上傳檔案是釣魚圖片或為包含了指令碼的圖片,在某些版本的瀏覽器中會被作為指令碼執行,被用於釣魚和欺詐。
防禦
- 副檔名服務端使用白名單策略校驗。
- 檔案內容服務端校驗
- 上傳檔案隨機重新命名
- 隱藏上傳檔案路徑
- 檔案上傳的目錄設定為不可執行
- 單獨設定檔案伺服器的域名
解析漏洞
IIS 6.0 在處理含有特殊符號的檔案路徑時會出現邏輯錯誤,從而造成檔案解析漏洞。
-
IIS解析漏洞
-
IIS6.0
-
目錄解析:/xx.asp/xx.jpg ,如果一個目錄以"xxx.asp"的形式命名,那麼該目錄下的所有型別檔案都會被當做asp檔案來進行解析執行
-
檔案解析:test.asp;.jpg ,在IIS6.0下,分號後面的不被解析,也就是說test.asp;.jpg會被伺服器看成是test.asp
-
還有IIS6.0 預設的可執行檔案除了asp還包含這三種.asa、.cer、.cdx
-
PUT漏洞
-
成因:IIS Server 在 Web 服務擴充套件中開啟了 WebDAV ,配置了可以寫入的許可權,造成任意檔案上傳。
-
修復
- 關閉 WebDAV 和寫許可權
-
-
短檔名猜解 PS:IIS6.0~10.0都受影響
-
成因:IIS 的短檔名機制,可以暴力猜解短檔名,訪問構造的某個存在的短檔名,會返回404,訪問構造的某個不存在的短檔名,返回400。
-
修復
-
升級 .net framework
-
修改登錄檔禁用短檔名功能
- 快捷鍵 Win+R 開啟命令視窗,輸入 regedit 開啟登錄檔視窗,找到路徑:
-
-
-
-
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,將其中的 NtfsDisable8dot3NameCreation這一項的值設為 1,“1”代表不建立短檔名格式,修改完成後,需要重啟系統生效
- CMD 關閉 NTFS 8.3 檔案格式的支援
- 將 web 資料夾的內容拷貝到另一個位置,如 c:\www 到 d:\w ,然後刪除原資料夾,再重新命名 d:\w 到 c:\www。
- 修復成功後顯示:Server is not vulnerable
- 侷限性
- 此漏洞只能確定前6個字元,如果後面的字元太長、包含特殊字元,很難猜解
- 如果檔名本身太短(無短檔名)也是無法猜解的
- 如果檔名前6位帶空格,8.3格式的短檔名會補進,和真實檔名不匹配
- 遠端程式碼執行
- 成因:在 IIS6.0 處理 PROPFIND 指令的時候,由於對 url 的長度沒有進行有效的長度控制和檢查,導致執行 memcpy 對虛擬路徑進行構造的時候,引發棧溢位,從而導致遠端程式碼執行。
- 修復
- 關閉WebDAV服務
- 使用相關防護裝置
- IIS7.0/7.5
- test.jpg/.php
URL 中檔案字尾是 .php ,便無論該檔案是否存在,都直接交給 php 處理,而 php 又預設開啟 “cgi.fix_pathinfo” ,會對檔案進行“修理”,可謂“修理”?舉個例子,當 php 遇到路徑 “/aaa.xxx/bbb.yyy” 時,若 “/aaa.xxx/bbb.yyy” 不存在,則會去掉最後的 “bbb.yyy” ,然後判斷 “/aaa.xxx” 是否存在,若存在,則把 “/aaa.xxx” 當作檔案。
若有檔案 test.jpg ,訪問時在其後加 /.php ,便可以把 “test.jpg/.php” 交給 php ,php 修理檔案路徑 “test.jpg/.php” 得到 ”test.jpg” ,該檔案存在,便把該檔案作為 php 程式執行了。
修復
- 對新建目錄檔名進行過濾,不允許新建包含‘.’的檔案
- 取消網站後臺新建目錄的功能,不允許新建目錄;
- 限制上傳的指令碼執行許可權,不允許執行指令碼;
- 過濾 .asp/xm.jpg,通過 ISApi 元件過濾。
相關文章
- 探索網路安全:淺析檔案上傳漏洞
- 檔案上傳漏洞
- WEB漏洞——檔案上傳Web
- Web安全-檔案上傳漏洞Web
- WEB安全:檔案上傳漏洞Web
- 檔案包含漏洞(本地包含配合檔案上傳)
- <web滲透-檔案上傳漏洞>Web
- 檔案上傳(解析)漏洞詳解
- 檔案上傳漏洞總結(全)
- 任意檔案上傳漏洞修復
- 檔案上傳漏洞思路詳解
- Web 安全漏洞之檔案上傳Web
- 檔案上傳漏洞(繞過姿勢)
- 網站漏洞修復之Metinfo 檔案上傳漏洞網站
- 解析漏洞與檔案上傳漏洞—一對好兄弟
- 3. 檔案上傳漏洞——漏洞總結筆記筆記
- 檔案上傳漏洞防範-檔案型別檢測型別
- 漏洞重溫之檔案上傳(總結)
- 文字檔案上傳漏洞[任意.繞過.解析]
- fckeditor<=2.6.4任意檔案上傳漏洞
- ctfshow檔案上傳漏洞做題記錄
- php檔案上傳之多檔案上傳PHP
- 檔案上傳之解析漏洞編輯器安全
- 米安程式碼審計 05 檔案上傳漏洞
- 安全漏洞問題5:上傳任意檔案
- PHP未明遠端任意檔案上傳漏洞(轉)PHP
- 【檔案上傳繞過】路徑拼接問題導致上傳漏洞
- APK檔案淺析-AndroidAPKAndroid
- 檔案上傳漏洞全面滲透姿勢總結
- 墨者學院WebShell檔案上傳漏洞分析溯源Webshell
- 突破上傳之檔案包含漏洞以及修復方案
- PHP檔案上傳漏洞原理以及防禦姿勢PHP
- Android 檔案儲存淺析Android
- java中的JAR檔案淺析JavaJAR
- 單個檔案上傳和批量檔案上傳
- 檔案上傳
- RxRetrofit - 終極封裝 - 深入淺出 & 檔案上傳封裝
- SpringMVC 單檔案上傳與多檔案上傳SpringMVC