文件包含漏洞的原理

文件包含

開發人員將相同的函數寫入單獨的文件中,需要使用某個函數時直接調用此文件,無需再次編寫,這種文件調用的過程稱文件包含。

文件包含漏洞

開發人員爲了使代碼更靈活,會將被包含的文件設置爲變量,用來進行動態調用,從而導致客戶端可以惡意調用一個惡意文件,造成文件包含漏洞。

幾乎所有腳本語言都會提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多。

文件包含分類

1.本地文件包含
包含服務器本身存在的惡意文件
a.txt
在這裏插入圖片描述

include.php

<?php
$b=$_GET['id'];
include($b);
?>

在這裏插入圖片描述

注:
兩個文件在同一目錄下(若不在同一目錄這被包含的文件路徑必須寫絕對路徑或相對路徑)
被包含的頁面的後綴無論是什麼都會當做PHP解析

2.遠程文件包含

包含其他網站上的惡意文件
遠程包含的文件路徑必須是絕對路徑
遠程文件包含利用條件:

在php.ini中allow_url_fopen=on、allow_url_include=on

localhost/b.php?id=http://ip/文件路徑

PHP文件包含函數

include()

使用此函數,只有代碼執行到此函數時纔將文件包含進來,發生錯誤時只警告並繼續執行。

inclue_once()

功能和前者一樣,區別在於當重複調用同一文件時,程序只調用一次。

require()

使用此函數,只要程序執行,立即調用此函數包含文件,發生錯誤時,會輸出錯誤信息並立即終止程序。

require_once()
功能和前者一樣,區別在於當重複調用同一文件時,程序只調用一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章