21 - Pentesting FTP
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
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ół w formacie tekstowym, który używa jako znaku nowej linii 0x0d 0x0a
, więc czasami musisz połączyć się używając telnet
lub nc -C
.
Domyślny port: 21
Połączenia Aktywne i Pasywne
W Aktywnym FTP klient FTP najpierw inicjuje połączenie kontrolne z portu N do portu komend serwera FTP – port 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 jego portu M do portu N+1 klienta FTP.
Jednak, jeśli klient FTP ma skonfigurowany zaporę, która kontroluje przychodzące połączenia danych z zewnątrz, to aktywne FTP może stanowić problem. A wykonalnym rozwiązaniem jest Pasywne FTP.
W Pasywnym FTP, klient inicjuje połączenie kontrolne z portu N do portu 21 serwera FTP. Po tym, klient wydaje komendę passv. Serwer następnie wysyła klientowi jeden ze swoich numerów portu M. A klient inicjuje połączenie danych z jego portu P do portu M serwera FTP.
Źródło: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Debugowanie połączenia
Polecenia FTP debug
i trace
mogą być używane do zobaczenia jak odbywa się komunikacja.
Enumeracja
Przechwytywanie banerów
Połączenie z FTP za pomocą starttls
Unauth enum
Z nmap
Możesz użyć poleceń HELP
i FEAT
, aby uzyskać informacje o serwerze FTP:
Logowanie anonimowe
anonymous : anonimowy anonymous : ftp : ftp
Tutaj znajdziesz ładną listę z domyślnymi danymi logowania do ftp: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automated
Anonimowe logowanie i sprawdzenie bounce FTP są wykonywane domyślnie przez nmap z opcją -sC lub:
Połączenie przez przeglądarkę
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (takiej jak Firefox) używając adresu URL takiego jak:
Zauważ, że jeśli aplikacja webowa 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 to %250d%250a
) i sprawić, że serwer FTP wykona dowolne akcje. Jedną z tych możliwych dowolnych akcji jest pobranie zawartości z serwera kontrolowanego przez użytkownika, przeprowadzenie skanowania portów lub próba komunikacji z innymi usługami opartymi na czystym tekście (takimi jak http).
Pobierz wszystkie pliki z FTP
Jeśli twoja nazwa użytkownika/hasło zawiera znaki specjalne, można użyć następującego polecenia:
Niektóre komendy FTP
USER username
PASS password
HELP
Serwer wskazuje, które komendy są obsługiwane**
PORT 127,0,0,1,0,80
**To wskaże serwerowi FTP nawiązanie połączenia z IP 127.0.0.1 na porcie 80 (musisz wpisać 5-ty znak jako "0" i 6-ty jako port w systemie dziesiętnym lub użyć 5-tego i 6-tego do wyrażenia portu w systemie szesnastkowym).**
EPRT |2|127.0.0.1|80|
**To wskaże serwerowi FTP nawiązanie połączenia TCP (wskazane przez "2") z IP 127.0.0.1 na porcie 80. Ta komenda obsługuje IPv6.LIST
To wyśle listę plików w bieżącym folderzeLIST -R
Lista rekurencyjna (jeśli dozwolone przez serwer)APPE /path/something.txt
To wskaże FTP na zapisanie danych otrzymanych z pasywnego połączenia lub z połączenia PORT/EPRT do pliku. Jeśli nazwa pliku istnieje, dane zostaną dołączone.STOR /path/something.txt
JakAPPE
, ale nadpisze plikiSTOU /path/something.txt
JakAPPE
, ale jeśli istnieje, nie zrobi nic.RETR /path/to/file
Musi być nawiązane pasywne lub portowe połączenie. Następnie serwer FTP wyśle wskazany plik przez to połączenieREST 6
To wskaże serwerowi, że następnym razem, gdy wyśle coś używającRETR
, powinien zacząć od 6. bajtu.TYPE i
Ustaw transfer na binarnyPASV
To otworzy pasywne połączenie i wskaże użytkownikowi, gdzie może się połączyćPUT /tmp/file.txt
Prześlij wskazany plik do FTP
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F600722126-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FJtticLwENZ4i7WwgHiQe%252Fuploads%252Fgit-blob-9281c37ed74edeb5e97d1d77dd1ac188fb92baef%252Fimage%2520%28386%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1fbc628f&sv=1)
Atak FTPBounce
Niektóre serwery FTP pozwalają na komendę PORT. Ta komenda może być użyta do wskazania serwerowi, że chcesz połączyć się z innym serwerem FTP na pewnym porcie. Następnie możesz użyć tego do skanowania, które porty hosta są otwarte przez serwer FTP.
Dowiedz się tutaj, jak nadużyć serwera FTP do skanowania portów.
Możesz również nadużyć tego zachowania, aby sprawić, że serwer FTP będzie współdziałał z innymi protokołami. Możesz przesłać plik zawierający żądanie HTTP i sprawić, by podatny serwer FTP wysłał je do dowolnego serwera HTTP (może, aby dodać nowego użytkownika admina?) lub nawet przesłać żądanie FTP i sprawić, by podatny serwer FTP pobrał plik z innego serwera FTP. Teoria jest prosta:
Prześlij żądanie (w pliku tekstowym) do podatnego serwera. 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 znaków, których nie chcesz wysyłać (może, aby przesłać żądanie w pliku, musiałeś dodać nagłówek obrazu na początku)Użyj
PORT
, aby połączyć się z dowolnym serwerem i usługąUżyj
RETR
, aby wysłać zapisane żądanie do serwera.
Jest bardzo prawdopodobne, że spowoduje to błąd taki jak Socket not writable ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą RETR
. Sugestie, aby spróbować tego uniknąć, to:
Jeśli wysyłasz żądanie HTTP, umieść to samo żądanie jedno po drugim aż do ~0.5MB przynajmniej. Tak jak to:
Spróbuj wypełnić żądanie "śmieciowymi" danymi związanymi z protokołem (rozmawiając z FTP, może po prostu śmieciowe komendy lub powtarzając instrukcję
RETR
, aby uzyskać plik)Po prostu wypełnij żądanie dużą ilością znaków null lub innych (podzielonych na linie lub nie)
W każdym razie, oto stary przykład, jak nadużyć tego, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.
Wrażliwość serwera Filezilla
FileZilla zazwyczaj wiąże się z lokalnym serwisem administracyjnym dla FileZilla-Server (port 14147). Jeśli możesz stworzyć tunel z twojej maszyny do dostępu do tego portu, możesz połączyć się z nim używając pustego hasła i utworzyć nowego użytkownika dla usługi FTP.
Pliki konfiguracyjne
Post-Exploitation
Domyślna konfiguracja vsFTPd znajduje się w /etc/vsftpd.conf
. Możesz tutaj znaleźć niebezpieczne ustawienia:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- Katalog dla anonimowych.chown_uploads=YES
- Zmień właściciela anonimowo przesłanych plikówchown_username=username
- Użytkownik, który otrzymuje własność anonimowo przesłanych plikówlocal_enable=YES
- Zezwól lokalnym użytkownikom na logowanieno_anon_password=YES
- Nie pytaj anonimowych o hasłowrite_enable=YES
- Zezwól na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
Shodan
ftp
port:21
HackTricks Automatic Commands
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated