21 - Pentesting FTP
Grupa Try Hard Security
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ół czystego tekstu, 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
Połączenia aktywne i pasywne
W Aktywnym FTP klient FTP najpierw inicjuje połączenie kontrolne z portu N do portu poleceń 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 ustawiony firewall kontrolujący przychodzące połączenia danych z zewnątrz, to aktywny FTP może stanowić problem. Rozwiązaniem tego problemu jest pasywny FTP.
W Pasywnym FTP klient inicjuje połączenie kontrolne z portu N do portu 21 serwera FTP. Następnie klient wydaje polecenie passv. Serwer następnie wysyła klientowi jeden ze swoich numerów portów M. Klient następnie 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 zachodzi komunikacja.
Wyliczanie
Pobieranie banera
Połączenie z FTP za pomocą starttls
Nieautoryzowane wyliczanie
Z użyciem nmap
Możesz użyć poleceń HELP
i FEAT
, aby uzyskać informacje o serwerze FTP:
Logowanie anonimowe
anonymous : anonymous anonymous : ftp : ftp
Tutaj znajdziesz fajną listę domyślnych poświadczeń ftp: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Zautomatyzowane
Testy anonimowego logowania i odbicia FTP są domyślnie wykonywane przez nmap z opcją -sC lub:
Połączenie przeglądarki
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (np. Firefox) za pomocą adresu URL:
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 to %250d%250a
) bajtów i sprawić, że serwer FTP wykona arbitralne akcje. Jedną z możliwych arbitralnych 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 tekście zwykłym (np. http).
Pobierz wszystkie pliki z FTP
Jeśli twój użytkownik/hasło zawiera znaki specjalne, można użyć następującej komendy:
Kilka poleceń FTP
USER nazwa_użytkownika
PASS hasło
HELP
Serwer wskazuje, które polecenia są obsługiwane**
PORT 127,0,0,1,0,80
**To spowoduje, że serwer FTP nawiąże połączenie z adresem IP 127.0.0.1 na porcie 80 (musisz ustawić 5. znak jako "0" i 6. jako numer portu w systemie dziesiętnym lub użyć 5. i 6. znaku, aby wyrazić port w systemie szesnastkowym).**
EPRT |2|127.0.0.1|80|
**Spowoduje, że serwer FTP nawiąże połączenie TCP (oznaczone przez "2") z adresem IP 127.0.0.1 na porcie 80. To polecenie obsługuje IPv6.LIST
Spowoduje wysłanie listy plików w bieżącym folderzeLIST -R
Lista rekursywnie (jeśli serwer zezwala)APPE /ścieżka/coś.txt
Spowoduje, ż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 dodane.STOR /ścieżka/coś.txt
Podobne doAPPE
, ale nadpisze plikiSTOU /ścieżka/coś.txt
Podobne doAPPE
, ale jeśli plik istnieje, nic nie zrobi.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, że serwer następnym razem, gdy wyśle coś za pomocąRETR
, rozpocznie od 6. bajtu.TYPE i
Ustawia transfer na binarnyPASV
Spowoduje otwarcie połączenia pasywnego i wskaże użytkownikowi, gdzie może się połączyćPUT /tmp/plik.txt
Wysyła wskazany plik na serwer FTP
Atak FTPBounce
Niektóre serwery FTP pozwalają na użycie polecenia PORT. To polecenie można wykorzystać, aby wskazać serwerowi, że chcesz połączyć się z innym serwerem FTP na określonym porcie. Następnie można użyć tego do skanowania otwartych portów hosta 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 to posłużyć do dodania nowego użytkownika admina?) lub nawet przesłać żądanie FTP i sprawić, że podatny serwer FTP pobierze plik z innego serwera FTP. Teoria jest prosta:
Prześlij żądanie (w pliku tekstowym) do podatnego serwera. Pamiętaj, że jeśli chcesz porozmawiać 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 wysłać (może być konieczne dodanie nagłówka obrazu na początku, aby przesłać żądanie w pliku)Użyj
PORT
, aby połączyć się z dowolnym serwerem i usługąUżyj
RETR
, aby wysłać zapisane żądanie do serwera.
Prawdopodobnie pojawi się błąd jak Socket not writable, ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą RETR
. Sugerowane sposoby próby uniknięcia tego to:
Jeśli wysyłasz żądanie HTTP, wysyłaj to samo żądanie jeden po drugim do przynajmniej ~0,5 MB. Na przykład:
Spróbuj wypełnić żądanie "śmieciami" związanymi z protokołem (w przypadku FTP może to być po prostu polecenia "śmieci" lub powtarzanie instrukcji
RETR
do pobrania pliku)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.
Luka w zabezpieczeniach serwera Filezilla
FileZilla zazwyczaj łączy się z usługą administracyjną 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ć używając pustego hasła i utworzyć nowego użytkownika dla usługi FTP.
Pliki konfiguracyjne
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.chown_uploads=YES
- Zmiana 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 o hasłowrite_enable=YES
- Pozwól na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
Shodan
ftp
port:21
Try Hard Security Group
HackTricks Automatyczne Polecenia
Last updated