本實驗是基於dvwa和sqli-labs的實驗環境
0x01:檔案包含漏洞
伺服器通過php的特性(函式)去包含任意檔案時,由於要包含的這個檔案**過濾不嚴,從而可以去包含乙個惡意檔案,而我們可以構造這個惡意檔案來達到**的目的。
這也算官方的解釋吧,用個人的話說,通過瀏覽器、url位址或者是乙個引數的變數的內容,可以通過修改這些
url或者引數變數的內容,讀取到
web根目錄以前其他檔案,但是不同於目錄瀏覽,
目錄瀏覽是可以通過瀏覽器直接顯示www目錄下每乙個檔案的名稱,把目錄列表給列出來。
檔案包含漏洞形成原因
程式開發人員一般會把重複使用的函式寫到單個檔案中,需要使用某個函式時直接呼叫此檔案,
而無需再次編寫,這中檔案呼叫的過程一般被稱為檔案包含。
程式開發人員一般希望**更靈活,所以將被包含的檔案設定為變數,用來進行動態呼叫,
但正是由於這種靈活性,從而導致客戶端可以呼叫乙個惡意檔案,造成檔案包含漏洞。
幾乎所有指令碼語言都會提供檔案包含的功能,但檔案包含漏洞在
中居多,
而在jsp
、asp
、asp.net
程式中卻非常少,甚至沒有,這是有些語言設計的弊端。
在php
中經常出現包含漏洞,但這並不意味這其他語言不存在。
常見檔案包含函式
include():執行到
include
時才包含檔案,找不到被包含檔案時只會產生警告,指令碼將繼續執行
require():只要程式一執行就包含檔案,找不到被包含的檔案時會產生致命錯誤,並停止指令碼
include_once()和
require_once()
:這兩個函式和前兩個函式作用幾乎相同,區別在於若檔案中**已被包含則不會再次包含
lfi(本地包含漏洞)目錄遍歷可以理解為本地包含漏洞,驗證以及利用方法都相同。
rfi(遠端包含漏洞)可以包含進其他主機的url位址,如自己開放乙個www服務,然後在上面放乙個木馬檔案,如果是**會在這個機器上執行的。拿到shell的許可權要看執行www服務的帳號。
包含漏洞的
特徵:(這個可以說是文中的乾貨了)
在某乙個頁面中,乙個變數的值等於乙個頁面檔案或者是乙個固定的值,如
?page=a.asp
?home=b.html
?file=content
漏洞分類
本地檔案包含:可以包含本地檔案,在條件允許時甚至能執行**
上傳馬,然後包含
讀敏感檔案,讀php檔案
包含日誌檔案getshell
包含/proc/self/envion檔案
getshell
包含data:或
php://input
等偽協議
若有phpinfo則可以包含臨時檔案
遠端檔案包含:可以直接執行任意**
要保證php.ini中
allow_url_fopen
和allow_url_include
要為on
0x02、檔案包含漏洞利用
1、包含讀出目標機上其它檔案
如果對取得的引數page沒有過濾,於是我們可以任意指定目標主機上的其它敏感檔案
在linux中,"."表示當前目錄,「..」表示上一層目錄,當../到根目錄下,再往上層父目錄仍舊是根目錄。
用常見的「../」包含出日誌檔案。
2、包含可執行的php木馬
在很多地方,我們都可以上傳,如上傳頭像,等,這這裡先上傳,的內容為一句話木馬
由於上傳的限制,一般只能上傳jpg,
png的格式,**無法執行,我們用本地包含的方式將包含進來,**就執行了,**
不需要字尾名是php、asp的格式,只要內容是**
即可執行。
然後用中國菜刀連線(功夫再高,也怕菜刀!)
3.遠端包含url和php木馬
如果目標主機的"allow_url_fopen"是啟用的(預設是啟用的),我們就可以有更大的利用空間,我們可以指定其它url上的乙個包含php**的webshell來直接執行
不需要字尾名是php、asp的格式,只要內容是**就可以。
出現概率少於本地包含,但更容易被利用
如在自己伺服器上寫上一句話**,然後用遠端包含漏洞去包含這個鏈結,
然後同上,用菜刀連線,獲取webshell。
0x03、包含漏洞繞過技巧
在利用包含漏洞中,經常遇到乙個問題,
在檢視page=/etc/passwd的時候,出現報錯,找不到/etc/passwd.php檔案,說明預設自動加上了字尾名.php,繞過的方式有一下幾種
1.編碼繞過字元過濾
(1)加「.」,當加點,會忽略點後面的內容。
(2)「%00」,即null空字元(/etc/passwd%00),在php語言格式裡,當遇到%00的時候,後面不管有無其他東西,都不看了,只看%00前面的內容
(3)「#」,繞過副檔名過濾
2、編碼
url編碼、雙層(多層)url編碼
%2e%2e%2f 解碼:../
%2e%2e%5c 解碼:..\
%25%2e%25%2e%255c 解碼:..\(可使用burp多層編碼和解碼)
uniclode/utf-8編碼
..%c0%af 解碼:../
%c1%9c 解碼:..\
但編碼能否正確的起到效果,得看web server是否能對編碼後的做解析
3、其他系統可能是使用到的特殊字元
file.txt
...
file.txt
file .txt
""""""""
file.txt
<<>><
./././
file.txt
4、攻擊向量字典
在kali中,也存在
攻擊向量字典
路徑是「/usr/share/wfuzz/wordlist/vulns」
利用條件
程式用include()等檔案包含函式通過動態變數的正規化引入需要包含的檔案
使用者能夠控制該動態變數
漏洞危害
這類漏洞看起來貌似並不嚴重,一旦被惡意利用則會帶來很大的危害。本地檔案包含不僅能夠包含web檔案目錄中的一些配置檔案(比如web應用、資料庫配置檔案、config檔案),還可以檢視到一些web動態頁面的源**,為攻擊者進一步發掘web應用漏洞提供條件,甚至一旦與路徑遍歷漏洞相結合,還可能直接攫取目標系統的使用者名稱與密碼等檔案。並且能執行任意**,甚至控**務器。
檔案包含漏洞總結
前言 檔案包含是存在的乙個很常見的漏洞,今天來總結一下對檔案包含的學習。首先說到檔案包含,那麼成因是什麼?檔案包含是指令碼檔案在引入外部檔案時引用的檔名使用者可控,且沒有對使用者名稱進行嚴格的過濾,從而導致使用者引用意外檔案,造成檔案洩露甚至 注入。0x00 分類 檔案包含分為兩種,一種時本地檔案包...
PHP檔案包含漏洞總結
php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 1 2 3 4 5 if...
PHP檔案包含漏洞總結
0x00 前言 php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 純文字檢...