21 - Pentesting FTP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Dosya Aktarım Protokolü (FTP), bir sunucu ile bir istemci arasında bir bilgisayar ağı üzerinden dosya aktarımı için standart bir protokol olarak hizmet eder.
Bu, düz metin protokolüdür ve yeni satır karakteri 0x0d 0x0a
kullanır, bu nedenle bazen telnet
veya nc -C
kullanarak bağlanmanız gerekebilir.
Varsayılan Port: 21
Aktif FTP'de FTP istemcisi önce kontrol bağlantısını kendi N portundan FTP Sunucusunun komut portuna - port 21'e başlatır. İstemci daha sonra N+1 portunu dinler ve N+1 portunu FTP Sunucusuna gönderir. FTP Sunucusu daha sonra veri bağlantısını M portundan FTP İstemcisinin N+1 portuna başlatır.
Ancak, eğer FTP İstemcisinin dışarıdan gelen veri bağlantılarını kontrol eden bir güvenlik duvarı varsa, o zaman aktif FTP bir sorun olabilir. Bunun için uygulanabilir bir çözüm Pasif FTP'dir.
Pasif FTP'de istemci kontrol bağlantısını kendi N portundan FTP Sunucusunun 21 portuna başlatır. Bunun ardından istemci bir passv komutu gönderir. Sunucu daha sonra istemciye kendi port numarasından birini M gönderir. Ve istemci veri bağlantısını P portundan FTP Sunucusunun M portuna başlatır.
Kaynak: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
FTP komutları debug
ve trace
ile iletişimin nasıl gerçekleştiğini görebilirsiniz.
nmap ile
FTP sunucusundan bazı bilgileri almak için HELP
ve FEAT
komutlarını kullanabilirsiniz:
anonymous : anonymous &#xNAN;anonymous : &#xNAN;ftp : ftp
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
Anon giriş ve bounce FTP kontrolleri, nmap tarafından varsayılan olarak -sC seçeneği ile gerçekleştirilir veya:
Bir FTP sunucusuna bir URL kullanarak (Firefox gibi) bağlanabilirsiniz:
Not edin ki eğer bir web uygulaması kullanıcı tarafından kontrol edilen verileri doğrudan bir FTP sunucusuna gönderiyorsa, çift URL kodlaması %0d%0a
(çift URL kodlamada bu %250d%250a
) 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 (örneğin http) iletişim kurmaya çalışmaktır.
Eğer kullanıcı/adınızda özel karakterler varsa, aşağıdaki komut kullanılabilir:
USER kullanıcı_adı
PASS şifre
HELP
Sunucu hangi komutların desteklendiğini belirtir
PORT 127,0,0,1,0,80
Bu, FTP sunucusuna 127.0.0.1 IP'si ile 80 numaralı portta bir bağlantı kurmasını belirtir (5. karakteri "0" ve 6. karakteri ondalık olarak port olarak koymalısınız ya da 5. ve 6. karakteri hex olarak portu ifade etmek için kullanmalısınız).
EPRT |2|127.0.0.1|80|
Bu, FTP sunucusuna 127.0.0.1 IP'si ile 80 numaralı portta bir TCP bağlantısı kurmasını belirtir ("2" ile belirtilmiştir). Bu komut IPv6 destekler.
LIST
Bu, mevcut klasördeki dosyaların listesini gönderir
LIST -R
Rekürsif liste (sunucu tarafından izin verilirse)
APPE /path/something.txt
Bu, FTP'ye pasif bir bağlantıdan veya PORT/EPRT bağlantısından alınan verileri bir dosyaya kaydetmesini belirtir. Dosya adı mevcutsa, verileri ekler.
STOR /path/something.txt
APPE
gibi ama dosyaları üzerine yazar
STOU /path/something.txt
APPE
gibi, ama mevcutsa hiçbir şey yapmaz.
RETR /path/to/file
Pasif veya bir port bağlantısı kurulmalıdır. Ardından, FTP sunucusu belirtilen dosyayı o bağlantı üzerinden gönderir
REST 6
Bu, sunucuya bir sonraki sefer RETR
kullanarak bir şey gönderdiğinde 6. bayttan başlaması gerektiğini belirtir.
TYPE i
Transferi ikili olarak ayarla
PASV
Bu, pasif bir bağlantı açar ve kullanıcıya nereden bağlanabileceğini belirtir
PUT /tmp/file.txt
Belirtilen dosyayı FTP'ye yükle
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. Ardından, bunu bir FTP sunucusu aracılığıyla bir ana bilgisayarın hangi portlarının açık olduğunu taramak için kullanabilirsiniz.
Burada bir FTP sunucusunu kullanarak portları taramayı öğrenin.
Bu davranışı, bir FTP sunucusunun diğer protokollerle etkileşimde bulunmasını sağlamak için de kötüye kullanabilirsiniz. Bir HTTP isteği içeren bir dosya yükleyebilir ve savunmasız FTP sunucusunun bunu rastgele bir HTTP sunucusuna göndermesini sağlayabilirsiniz (belki yeni bir yönetici kullanıcısı eklemek için?) veya hatta bir FTP isteği yükleyip savunmasız FTP sunucusunun farklı bir FTP sunucusundan bir dosya indirmesini sağlayabilirsiniz. Teori basit:
İsteği (bir metin dosyası içinde) savunmasız sunucuya yükleyin. Başka bir HTTP veya FTP sunucusuyla konuşmak istiyorsanız, satırları 0x0d 0x0a
ile değiştirmeniz gerektiğini unutmayın
Göndermek istemediğiniz karakterleri göndermemek için REST X
kullanın (belki isteği dosya içinde yüklemek için başta bazı resim başlıkları koymanız gerekiyordu)
Rastgele sunucuya ve hizmete bağlanmak için PORT
kullanın
Kaydedilen isteği sunucuya göndermek için RETR
kullanın.
Bu bir hata fırlatması muhtemeldir Socket yazılabilir değil çünkü bağlantı, verileri RETR
ile göndermek için yeterince uzun sürmez. Bunu önlemeye çalışmak için öneriler:
Eğer bir HTTP isteği gönderiyorsanız, aynı isteği birbiri ardına koyun en az ~0.5MB kadar. Böylece:
İsteği protokole göre "çöp" verilerle doldurmaya çalışın (FTP ile konuşurken belki sadece çöp komutlar veya dosyayı almak için RETR
talimatını tekrarlamak)
Sadece isteği birçok null karakter veya diğerleriyle doldurun (satırlara bölünmüş veya bölünmemiş)
Her durumda, burada bu davranışı kullanarak bir FTP sunucusunun farklı bir FTP sunucusundan bir dosya indirmesi hakkında eski bir örnek var.
FileZilla genellikle yerel bir Yönetim hizmetine FileZilla-Server için (port 14147) bağlanır. Eğer makinenizden bu porta erişmek için bir tünel oluşturabilirseniz, boş bir şifre kullanarak bağlanabilir ve FTP hizmeti için yeni bir kullanıcı oluşturabilirsiniz.
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ştir
chown_username=username
- Anonim olarak yüklenen dosyaların sahipliğini alan kullanıcı
local_enable=YES
- Yerel kullanıcıların giriş yapmasına izin ver
no_anon_password=YES
- Anonimden şifre isteme
write_enable=YES
- Aşağıdaki komutlara izin ver: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE ve SITE
ftp
port:21
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)