Atom
HTB - Footprinting 第二章 FTP

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
2
3
4
5
6
anonymous_enable=YES          # 允許 anonymous 登入
anon_upload_enable=YES # 匿名可上傳
anon_mkdir_write_enable=YES # 匿名可建資料夾
no_anon_password=YES # 不要求密碼
anon_root=/home/username/ftp # 匿名根目錄
write_enable=YES # 開放 STOR、DELE、RNFR、RNTO 等寫入類指令

一旦看到這種配置,就幾乎可以確定:

只要 ftp 目標IP,帳號輸入 anonymous(密碼空白或任意),就能進 FTP,而且還能亂放檔案。

連上 FTP 後要看什麼?

先看 status/開 debug / trace

使用內建 ftp client,可以先看連線狀態與模式設定:

1
2
3
ftp> status
ftp> debug
ftp> trace

debug / trace 會把實際送出的 FTP 指令顯示出來,例如:

1
2
3
---> PORT 10,10,14,4,188,195
---> LIST
150 Here comes the directory listing.

目錄列舉與遞迴列出全部

有兩個設定值得注意:
hide_ids=YES 列表裡的 UID / GID 全部變成 ftp:ftp,防止你從檔案 owner 逆推本機帳號。
ls_recurse_enable=YES 允許 ls -R,一口氣看到所有子資料夾裡的檔案

下載與批次鏡像

單次下載

直接使用get即可

1
ftp> get Important\ Notes.txt

一次全部抓下來

如果目錄很多、檔案一大堆,懶人的做法是直接鏡像:

1
wget -m --no-passive ftp://anonymous:anonymous@10.129.x.x
  • -m 會 mirror 整個 FTP 根目錄,下載完會出現一個以 IP 命名的資料夾

上傳檔案

使用put即可

如果這個 FTP 根目錄實際上是 web 根目錄(例如 /var/www/html 同步過來),那就可以:

  1. 上傳一個 .php / .asp / .aspx webshell
  2. 從瀏覽器直接打 http://target/uploads/shell.php
  3. 拿到 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
openssl s_client -connect 10.129.x.x:21 -starttls ftp

這時除了看得到 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
nc 10.129.202.5 21
解答
InFreight

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包回家
範例

解答
HTB{b7skjr4c76zhsds7fzhd4k3ujg7nhdjre}

本文作者:Atom
本文鏈接:https://d0ngd.github.io/2025/12/31/HTB - Footprinting 第二章 FTP/
版權聲明:本文採用 CC BY-NC-SA 3.0 CN 協議進行許可