HTB - Footprinting 第二章 FTP
各種協定的枚舉,每個協定都有實作
實作大禮包
FTP 服務枚舉
FTP(File Transfer Protocol)是網路上最老一代的檔案傳輸協定之一,跑在 TCP 21(控制通道)與 20(資料通道)上,跟 HTTP、POP 一樣都屬於 TCP/IP 的「應用層」。
FTP 的運作模式:Active / Passive
FTP 連線時會開兩條通道:
控制通道:TCP 21,傳指令跟回應(USER、PASS、LIST…)
資料通道:TCP 20(或其他 port),專門傳檔案與列表
模式有兩種:Active FTP:
Client 連到 Server 的 21,告訴 Server說這邊有在進行監聽,
Server 再主動從 20 打回來開資料通道。
如果 Client 在嚴格防火牆後面,這種模式常被擋掉。Passive FTP:
Client 連 21,要求被動模式;
Server 會進行回覆說自己在哪個port上跑服務,
由於連線主動方是 Client,比較不會被防火牆阻擋。
實務上滲透用 ftp 或 lftp 連線時,如果一直卡住,可以改被動模式測試。
vsftpd 預設配置
在 Linux 世界裡,最常見的 FTP 伺服器之一是 vsftpd,設定檔在 /etc/vsftpd.conf。
簡短舉例如下:
anonymous_enable=NO:預設不開匿名登入,如果看到被改成 YES 就要警戒。local_enable=YES:系統本機帳號可以登入。xferlog_enable=YES:會記錄上/下載的 log。connect_from_port_20=YES:代表使用傳統 active data port 20。secure_chroot_dir=/var/run/vsftpd/empty:chroot 用的空目錄,限制匿名或本機帳號活動範圍。rsa_cert_file, rsa_private_key_file, ssl_enable:控制是否啟用 TLS/SSL 以及憑證路徑。
只要有機會看到 vsftpd 設定檔,就順手檢查:
- 匿名設定
- chroot_local_user / chroot_list
- 是否允許寫入(write_enable、anon_upload_enable)
vsftpd 可以透過一組選項開啟匿名登入:
1 | |
一旦看到這種配置,就幾乎可以確定:
只要 ftp 目標IP,帳號輸入 anonymous(密碼空白或任意),就能進 FTP,而且還能亂放檔案。
連上 FTP 後要看什麼?
先看 status/開 debug / trace
使用內建 ftp client,可以先看連線狀態與模式設定:
1 | |
debug / trace 會把實際送出的 FTP 指令顯示出來,例如:
1 | |
目錄列舉與遞迴列出全部
有兩個設定值得注意:hide_ids=YES 列表裡的 UID / GID 全部變成 ftp:ftp,防止你從檔案 owner 逆推本機帳號。ls_recurse_enable=YES 允許 ls -R,一口氣看到所有子資料夾裡的檔案
下載與批次鏡像
單次下載
直接使用get即可
1 | |
一次全部抓下來
如果目錄很多、檔案一大堆,懶人的做法是直接鏡像:
1 | |
- -m 會 mirror 整個 FTP 根目錄,下載完會出現一個以 IP 命名的資料夾
上傳檔案
使用put即可
如果這個 FTP 根目錄實際上是 web 根目錄(例如 /var/www/html 同步過來),那就可以:
- 上傳一個 .php / .asp / .aspx webshell
- 從瀏覽器直接打 http://target/uploads/shell.php
- 拿到 RCE 或 reverse shell
用 Nmap NSE 幫你自動枚舉 FTP
我們在Nmap介紹過NSE了,這邊就不贅述。
常見輸出會幫你做到:
- ftp-anon:測試匿名登入並列出根目錄,而且會標記哪些檔案/資料夾可寫
- ftp-syst:執行 STAT 看伺服器狀態與版本(例如 vsftpd 3.0.3)
如果加上--script-trace,還可以看到 Nmap 實際發送了哪些 FTP 指令與收到什麼回應,對學習協定很有幫助。
TLS/SSL 的 FTP(FTPS):用 openssl s_client 偷看憑證
當今天客戶使用FTPS時,你可以用 openssl s_client 來連:
1 | |
這時除了看得到 FTP banner 以外,還可以看到:
- 憑證中的 CN(常是主機名,例如 master.inlanefreight.htb)
- 組織名稱(O)、部門(OU)、地點(L、ST、C)
- 有時還會有 email address
這些資訊可以拿來:
- 反查真正的 FQDN(而不是裸 IP)
- 補 OSINT:公司名稱、部門、地理位置
範例題目:
Which version of the FTP server is running on the target system? Submit the entire banner as the answer.
查看標的的FTP版本,提交整個banner當作答案
要查看banner,使用nc即可。
1 | |
Enumerate the FTP server and find the flag.txt file. Submit the contents of it as the answer.
登入FTP伺服器後找到flag
首先使用ftp <IP>進行連線
然後使用者輸入:anonymous進行登入
檢查一下裡面有什麼檔案
看到flag我們直接get包回家