1.目錄文件泄露php
2.目錄遍歷(下載漏洞)web
原理:數據庫
許多的Web應用程序通常會有對服務器的文件讀取查看的功能,大多會用到提交的參數來指明文件名
形如:http://www.xxx.com/getfile=image.jgp後端
當服務器處理傳送過來的image.jpg文件名後,Web應用程序即會自動添加完整路徑,形如「d://site/images/image.jpg」,將讀取的內容返回給訪問者。數組
初看,在只是文件交互的一種簡單的過程,可是因爲文件名能夠任意更改而服務器支持「~/」,「../」等特殊符號的目錄回溯,從而使攻擊者越權訪問或者覆蓋敏感數據,如網站的配置文件、系統的核心文件,這樣的缺陷被命名爲路徑遍歷漏洞。在檢查一些常規的Web應用程序時,也經常有發現,只是相對隱蔽而已。瀏覽器
發現路徑遍歷漏洞
路徑遍歷漏洞的發現,主要是對Web應用程序的文件讀取交互的功能塊,進行檢測,面對這樣的讀取方式:
「http://www.xxx.com/test/downfile.jsp?filename=fan.pdf」
咱們可使用 「../」來做試探,服務器
好比提交Url:「getfile=/fan/fan/*53.pdf」,而系統在解析
是「d://site/test/pdf/fan/fan/../../*53.pdf"
經過「../」跳轉目錄「/fan」,即「d://site/test/pdf/*53.pdf」,
返回了讀取文件的正常的頁面。jsp
路徑遍歷漏洞隱藏通常在文件讀取或者展現圖片功能塊這樣的經過參數提交上來的文件名,從這能夠看出來過濾交互數據是徹底有必要的。惡意攻擊者固然後會利用對文件的讀取權限進行跨越目錄訪問,函數
利用:http://www.xxx.com/test/downfile.jsp?filename=../../../../../etc/passwd網站
者」../../../../boot.ini「,
典型代碼floder.php:
<?php $page=$_GET['name']; $dir=dirname($page); //返回目錄部分的字段 $handle=opendir($dir.".");//打開目錄,回目錄句柄資源 $array_file=array(); //定義數組存儲文件名 while (false !== ($file=readdir($handle))){//readdir() 函數返回目錄中下一個文件的文件名 if ($file!="."&&$file!="..")//判斷目錄末尾是否還有文件,何時返回 { $array_file[]=$file;//輸出文件名 } } closedir($handle); print_r($array_file);//print_r用於打印數組或對象 ?>
payload:http://127.0.0.1/floder.php?name=../
繞過思路:
(1) 加密參數傳遞的數據;
在Web應用程序對文件名進行加密以後再提交,好比:「downfile.jsp?filename= ZmFuLnBkZg- 「,在參數filename用的是Base64加密,而攻擊者要想繞過,只需簡單的將文件名加密後再附加提交便可。要注意想辦法base64.decode識別
(2) 編碼繞過,
嘗試使用不一樣的編碼轉換進行過濾性的繞過,好比Url編碼,經過對參數進行Url編碼提交,「downfile.jsp?filename= %66%61%6E%2E%70%64%66「來繞過。
(3) 目錄限定繞過;
在有些Web應用程序是經過限定目錄權限來分離的。固然這樣的方法不值得可取的,攻擊者能夠經過某些特殊的符號「~「來繞過。形如這樣的提交「downfile.jsp?filename=~/../boot」。能過這樣一個符號,就能夠直接跳轉到硬盤目錄下了。本質是加入亂七八糟的繞過waf識別
(4) 繞過文件後綴過濾;
一些Web應用程序在讀取文件前,會對提交的文件後綴進行檢測,攻擊者能夠在文件名後放一個空字節的編碼,來繞過這樣的文件類型的檢查。
例如:../../../../boot.ini%00.jpg,Web應用程序使用的Api會容許字符串中包含空字符,當實際獲取文件名時,則由系統的Api會直接截短,而解析爲「../../../../boot.ini」。
在類Unix的系統中也可使用Url編碼的換行符,例如:../../../etc/passwd%0a.jpg若是文件系統在獲取含有換行符的文件名,會截短爲文件名。也能夠嘗試%20,例如: ../../../index.jsp%20
(5) 繞過來路驗證。
Http Referer : HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的
在一些Web應用程序中,會有對提交參數的來路進行判斷的方法,而繞過的方法能夠嘗試經過在網站留言或者交互的地方提交Url再點擊或者直接修改Http Referer便可,這主要是緣由Http Referer是由客戶端瀏覽器發送的,服務器是沒法控制的,而將此變量看成一個值得信任源是錯誤的。
修復以及預防:
對傳來的參數作過濾
文件ID使用隨機數命名
文件路徑保存至數據庫,用戶提交文件對應ID下載文件,路徑識別拼接都在後端,黑客沒法操做
下載文件以前作權限判斷,設置好目錄權限。