Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
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`**.
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.
Tutaj znajdziesz ładną listę z domyślnymi danymi logowania do ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
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).
* **`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 folderze
* **`LIST -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`** Jak `APPE`, ale nadpisze pliki
* **`STOU /path/something.txt`** Jak `APPE`, 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łączenie
* **`REST 6`** To wskaże serwerowi, że następnym razem, gdy wyśle coś używając `RETR`, powinien zacząć od 6. bajtu.
* **`TYPE i`** Ustaw transfer na binarny
* **`PASV`** 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
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.
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.\
1.**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`
2.**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)
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:
* 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)
W każdym razie, oto [stary przykład, jak nadużyć tego, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.](ftp-bounce-download-2oftp-file.md)
**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.
Ucz się i ćwicz Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Ucz się i ćwicz Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**