檔案包含漏洞總結

2021-09-20 23:38:10 字數 3994 閱讀 8274

本實驗是基於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 純文字檢...