本機檔案包含 (LFI) 是主要存在於 Web 伺服器中的漏洞。當用戶輸入包含可能存在於伺服器上並將包含在輸出中的檔案的特定路徑時,就會利用此漏洞。這種漏洞可用於從易受攻擊的系統中讀取包含敏感和機密數據的檔案。
此類漏洞的主要原因是對用戶輸入的不當清理。這裡的清理意味著應該檢查任何用戶輸入,並且應該確保只傳遞預期值並且輸入中沒有任何可疑的內容。 它是一種常見於基於 PHP 的網站的漏洞,但不限於這些。
常見php函數:include()
、include_once()
、require()、require_once()
、fopen()、file_get_contents()
實際案例
為了測試 LFI,我們需要的是任何 URL 或任何其他輸入字段(如請求正文等)上的參數。
任意文件讀取的重要性
很多時候,LFI 會導致訪問(沒有適當的權限)重要的機密數據。攻擊者可以使用 LFI 從您的系統中讀取文件,從而洩露密碼/SSH 密鑰等敏感信息;枚舉數據可進一步用於破壞系統。
在這邊我們可以發現,網站的參數為 page 。
一旦我們找到易受攻擊的參數,我們就可以嘗試在 Linux 系統上包含 passwd 文件,即 /etc/passwd。最常見的技術是路徑遍歷方法,這意味著我們可以包含像../../../../etc/passwd 這樣的文件,就像我們在 Linux 系統中通常通過運行cd ../
實際上我們也成功獲得/etc/passwd的資料。
/etc/passwd是儲存用戶資訊的地方,本身是一個純文字檔,包含用戶ID、群組ID、主目錄、shell。
- 用戶名:用戶登錄時使用,長度在1到32個字符之間。
- 密碼:x 字符表示加密的密碼存儲在 /etc/shadow 文件中。請注意,您需要使用 passwd 命令來計算在 CLI 中鍵入的密碼的哈希值,或者在 /etc/shadow 文件中存儲/更新密碼的哈希值。
- 用戶 ID (UID):必須為每個用戶分配一個用戶 ID (UID)。UID 0(零)為 root 用戶保留,UID 1-99 為其他預定義帳戶保留。系統還為管理帳戶和系統帳戶/組保留了其他UID 100-999。
- 組 ID (GID):主要組 ID(存儲在 /etc/group 文件中)
- 用戶 ID 信息 (GECOS):評論字段。它允許您添加有關用戶的額外信息,例如用戶的全名、電話號碼等。此字段由finger 命令使用。
- 主目錄:用戶登錄時所在目錄的絕對路徑。如果此目錄不存在,則用戶目錄變為 /
- Command/shell:命令或 shell (/bin/bash) 的絕對路徑。通常,這是一個外殼。請注意,它不一定是外殼。例如,sysadmin 可以使用 nologin shell,它充當用戶帳戶的替換 shell。如果將shell設置為/sbin/nologin,並且用戶嘗試直接登錄Linux系統,則/ sbin / nologin shell將關閉連接。
更多/etc/passwd的介紹,請參考 https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/ 。
回過來,在這裡我們可以知道,系統的用戶名為 falcon 。
嘗試在家目錄搜尋 .bashrc
這不是我們要找的地方 … , 試試 /home/falcon/.ssh/id_rsa ,這邊是存ssh斯要的地方。
這邊我們將整個私鑰存起來用作ssh登入。 指令為 ssh -i {key} username@hostname
在這裡我們就成功登到目標主機上了。
我們用sodu -l 可以看到 /bin/journalctl , 但這個不在這篇的主題中,所以更多訊息可以看這篇。
總之,我們拿到root了。
最後的最後,我們就成功拿到flag囉!
另外我在亂翻的時候看到 /root 下也有一個flag,交給其他想玩的朋友挖掘吧~
另外這篇講解LFI也蠻詳細的 https://ithelp.ithome.com.tw/articles/10241555
喜歡我的文章歡迎分享 https://sectools.tw ,或在下方給掌聲~。
附錄
Local/Remote File Inclusion
The File Inclusion vulnerability allows an attacker to include a file, usually exploiting a “dynamic file inclusion” mechanisms implemented in the target application.
Basic LFI (null byte, double encoding and other tricks)
http://example.com/index.php?page=etc/passwd
http://example.com/index.php?page=etc/passwd%00
http://example.com/index.php?page=../../etc/passwd
http://example.com/index.php?page=%252e%252e%252f
http://example.com/index.php?page=....//....//etc/passwd
Interesting files to check out :
/etc/issue
/etc/passwd
/etc/shadow
/etc/group
/etc/hosts
/etc/motd
/etc/mysql/my.cnf
/proc/[0-9]*/fd/[0-9]* (first number is the PID, second is the filedescriptor)
/proc/self/environ
/proc/version
/proc/cmdline