遠程文件包漏洞,不能包含PHP的原因詳解

遠程文件包漏洞,不能包含PHP的原因詳解

簡介:進行遠程包含時,大多數包含txt、jpg等文件,再進行菜刀連接,但是如果遠程包含的是php文件,則菜刀無法成功連接。

開門見山,給我帶來啓發的兩句話

注意:如果是包含遠程服務器上的PHP文件,那麼得到的是被遠程服務器解析過的PHP,所以在寫一句話木馬的時候就不要做成.php的文件,一般包含.txt的文件

例如:我們用windows server 2003 服務器包含一個Linux上的phpinfo.php文件,那麼得到的就是Linux的php配置文件,而不是Windows上的php配置文件。
(參考:https://www.jianshu.com/p/be68cf9be911)

下面是一些推斷驗證:

驗證:現有兩個靶機環境,都上傳一個php文件查看phpinfo()信息,進行對比

靶機1:
在這裏插入圖片描述
靶機2:
在這裏插入圖片描述
可以發現2個靶機的PHP版本信息是不一樣的
現在通過靶機1遠程包含靶機2的PHP文件
在這裏插入圖片描述

可以發現該PHP版本信息,爲包含的遠程文件上的服務器的PHP版本信息,即靶機2的PHP版本信息
證實了包含遠程PHP文件時,會在服務器上進行PHP解析後,再傳給包含該遠程PHP文件的服務器上

驗證下這個POST的值到底會不會傳過來

由於post提交值不太方便,這裏我們改用GET方式
首先上傳一個test.php文件,
文件內容:

<?php 
echo "123";
$name = $_GET['abc'];
echo "----------------<br/>";
echo $name;
echo "<br/>----------------<br/>";
?>

並在example1.php中添加了一個echo namename,驗證name的值
在這裏插入圖片描述
如果直接對這個上傳文件進行正常訪問,結果也顯示正常,如下圖:

在這裏插入圖片描述
將該文件進行包含
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.php&abc=“good”
**注意:**這裏的abc前是用&符連接,表示該值是傳遞給example1.php的
在這裏插入圖片描述
說明example1.php中的壓根沒有接收到abc這個參數

如果我們這樣測試
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.php?abc=“good”
**注意:**abc前是?這樣就表示這個abc參數是傳給test.php的

在這裏插入圖片描述
可以發現test.php中的echo $name;進行了正常輸出,說明test.php中是接收到了abc參數的值,而example1.php中的echo name;name; 依然沒有正常輸出,報了不存在name

通過以上兩點,可以說明,包含test.php時,先進行test.php解析,
通過$name = GET[abc]abc_GET['abc']獲得了abc的值 並且這個name就相當於一個存在於test.php的內部變量,當被example1.php包含時,example1.php壓根看不到$name的值,推斷出遠程包含時解析了test.php後,將解析的結果傳給了example1.php中,而不是將test.php的代碼傳給example1.php中

如果我們包含的是test.txt(與test.php中內容相同)又是怎麼樣的情況
Url:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.txt&abc=“good”
注意這裏是&abc

在這裏插入圖片描述
說明這是把test.txt中的代碼傳給了example1.php中,然後再對example1.php進行解析
URL:http://192.168.149.143/fileincl/example1.php?page=http://192.168.149.143/upload/images/test.txt?abc=“good”
注意這裏是?abc
在這裏插入圖片描述
這裏的報錯與我們所想的一致,因爲test.txt還未包含時,不會被解析,就無法獲取參數abc的值

總結:當服務器A遠程包含服務器B的php文件時,遠程服務器B會先對php進行解析,解析後的結果再傳給A,而當服務器A遠程包含服務器B非腳本文件(比如txt,jpg)時,B會將文件內容(因爲是非腳本,B自然不會進行解析)傳給A,A包含B傳來的文件內容後,再進行解析,而解析過程中又發現B傳來的文件內容是PHP文件格式,於是會進行PHP。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章