任意文件下載漏洞,正常的利用手段是下載服務器文件,如腳本代碼,服務器配置或者是系統配置等等。但是有的時候我們可能根本不知道網站所處的環境,以及網站的路徑,這時候我們只能利用./ ../來逐層猜測路徑,讓漏洞利用變得繁瑣。
漏洞介紹
一些網站由於業務需求,往往需要提供文件查看或文件下載功能,但若對用戶查看或下載的文件不做限制,則惡意用戶就能夠查看或下載任意敏感文件,這就是文件查看與下載漏洞。
利用條件
* 存在讀文件的函數
* 讀取文件的路徑用戶可控且未校驗或校驗不嚴
* 輸出了文件內容
漏洞危害
下載服務器任意文件,如腳本代碼、服務及系統配置文件等
可用得到的代碼進一步代碼審計,得到更多可利用漏洞
漏洞挖掘
可以用Google hacking或Web漏洞掃描器
Google search利用
inurl:"readfile.php?file="
從鏈接上看,形如:
• download.php?path= • download.php?file= • down.php?file= • data.php?file= • readfile.php?file= • read.php?filename=
從參數名看,形如:
• &RealPath= • &FilePath= • &filepath= • &Filepath= • &Path= • &path= • &inputFile= • &Inputfile= • &url= • &urls= • &Lang= • &dis= • &data= • &Data= • &readfile= • &filep= • &src= • &menu= • META-INF • WEB-INF
當遇到一個任意文件下載時,我們的一般利用思路:
下載常規的配置文件,例如: ssh,weblogic,ftp,mysql等相關配置
下載各種.log文件,從中尋找一些后台地址,文件上傳點之類的地方,如果運氣好的話會獲得一些前輩們的后門。
下載web業務文件進行白盒審計,利用漏洞進一步攻入服務器。
以上是正常情況下的利用思路,Daybreak在從事行業到現在,將這些思路進行延伸,整理分析出了自己的一套思路。
當我們遇到一個任意文件下載漏洞時首先要注意下載的權限問題。因為權限決定我們能下載的文件范圍。
嘗試讀取/root/.bash_history看自己是否具有root權限。如果沒有的話。我們只能按部就班的利用../來回跳轉讀取一些.ssh下的配置信息文件,讀取mysql下的.bash_history文件。來查看是否記錄了一些可以利用的相關信息。然后逐個下載我們需要審計的代碼文件,但是下載的時候變得很繁瑣,我們只能嘗試去猜解目錄,然后下載一些中間件的記錄日志進行分析。
如果我們遇到的是java+oracle/ jsp+oracle環境,
可以先下載/WEB-INF/classes/applicationContext.xml 文件,這里面記載的是web服務器的相應配置,然后下載/WEB-INF/classes/xxx/xxx/ccc.class對文件進行反編譯,然后搜索文件中的upload關鍵字看是否存在一些api接口,如果存在的話我們可以本地構造上傳頁面用api接口將我們的文件傳輸進服務器。
如果具有root權限
這時候很多人肯定會說 具有root權限直接去讀shadow文件了 但是很多時候我們遇到的服務器可能只對外開放了 80,443兩個端口這時候我們即使獲得了密碼作用也不打,但是具備root權限對任意文件下載利用是絕對的。
在linux中有這樣一個命令 locate 是用來查找文件或目錄的,它不搜索具體目錄,而是搜索一個數據庫/var/lib/mlocate/mlocate.db。這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,並且每天自動更新一次。
當我們不知道路徑是什么的情況下,這個可以說是一個核武器了,我們利用任意文件下載漏洞將mlocate.db文件下載下來,利用locate命令將數據輸出成文件,這里面包含了全部的文件路徑信息。
locate 讀取方法
locate mlocate.db admin
可以將mlocate.db中包含admin內容全部輸出來
利用這個文件我們可以獲取到該服務器任何我們想要的內容並下載出來而不用一個一個去猜解目錄,但是這個文件只有root用戶才能讀取。
另一方面我們也可以利用linux內核的一個文件/proc/self/cmdline當前進程的cmdline參數,可以獲取到路徑信息。
總體來說,任意文件下載漏洞的利用主要是為了信息收集,我們通過對服務器配置文件的下載,獲取到大量的配置信息、源碼,從而根據獲取的信息來進一步挖掘服務器漏洞從而入侵。
以下整理了一些下載利用文件。
Windows:
C:\boot.ini //查看系統版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存儲系統初次安裝的密碼
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini //Windows系統的一個基本系統配置文件
Linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //記錄每個訪問計算機用戶的公鑰
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用戶歷史命令記錄文件
/root/.mysql_history //mysql歷史命令記錄文件
/proc/mounts //記錄系統掛載設備
/porc/config.gz //內核配置文件
/var/lib/mlocate/mlocate.db //全文件路徑
/porc/self/cmdline //當前進程的cmdline參數
漏洞驗證
• index.php?f=../../../../../../etc/passwd
• index.php?f=../index.php
• index.php?f=file:///etc/passwd
注:當參數f的參數值為php文件時,若是文件被解析則是文件包含漏洞,
若顯示源碼或提示下載則是文件查看與下載漏洞
修復方案
* 過濾.(點),使用戶在url中不能回溯上級目錄
* 正則嚴格判斷用戶輸入參數的格式
* php.ini配置open_basedir限定文件訪問范圍
參考鏈接
http://mp.weixin.qq.com/s/iYwd0vIlratE_t_VasroLA
作者:reber
鏈接:https://www.jianshu.com/p/f4b06f59c4cb
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。