.. | ||
ftp-bounce-attack.md | ||
ftp-bounce-download-2oftp-file.md | ||
README.md |
21 - Testowanie penetracyjne FTP
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
- Pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć swoją firmę reklamowaną w HackTricks? A może chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLAN SUBSKRYPCJI!
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź mnie na Twitterze 🐦@carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium hacktricks i hacktricks-cloud.
Znajdź najważniejsze podatności, aby móc je szybko naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj go za darmo już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Podstawowe informacje
Protokół transferu plików (FTP) służy jako standardowy protokół do transferu plików w sieci komputerowej między serwerem a klientem.
Jest to protokół tekstowy, który używa jako znaku nowej linii 0x0d 0x0a
, dlatego czasami musisz połączyć się za pomocą telnet
lub nc -C
.
Domyślny port: 21
PORT STATE SERVICE
21/tcp open ftp
Aktywne i pasywne połączenia
W Aktywnym FTP klient FTP najpierw inicjuje połączenie kontrolne z portem N do portu komend serwera FTP - portu 21. Klient następnie nasłuchuje na porcie N+1 i wysyła port N+1 do serwera FTP. Serwer FTP następnie inicjuje połączenie danych z portu M do portu N+1 klienta FTP.
Jednak jeśli klient FTP ma skonfigurowany firewall, który kontroluje przychodzące połączenia danych z zewnątrz, to aktywny FTP może stanowić problem. Wykonalnym rozwiązaniem w takim przypadku jest pasywny FTP.
W Pasywnym FTP klient inicjuje połączenie kontrolne z portem N do portu 21 serwera FTP. Następnie klient wysyła polecenie passv. Serwer wysyła klientowi jeden ze swoich numerów portu M. Klient następnie inicjuje połączenie danych z portu P do portu M serwera FTP.
Źródło: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Debugowanie połączenia
Polecenia debug
i trace
w FTP mogą być używane do zobaczenia, jak przebiega komunikacja.
Wyliczanie
Pobieranie banera
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
Połączenie z FTP za pomocą starttls
Aby nawiązać połączenie z serwerem FTP za pomocą protokołu STARTTLS, wykonaj następujące kroki:
- Uruchom klienta FTP, na przykład FileZilla.
- Wprowadź adres serwera FTP, port (zwykle 21) oraz dane uwierzytelniające (nazwa użytkownika i hasło).
- Znajdź opcję umożliwiającą użycie protokołu STARTTLS. W przypadku FileZilli znajduje się ona w menu Serwer > Protokół FTP > Wykorzystaj TLS, jeśli jest dostępny.
- Zaznacz opcję "Wykorzystaj TLS, jeśli jest dostępny" i kliknij przycisk "Połącz".
- Jeśli serwer FTP obsługuje protokół STARTTLS, połączenie zostanie nawiązane z użyciem zabezpieczeń TLS.
Po pomyślnym nawiązaniu połączenia będziesz mógł przesyłać pliki i wykonywać inne operacje na serwerze FTP w sposób bezpieczny.
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
Nieautoryzowane wyliczanie
Z użyciem nmap
sudo nmap -sV -p21 -sC -A 10.10.10.10
Możesz użyć poleceń HELP
i FEAT
, aby uzyskać informacje o serwerze FTP:
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...)
Logowanie anonimowe
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
Atak brutalnej siły
Tutaj znajdziesz ładną listę domyślnych poświadczeń FTP: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automatyzacja
Anonimowe logowanie i sprawdzanie FTP z odbiciem są domyślnie wykonywane przez nmap za pomocą opcji -sC lub:
nmap --script ftp-* -p 21 <ip>
Połączenie przeglądarki
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (np. Firefox) za pomocą adresu URL:
ftp://anonymous:anonymous@10.10.10.98
Zauważ, że jeśli aplikacja internetowa wysyła dane kontrolowane przez użytkownika bezpośrednio do serwera FTP, możesz wysłać podwójne kodowanie URL %0d%0a
(w podwójnym kodowaniu URL jest to %250d%250a
) i spowodować, że serwer FTP wykonuje dowolne działania. Jednym z możliwych działań jest pobieranie zawartości z serwera kontrolowanego przez użytkownika, skanowanie portów lub próba komunikacji z innymi usługami opartymi na tekście (np. http).
Pobierz wszystkie pliki z FTP
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
Jeśli twoje hasło użytkownika zawiera znaki specjalne, można użyć następującej komendy:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Kilka komend FTP
USER nazwa_użytkownika
PASS hasło
HELP
Serwer wskazuje, które komendy są obsługiwanePORT 127,0,0,1,0,80
Spowoduje to, że serwer FTP nawiąże połączenie z adresem IP 127.0.0.1 na porcie 80 (musisz ustawić piąty znak jako "0" i szósty jako port w systemie dziesiętnym lub użyć piątego i szóstego znaku, aby wyrazić port w systemie szesnastkowym).EPRT |2|127.0.0.1|80|
Spowoduje to, że serwer FTP nawiąże połączenie TCP (wskazane przez "2") z adresem IP 127.0.0.1 na porcie 80. Ta komenda obsługuje IPv6.LIST
Spowoduje to wysłanie listy plików w bieżącym folderzeLIST -R
Lista rekurencyjna (jeśli dozwolone przez serwer)APPE /ścieżka/coś.txt
Spowoduje to, że FTP zapisze otrzymane dane z połączenia pasywnego lub z połączenia PORT/EPRT do pliku. Jeśli nazwa pliku istnieje, dane zostaną do niego dołączone.STOR /ścieżka/coś.txt
Podobne doAPPE
, ale nadpisuje plikiSTOU /ścieżka/coś.txt
Podobne doAPPE
, ale jeśli plik istnieje, nie robi niczego.RETR /ścieżka/do/pliku
Należy nawiązać połączenie pasywne lub portowe. Następnie serwer FTP wyśle wskazany plik przez to połączenieREST 6
Spowoduje to, że serwer następnym razem, gdy wyśle coś za pomocąRETR
, rozpocznie od 6. bajtu.TYPE i
Ustawia transfer na binarnyPASV
Spowoduje to otwarcie połączenia pasywnego i wskazanie użytkownikowi, gdzie może się połączyćPUT /tmp/plik.txt
Przesyła wskazany plik na FTP
Atak FTPBounce
Niektóre serwery FTP pozwalają na użycie komendy PORT. Komenda ta może być użyta do wskazania serwerowi, że chcesz połączyć się z innym serwerem FTP na określonym porcie. Można jej użyć do skanowania, które porty hosta są otwarte za pośrednictwem serwera FTP.
Dowiedz się tutaj, jak wykorzystać serwer FTP do skanowania portów.
Można również wykorzystać to zachowanie, aby sprawić, że serwer FTP będzie współpracować z innymi protokołami. Można przesłać plik zawierający żądanie HTTP i sprawić, że podatny serwer FTP wyśle je do dowolnego serwera HTTP (może dodać nowego użytkownika admina?) lub nawet przesłać żądanie FTP i sprawić, że podatny serwer FTP pobierze plik dla innego serwera FTP.
Teoria jest prosta:
- Prześlij żądanie (wewnątrz pliku tekstowego) na podatny serwer. Pamiętaj, że jeśli chcesz rozmawiać z innym serwerem HTTP lub FTP, musisz zmienić linie na
0x0d 0x0a
- Użyj
REST X
, aby uniknąć wysyłania niechcianych znaków (może trzeba było dodać nagłówek obrazu na początku pliku, aby przesłać żądanie) - Użyj
PORT
, aby połączyć się z dowolnym serwerem i usługą - Użyj
RETR
, aby wysłać zapisane żądanie do serwera.
Prawdopodobne jest, że wystąpi błąd Socket not writable , ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą RETR
. Sugestie, jak spróbować temu zapobiec, to:
- Jeśli wysyłasz żądanie HTTP, wstaw to samo żądanie jeden po drugim do co najmniej ~0,5 MB. Na przykład:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- Spróbuj wypełnić żądanie "śmieciowymi" danymi związanymi z protokołem (rozmawiając z FTP, może to być po prostu żadne polecenia lub powtarzanie instrukcji
RETR
, aby pobrać plik) - Po prostu wypełnij żądanie dużą ilością znaków null lub innych (podzielonych na linie lub nie)
W każdym razie, tutaj masz stary przykład, jak wykorzystać to, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.
Podatność serwera Filezilla
FileZilla zazwyczaj powiązuje z lokalnym serwisem administracyjnym dla FileZilla-Server (port 14147). Jeśli możesz utworzyć tunel z twojego komputera, aby uzyskać dostęp do tego portu, możesz się do niego podłączyć za pomocą pustego hasła i utworzyć nowego użytkownika dla usługi FTP.
Pliki konfiguracyjne
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
Post-Exploitation
Domyślna konfiguracja vsFTPd można znaleźć w /etc/vsftpd.conf
. Tutaj można znaleźć niektóre niebezpieczne ustawienia:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- Katalog dla anonimowych użytkowników.chown_uploads=YES
- Zmienia właściciela anonimowo przesłanych plikówchown_username=username
- Użytkownik, który otrzymuje własność anonimowo przesłanych plikówlocal_enable=YES
- Włącz logowanie lokalnych użytkownikówno_anon_password=YES
- Nie pytaj anonimowego użytkownika o hasłowrite_enable=YES
- Pozwala na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
Shodan
ftp
port:21
Znajdź najważniejsze podatności, aby szybko je naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj za darmo już dziś.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Automatyczne polecenia HackTricks
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'
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
- Pracujesz w firmie zajmującej się cyberbezpieczeństwem? Chcesz zobaczyć, jak Twoja firma jest reklamowana w HackTricks? A może chcesz mieć dostęp do najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF? Sprawdź PLAN SUBSKRYPCJI!
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź mnie na Twitterze 🐦@carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium hacktricks i hacktricks-cloud.