程式開發人員通常會會把可重複使用的函式寫到單個檔案中,使用某個函式的時候,直接呼叫此檔案,可以避免重複**,這種呼叫檔案的過程稱為檔案包含。
開發人員希望**更加靈活,所以通常會會把被包含的檔案設定為變數,來進行動態呼叫。但正式由於這種靈活性,從而導致客戶端可以呼叫任意檔案,造成檔案包含漏洞。
幾乎所有的指令碼檔案都會提供檔案包含功能,檔案包含漏洞在phpweb應用中居多,在jsp/asp/asp.net程式中較少。
web應用實現了動態包含
動態包含的檔案路徑引數客戶端可控
本文以php檔案包含為例進行說明。
php檔案包含的函式:
函式說明
include()
檔案包含失敗會產生警告,指令碼會繼續執行
include_once()
檔案只會被包含一次
require()
檔案包含失敗會產生錯誤,直接結束指令碼執行
require_once()
檔案只會被包含一次
檔案包含分為本地檔案包含(lfi)和遠端檔案包含(rfi)。
lfi就是可以讀取本地檔案,rfi就是通過(http,ftp,php偽協議)遠端載入檔案。
allow_url_fopen=on/off 本地檔案包含開關(不論開關都能包含本地檔案)include.php:allow_url_include=on/off 遠端檔案包含開關
<?php $path = $_get['path']; echo "hello ,this is include.php"; include($path); ?>訪問:http://localhost/include/include.php?path=info.php
結果:
需要先把allow_url_include設定為on。
php檔案包含是程式設計的基礎功能之一,能夠減少**量,提高開發效率。但是,當**設計中實現動態包含,就會產生檔案包含漏洞的風險。如果要實現動態包含,web應用應當有嚴格的過濾。
php檔案包含的功能十分強大,特點如下:
無視副檔名讀取檔案
包含檔案時,php會讀取檔案的原始碼,包含檔案。(此時可以上傳木馬)
無條件解析php**
檔案包含在讀取檔案原始碼的同時,如果遇到符合規範的php**,就會無條件執行。例如將info.php的字尾名修改為info.rar,依然能夠顯示phpinfo的資訊。
空字元安全繞過是php版本小於5.3.4的乙個漏洞,cve編號cve-2006-7243。這個漏洞是php接收來自路徑名中的空字元(null),這可能允許
依賴於上下文的攻擊者通過在此字元後放置安全副檔名來繞過預取的訪問限制–00截斷。00截斷攻擊也體現在檔案包含中。
web應用在設計的時候,經常會包含模板檔案,簡單程式如下:
include.php
<?phpif (
isset
($_get
['path'])
)else
?>
這個簡單的**限制了包含的檔名字尾是html。
當訪問http://localhost/include/include.php?path=hello時,顯示的同目錄下的hello.html
當訪問http://localhost/include/include.php?path=info時,會報找不到info.html的錯誤
當訪問http://localhost/include/include.php?path=info.php%00會成功執行phpinfo,完成了00截斷。
完成本實驗需要關閉魔術引號magic_quotes_gpc:
magic_quotes_gpc=off當magic_quotes_gpc = on時,輸入資料中含單引號(』)、雙引號(」)、反斜線(\)與 null(null 字元)等字元,都會被加上反斜線。這些轉義是必須的。
在php6中刪除了這個選項,一切的程式設計都需要在 magic_quotes_gpc=off下進行了
可以利用檔案包含漏洞讀取任意檔案,需要具有檔案可讀許可權。
直接利用檔案包含包含木馬,然後用菜刀連線。
當包含這個檔案的時候,這段**被執行,就會在當前目錄下建立乙個shell.php。
pd9wahancnbocgluzm8oktsncj8+的base64解碼就是<?phpphpinfo ();?>,
使用這種方式可以獲取**原始碼。
php封裝協議總結參考:
php://input 可以訪問請求的原始資料唯讀流,將post請求中的資料作為php**執行。
網路安全滲透基礎
1 基本要素 保密性 不能非授權訪問,通過訪問控制與資料加密來保障保密性 完整性 只有授權的人才能修改,通過訪問控制來阻止資料篡改,通過演算法進行資訊驗證 可用性 是網路總體可靠性的需求,通過訪問控制來阻止非授權人員的訪問 可控性 使用授權機制,控制資訊傳播範圍 內容 必要時能恢復金鑰 不可否認性 ...
學習筆記 網路安全滲透測試滲透測試流程
作為一次玩過安全滲透測試的執行者,首先要明確在整個滲透測試過程中需要進行的工作。當接收到客戶的滲透測試任務時,往往對於所要進行的目標知之甚少或者一無所知。而在滲透結束的時候,對目標的了解程度已經遠遠超過客戶。在此期間需要從事大量的研究工作,整個滲透過程可以分為以下七個階段 確定滲透測試所涉及的ip位...
網路安全滲透面試題
滲透測試有哪幾階段?whereistehnarwhal,reddit 風險評估 漏洞評估和滲透測試之間有什麼區別?whereistehnarwhal,reddit 執行 nmap 掃瞄時,指定從哪個源埠掃瞄,通常可以繞過防火牆規則?jstnkndy 寫乙個 nmap 命令,要求使用 syn 掃瞄,它...