什麼是本地文件包含漏洞(LFI)?

翻譯文章,原文:What is Local File Inclusion (LFI)?[1]



什麼是本地文件包含漏洞(LFI)?

LFI

LFI

攻擊者可以使用本地文件包含(LFI)來欺騙Web應用程序以在Web服務器上公開或運行文件。LFI攻擊可能導致信息洩露,遠程代碼執行甚至跨站點腳本(XSS)。通常,LFI在應用程序使用文件路徑作為輸入時發生。如果應用程序將此輸入視為可信輸入,則可以在include語句中使用本地文件。


本地文件包含與遠程文件包含(RFI)[2]非常相似。但是,使用LFI的攻擊者可能只包含本地文件(不包括RFI的遠程文件)。(注:我後面會翻譯關於RFI的文章,請耐心等待)

以下是有LFI漏洞的PHP代碼。

<code>/*** Get the filename from a GET input* Example - http://example.com/?file=filename.php*/$file = $_GET['file'];​/*** Unsafely include the file* Example - filename.php*/include('directory/' . $file);/<code>

在上面的示例中,攻擊者可以提出以下請求。它誘使應用程序執行攻擊者設法將其上傳到Web服務器的PHP腳本(例如Web Shell)。

<code>http://example.com/?file=../../uploads/evil.php/<code>

在這個例子中,攻擊者上傳的文件將由運行Web應用程序的用戶包括並執行。這將使攻擊者可以運行他們想要的任何服務器端惡意代碼。

這是最壞的情況。攻擊者並不總是能夠將惡意文件上傳到應用程序。即使他們這樣做,也無法保證應用程序會將文件保存在存在LFI漏洞的同一服務器上。即使那樣,攻擊者仍將需要知道上傳文件的磁盤路徑。

目錄遍歷

即使不能上傳文件和自行代碼,本地文件包含漏洞也可能很危險。攻擊者仍然可以使用LFI漏洞執行目錄遍歷/路徑遍歷攻擊,如下所示。

<code>http://example.com/?file=../../../../etc/passwd/<code>

在上面的示例中,攻擊者可以獲得/etc/passwd文件的內容,該文件包含服務器上的用戶列表。同樣,攻擊者可能利用目錄遍歷漏洞訪問日誌文件(例如Apache access.log或error.log),源代碼和其他敏感信息。然後可以使用此信息來進行攻擊。

References

[1] What is Local File Inclusion (LFI)?: https://www.acunetix.com/blog/articles/local-file-inclusion-lfi/

[2] 遠程文件包含(RFI): https://www.acunetix.com/blog/articles/remote-file-inclusion-rfi/


分享到:


相關文章: