文件包含漏洞——DVWA练习
前言:在學(xué)習(xí)文件上傳時,制作的圖片馬需要我們手動去解析,而解析的方法就算用到了文件包含漏洞,所以這次就來學(xué)習(xí)一下文件包含漏洞。
文件包含漏洞簡介
(一)文件包含可以分為本地文件包含和遠(yuǎn)程文件包含兩種。文件包含和文件上傳一樣本身并不是漏洞,而是攻擊者利用了包含的特性加上了應(yīng)用本身對文件控制不嚴(yán)格,對include進(jìn)來的文件不可控,才導(dǎo)致了一系列危害。
(二)本地文件包含就是通過URL將服務(wù)器本地的其他文件include進(jìn)來。遠(yuǎn)程文件包含就是將遠(yuǎn)程服務(wù)器的文件include進(jìn)來。
(三)最主要的是,包含進(jìn)來的文件都以當(dāng)前腳本文件解析,例如,當(dāng)前測試系統(tǒng)是Apache加php環(huán)境,那么被include進(jìn)來的文件,不管是什么類型,例如圖片,文本文檔等,這些文件被包含以后,都會被當(dāng)做php腳本來解析。
本地文件包含
通過瀏覽器包含web服務(wù)器上的文件,這種漏洞是因為瀏覽器包含文件時沒有進(jìn)行嚴(yán)格 的過濾允許遍歷目錄的字符注入瀏覽器并執(zhí)行。
總的來說就是被包含的文件在服務(wù)器本地
遠(yuǎn)程文件包含
在遠(yuǎn)程服務(wù)器上預(yù)先設(shè)置好的腳本,然后攻擊者利用該漏洞包含一個遠(yuǎn)程的文件,這種漏洞的出現(xiàn)是因為瀏覽器對用戶的輸入沒有進(jìn)行檢查,導(dǎo)致不同程度的信息泄露、拒絕服務(wù)攻擊 甚至在目標(biāo)服務(wù)器上執(zhí)行代碼
簡單的說就是被包含的文件在第三方服務(wù)器
文件包含常用函數(shù)
以php為例,常用的文件包含函數(shù)有:
Include() #當(dāng)包含并運(yùn)行指定文件時,包含的外部文件發(fā)生錯誤,系統(tǒng)會給出警告,但整個php文件還會繼續(xù)執(zhí)行。 Require() /*require()與 include()的區(qū)別在于 require()執(zhí)行如果發(fā)生錯誤,函數(shù)會輸出 錯誤信息,并終止腳本的運(yùn)行。*/ include_once() /*和include沒有什么區(qū)別,只是在導(dǎo)入函數(shù)之前先檢測下該文件是否被include過,如果已經(jīng)執(zhí)行了一遍,那么就不在進(jìn)行第二次的include操作。*/ require_once() #功能與 require()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時,程序只調(diào)用一次DVWA練習(xí)
了解了一些文件包含漏洞的簡介和常用函數(shù),下面就通過萬能的DVWA來進(jìn)行文件包含漏洞的練習(xí)
注意: 使用遠(yuǎn)程包含需要開啟allow_url_include在此之前,先來了解一下./和../以及/
/ 根目錄 ./ 是當(dāng)前目錄 ../ 返回到上一級目錄 ../../ 返回了兩級目錄 .\ 、..\和./、../意義相同low
觀察源碼發(fā)現(xiàn)直接是get方法進(jìn)去,沒有任何過濾,那么就來執(zhí)行文件包含漏洞
輸入
發(fā)現(xiàn)
本地文件包含成功
遠(yuǎn)程文件包含
這里就先在自己的服務(wù)器根目錄(WWW目錄下)下創(chuàng)建一個文件
然后通過遠(yuǎn)程文件包含來執(zhí)行
輸入
發(fā)現(xiàn)遠(yuǎn)程包含成功
這里也可以用虛擬機(jī)和主機(jī)來進(jìn)行遠(yuǎn)程文件包含漏洞的測試,不過這里就以本地的服務(wù)器來進(jìn)行測試。
medium
發(fā)現(xiàn)medium已經(jīng)過濾了http://、../等,那么就來構(gòu)造這樣的方法來進(jìn)行繞過
?page=..././..././phpinfo.php源碼中過濾了../,所以我們輸入的經(jīng)過過濾后變成
?page=../../phpinfo.php這樣依舊是沒有過濾掉../,通過錯位進(jìn)行拼接成../
其實感覺繞過方法大多都是互通的,這種繞過在SQL注入、XSS攻擊等都是出現(xiàn)過的
本地文件包含成功,接下來來嘗試遠(yuǎn)程文件包含
源碼中是過濾了http://、https://,可以嘗試大小寫進(jìn)行繞過,也可以通過雙寫進(jìn)行繞過例如:httphttp://://
?page=Http://127.0.0.1/file.txt即可繞過
High
源碼中限制了文件名來防止惡意文件包含,并且!fnmatch( "file*", $file )代碼使用了fnmatch函數(shù)檢查page參數(shù),要求page參數(shù)的開頭必須是file,服務(wù)器才會去包含相應(yīng)的文件。所以就用到了file協(xié)議,就來了解一下file協(xié)議。
file協(xié)議
本地文件傳輸協(xié)議 ,file協(xié)議主要用于訪問本地計算機(jī)中的文件.file協(xié)議的基本格式
file:///文件路徑 如打開D盤www文件下的PHPinfo文件 file:///D:/www/phpinfo 注意:后面必須是絕對路徑:了解了file協(xié)議,就構(gòu)造相應(yīng)的語句即可進(jìn)行文件包含
?page=file:///D:/phpstuy/www/file.txtimpossible
分析一下源碼
發(fā)現(xiàn)if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" )這一句代碼已經(jīng)將page的參數(shù)限制成固定的值了,所以沒有辦法進(jìn)行文件包含。
總結(jié):這次算是大致了解了一些文件包含漏洞的知識,但是文件包含還有很多繞過姿勢,接下來繼續(xù)學(xué)習(xí)!
總結(jié)
以上是生活随笔為你收集整理的文件包含漏洞——DVWA练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件上传漏洞——upload-labs(
- 下一篇: PHP危险函数总结