任意文件讀取&下載漏洞的全面解析及利用
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
前言本人在近期實(shí)戰(zhàn)時也是挖到了任意文件下載漏洞,想著如何對此漏洞進(jìn)行最大化利用,遂花了點(diǎn)時間去學(xué)習(xí)此漏洞的利用,發(fā)現(xiàn)網(wǎng)上知識點(diǎn)過于分散,正好看到社區(qū)這方面的知識很少,于是就想著自己寫一篇關(guān)于任意文件讀取的漏洞文章。 漏洞原理在目前的很多業(yè)務(wù)系統(tǒng)中,很多上傳點(diǎn)都無法進(jìn)行利用,最常見的就是上傳一個文件不返回上傳路徑,即使我們成功上傳了馬子也無法進(jìn)行后續(xù)連接啊。雖然不返回路徑,但是我上傳的文件我應(yīng)當(dāng)可以進(jìn)行讀取的,所以也就衍生出很多網(wǎng)站采用一個接口的方式進(jìn)行文件的下載&讀取的需求,但是這種方式真的安全嗎? 在日常中,我們經(jīng)常會遇到以下幾種下載文件的url格式
首先說第一種url,這種url存在的安全問題很少,如果非要測的話,可以對后面的文件名和后綴進(jìn)行Fuzz,從而在文件中獲取敏感信息等 接著第二種url格式,這種url既然id參數(shù)可控,那么我們可以對此參數(shù)進(jìn)行SQL注入,服務(wù)器既然接收了id參數(shù),那么應(yīng)該會對id參數(shù)進(jìn)行數(shù)據(jù)庫查詢操作。如果這個id值有規(guī)律,那么也可以對id值進(jìn)行遍歷操作。 最后第三種url格式,此種安全問題就是可能存在任意文件下載漏洞,也是本文著重講解的主要點(diǎn)。 在Linux和Windows系統(tǒng)中,有點(diǎn)開發(fā)經(jīng)驗(yàn)的師傅都知道,在系統(tǒng)中可以用絕對路徑和相對路徑來表示一個文件的地址,此處不作相對路徑和絕對路徑的講解。./在系統(tǒng)中表示當(dāng)前目錄,../為當(dāng)前目錄的上一級目錄。這樣的話安全問題就顯而易見了,我們只需要在我們控制的文件名前加上 ../ 跳到上一級目錄,然后一直跳就可以跳到根路徑了,想下載&讀取需要的文件就可以造成任意文件讀取漏洞了。 漏洞位置根據(jù)功能點(diǎn)判斷文件上傳后的返回url中、文件下載功能,文件預(yù)覽功能,文件讀取功能 如果上訴功能點(diǎn)存在那么可以抓包根據(jù)下面的url判斷 根據(jù)url判斷
繞過思路1、Fuzz文件簡單粗暴,但是burp發(fā)包的時候注意編碼問題,取消勾選自動url編碼 2、url編碼繞過
常用繞過一般是后兩種,點(diǎn)一般不會被過濾,因?yàn)槲募虚g也會存在一個 . 3、二次編碼繞過
4、將 / 替換為 \ 繞過5、%00繞過?name=.%00./.%00./.%00./.%00./etc/passwd 6、雙寫繞過有些代碼會進(jìn)行過濾,會把 ../ 置空,那么利用 ....// 代替 ../ ,利用 ..// 代替 / 這種情況很少見,視情況而定 漏洞利用Linux 系統(tǒng)下利用
思路:1、讀取/etc/passwd 和/etc/shadow 進(jìn)行撞庫解密,如果能解出來那么直接ssh登錄 2、讀取/root/.ssh/id_rsa 等ssh登錄密鑰文件,從而通過密鑰免密登錄服務(wù)器 3、讀取/root/.bash_history 終端命令操作記錄,進(jìn)而從命令記錄中推測出web源碼位置,審計源碼進(jìn)行g(shù)etShell 4、讀取數(shù)據(jù)庫配置信息,遠(yuǎn)程連接數(shù)據(jù)庫,進(jìn)行脫庫等操作 5、讀取/var/lib/mlocate/mlocate.db 文件信息,獲取全文件絕對路徑,想下載啥就下啥了 總結(jié):以上一些利用思路,核心思想不過與對數(shù)據(jù)的獲取或者是權(quán)限的獲取,黑客的目的也不過如此,數(shù)據(jù)和權(quán)限這兩者其實(shí)是可以互相轉(zhuǎn)換的,當(dāng)一個無法進(jìn)行利用時,那么可以轉(zhuǎn)換一下思路對另一個進(jìn)行利用 Windows 系統(tǒng)利用
由于windows服務(wù)器特性,可以分盤操作,導(dǎo)致我們黑盒測試很難知道目標(biāo)服務(wù)器是否存在其他盤符,即使知道了盤符也很難知道絕對路徑,所以window系統(tǒng)很難利用此漏洞。 修復(fù)建議1、限定文件訪問范圍,在php.ini等配置文件中配置open__basedir限定文件訪問范圍 2、禁止客戶端傳遞../這些敏感字符 3、文件放在web無法直接訪問的目錄下。 實(shí)戰(zhàn)案例在點(diǎn)擊文件下載的時候發(fā)現(xiàn)url格式如圖所示,當(dāng)輸入任意字符時會返回文件不存在,如果輸入存在的文件名則會直接下載文件 因?yàn)榉?wù)器是Linux系統(tǒng),所以我們可以讀取/etc/passwd文件來判斷是否存在漏洞。依次進(jìn)行 ../ 跳目錄測試 發(fā)現(xiàn)測試了許久都是返回文件不存在,那可以考慮當(dāng)前web程序可能存在防護(hù)了,一般開發(fā)者在代碼層進(jìn)行防護(hù)的話,一般都是過濾掉 . / 這種字符進(jìn)行防護(hù),根據(jù)上面提到的方式進(jìn)行繞過處理 單次編碼不行,那就繼續(xù)在原來編碼的基礎(chǔ)上進(jìn)行二次url編碼,再測試一波,最終也是驗(yàn)證成功漏洞存在 驗(yàn)證漏洞存在了,如果是在未授權(quán)的情況下進(jìn)行利用,那么可以直接提交漏洞了;如果在已授權(quán)情況下,還想進(jìn)一步對漏洞進(jìn)行利用更深入,那么可以考慮怎么進(jìn)行更深入的利用呢。 我先是讀取/root/.bash_history 內(nèi)容,根據(jù)命令操作拼接路徑,先是下載了目標(biāo)網(wǎng)站的源碼,我也是從源碼中讀到一些數(shù)據(jù)庫賬號密碼等信息,可惜都是內(nèi)網(wǎng),我不能利用到。如果你是代碼審計大牛,那么可以直接開始審計代碼,從代碼中挖掘漏洞,進(jìn)行g(shù)etShell。很顯然我不是 后來我也是想著下載ssh公鑰文件等思路,可惜的是,此目標(biāo)網(wǎng)站只對外開放web服務(wù)端口,所以我無法進(jìn)行其他服務(wù)的攻擊利用。 既然從目標(biāo)中獲取權(quán)限不行,那我轉(zhuǎn)換一下思路,通過漏洞獲取數(shù)據(jù),再從獲得數(shù)據(jù)中提取信息,從而獲取系統(tǒng)的更高權(quán)限。 Linux下有mlocate.db文件,此文件介紹如下,我可以下載這個文件,再從這個文件中獲取其他文件的絕對地址,這樣的話我就可以下載到目標(biāo)服務(wù)器上任意的文件了 將獲取到的全文件數(shù)據(jù)庫解出明文,然后從明文中翻找重要文件進(jìn)行下載 在計算機(jī)中,重要文件,無非就是數(shù)據(jù)和權(quán)限相關(guān),所以我們主要找備份文件和數(shù)據(jù)庫文件 .rar、.zip、.7z、.tar、.gz、.tar.gz、.bz2、.tar.bz2、.sql、.bak、.dat、.txt、.log、.mdb 在全文件路徑中搜索以上格式文件,再重點(diǎn)關(guān)注一下不同路徑下的文件,因?yàn)長inux系統(tǒng)中不同文件夾的作用是不一樣的,最后,我也是成功找到不少數(shù)據(jù)庫備份文件rdb
后來也是因?yàn)檫@提取的數(shù)據(jù)量過于龐大,文件太大打開太卡了,只能自己寫一個腳本提取數(shù)據(jù)了 最后也是成功將數(shù)據(jù)提取出來,可見成功獲取到全站1.6W用戶數(shù)據(jù),一不小心就脫庫了呀,事后本人也是提交了漏洞并將相關(guān)數(shù)據(jù)全部銷毀。 原文來自:https://forum.butian.net/share/2664 該文章在 2025/5/14 10:03:22 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |