15 KiB
21 - FTP Pentesting
AWS hackleme konusunu sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile!
- **Bir siber güvenlik şirketinde mi çalışıyorsunuz? Şirketinizin HackTricks'te reklamını görmek ister misiniz? Ya da PEASS'ın en son sürümüne veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARI'na göz atın!
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- Resmi PEASS & HackTricks ürünlerini edinin
- Katılın 💬 Discord grubuna veya telegram grubuna veya beni Twitter 🐦@carlospolopm** takip edin**.
- Hacking püf noktalarınızı göndererek PR'ler göndererek paylaşın hacktricks repo ve hacktricks-cloud repo.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Temel Bilgiler
Dosya Transfer Protokolü (FTP), bir sunucu ve bir istemci arasında bir bilgisayar ağı üzerinde dosya transferi için standart bir protokol olarak hizmet verir.
Düz metin protokolüdür ve bazen telnet
veya nc -C
kullanarak bağlantı kurmanız gerekebilir.
Varsayılan Port: 21
PORT STATE SERVICE
21/tcp open ftp
Bağlantılar Aktif ve Pasif
Aktif FTP'de FTP istemcisi önce kontrol bağlantısını port N'sinden FTP Sunucusunun komut portuna - port 21'e başlatır. İstemci daha sonra port N+1'i dinler ve port N+1'i FTP Sunucusuna gönderir. FTP Sunucusu daha sonra veri bağlantısını, port M'sinden FTP İstemcisinin port N+1'ine başlatır.
Ancak, eğer FTP İstemcisinde dışarıdan gelen veri bağlantılarını kontrol eden bir güvenlik duvarı kuruluysa, aktif FTP bir sorun olabilir. Ve, bunun için uygun bir çözüm Pasif FTP'dir.
Pasif FTP'de, istemci kontrol bağlantısını port N'sinden FTP Sunucusunun port 21'ine başlatır. Bundan sonra, istemci bir passv komutu verir. Sunucu daha sonra istemciye kendi port numarasından M'yi gönderir. Ve istemci, veri bağlantısını kendi port P'sinden FTP Sunucusunun port M'sine başlatır.
Kaynak: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Bağlantı Hata Ayıklama
FTP komutları debug
ve trace
kullanılarak 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
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 sunucusunun bazı bilgilerini almak 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
Kaba kuvvet
Burada 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 varsayılan olarak nmap tarafından -sC seçeneği ile veya:
nmap --script ftp-* -p 21 <ip>
Tarayıcı bağlantısı
Bir FTP sunucusuna tarayıcı (örneğin Firefox) kullanarak şu URL'yi kullanarak bağlanabilirsiniz:
ftp://anonymous:anonymous@10.10.10.98
Eğer bir web uygulaması, bir kullanıcı tarafından kontrol edilen verileri doğrudan bir FTP sunucusuna gönderiyorsa, çift URL kodu %0d%0a
(çift URL kodunda bu %250d%250a
olur) baytlarını gönderebilir ve FTP sunucusunun keyfi eylemler gerçekleştirmesini sağlayabilirsiniz. Bu olası keyfi eylemlerden biri, kullanıcı tarafından kontrol edilen bir sunucudan içerik indirmek, port taraması yapmak veya diğer düz metin tabanlı hizmetlerle iletişim kurmaya çalışmaktır (örneğin http).
FTP'den tüm dosyaları indir
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österir- **
PORT 127,0,0,1,0,80
**Bu, FTP sunucusuna 127.0.0.1 IP'sine ve 80 numaralı porta bağlantı kurmasını söyler (5. karakteri "0" ve 6. karakteri portu ondalık olarak belirtmelisiniz veya 5. ve 6. karakterleri kullanarak portu onaltılık olarak ifade edebilirsiniz). - **
EPRT |2|127.0.0.1|80|
**Bu, FTP sunucusuna 127.0.0.1 IP'sine ve 80 numaralı porta bir TCP bağlantısı kurmasını söyler ("2" ile belirtilir). Bu komut IPv6 destekler. LIST
Bu, mevcut klasördeki dosyaların listesini gönderirLIST -R
Yinelemeli olarak listeler (sunucu izin veriyorsa)APPE /yol/birşey.txt
Bu, FTP'nin pasif bir bağlantıdan veya bir PORT/EPRT bağlantısından gelen verileri bir dosyaya kaydetmesini sağlar. 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 /dosya/yol
Bir pasif veya port bağlantısı kurulmalıdır. Daha sonra, FTP sunucusu belirtilen dosyayı bu bağlantı aracılığıyla gönderecektirREST 6
Bu, sunucuya bir sonraki seferRETR
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çacak ve kullanıcıya nereye bağlanabileceğini gösterecektirPUT /tmp/dosya.txt
Belirtilen dosyayı FTP'ye yükler
FTPBounce saldırısı
Bazı FTP sunucuları PORT
komutuna izin verir. Bu komut, sunucuya başka bir FTP sunucusuna belirli bir portta bağlanmak istediğinizi belirtmek için kullanılabilir. Sonra, bu bilgiyi kullanarak bir FTP sunucusu aracılığıyla bir ana bilgisayarın hangi portlarının açık olduğunu taramak için kullanabilirsiniz.
Buradan bir FTP sunucusunu port taraması yapmak için nasıl kötüye kullanabileceğinizi öğrenin.
Bu davranışı kötüye kullanarak bir FTP sunucusunu başka protokollerle etkileşime girmesi için de kullanabilirsiniz. Bir HTTP isteği içeren bir dosya yükleyebilir ve zayıf FTP sunucusunun bunu bir başka HTTP sunucusuna göndermesini sağlayabilirsiniz (belki yeni bir yönetici kullanıcı eklemek için?) veya bir FTP isteği yükleyebilir ve zayıf FTP sunucusunun farklı bir FTP sunucusundan bir dosya indirmesini sağlayabilirsiniz.
Teori basittir:
- İsteği (bir metin dosyası içinde) zayıf sunucuya yükleyin. Başka bir HTTP veya FTP sunucusuyla iletişim kurmak istiyorsanız, satırları
0x0d 0x0a
ile değiştirmeniz gerekir - Göndermek istemediğiniz karakterleri göndermemek için
REST X
kullanın (belki dosyanın içine isteği yüklemek için başlangıçta bazı görüntü başlığı eklemeniz gerekebilir) - Arbitrary sunucu ve servise bağlanmak için
PORT
kullanın - Kaydedilen isteği sunucuya göndermek için
RETR
kullanın.
Bu muhtemelen Yazılabilir soket hatası gibi bir hata verecektir çünkü bağlantı, verileri RETR
ile göndermek için yeterince uzun sürmez. Bunun önüne geçmek için denemeniz gereken öneriler:
- Bir HTTP isteği gönderiyorsanız, en azından ~0.5MB'ye kadar aynı isteği tekrarlayın. Şöyle:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- İsteği, protokole göre "gereksiz" verilerle doldurmaya çalışın (FTP ile iletişim kurarken belki gereksiz komutlar veya dosyayı almak için
RETR
komutunu tekrarlayın) - İsteği, satırlara veya satırlara bölünmüş bir şekilde, çok sayıda null karakter veya başka karakterlerle doldurun
Neyse, burada bir FTP sunucusunun farklı bir FTP sunucusundan bir dosya indirmesini sağlamak için bunu nasıl kötüye kullanacağınıza dair eski bir örnek var.
Filezilla Sunucu Güvenlik Açığı
FileZilla genellikle yerel bir Yönetimsel hizmet için FileZilla-Server'a bağlanır (port 14147). Bu porta erişmek için kendi makinenizden bir tünel oluşturabilirseniz, FTP hizmeti için boş bir şifre kullanarak bağlanabilir ve FTP hizmeti için yeni bir kullanıcı oluşturabilirsiniz.
Yapılandırma dosyaları
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
Saldırı Sonrası
vsFTPd'nin varsayılan yapılandırması /etc/vsftpd.conf
dosyasında bulunabilir. Burada bazı tehlikeli ayarlar bulabilirsiniz:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- Anonim için dizin.chown_uploads=YES
- Anonim olarak yüklenen dosyaların sahipliğini değiştirmechown_username=username
- Anonim olarak yüklenen dosyaların sahibi olan kullanıcılocal_enable=YES
- Yerel kullanıcıların giriş yapmasına izin verno_anon_password=YES
- Anonimden şifre istemewrite_enable=YES
- Komutlara izin ver: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE ve SITE
Shodan
ftp
port:21
Try Hard Güvenlik Grubu
{% embed url="https://discord.gg/tryhardsecurity" %}
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 kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!
- **Bir cybersecurity şirketinde mi çalışıyorsunuz? Şirketinizi HackTricks'te reklamını görmek ister misiniz? ya da PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARI'na göz atın!
- The PEASS Family keşfedin, özel NFT'lerimiz koleksiyonumuz
- Resmi PEASS & HackTricks ürünlerini alın
- Katılın 💬 Discord grubuna ya da telegram grubuna veya Twitter 🐦@carlospolopm'ı takip edin.
- Hacking püf noktalarınızı paylaşarak PR'ler göndererek hacktricks repo ve hacktricks-cloud repo ile paylaşın.