# 21 - Pentesting FTP
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite pristup **najnovijoj verziji PEASS ili preuzimanje HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)! * Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova** [**hacktricks repozitorijumu**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijumu**](https://github.com/carlospolop/hacktricks-cloud).
**Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## Osnovne informacije **Protokol za prenos fajlova (FTP)** služi kao standardni protokol za prenos fajlova preko računarske mreže između servera i klijenta.\ To je **plain-text** protokol koji koristi **novi karakter za novi red `0x0d 0x0a`** pa ponekad morate **povezati se koristeći `telnet`** ili **`nc -C`**. **Podrazumevani port:** 21 ``` PORT STATE SERVICE 21/tcp open ftp ``` ### Aktivne i pasivne veze U **Aktivnom FTP-u** FTP **klijent** prvo **inicira** kontrolnu **vezu** sa svog porta N do FTP servera na komandnom portu - port 21. Klijent zatim **sluša** port **N+1** i šalje port N+1 FTP serveru. FTP **server** zatim **inicira** vezu za prenos podataka, sa **svog porta M do porta N+1** FTP klijenta. Međutim, ako FTP klijent ima firewall postavljen koji kontroliše dolazne veze za prenos podataka sa spoljnih lokacija, tada aktivni FTP može predstavljati problem. I, izvodljivo rešenje za to je Pasivni FTP. U **Pasivnom FTP-u**, klijent inicira kontrolnu vezu sa svog porta N do porta 21 FTP servera. Nakon toga, klijent izdaje **passv komandu**. Server zatim šalje klijentu jedan od svojih portova M. I **klijent** **inicira** vezu za prenos podataka sa **svog porta P do porta M** FTP servera. Izvor: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) ### Debugiranje veze FTP komande **`debug`** i **`trace`** mogu se koristiti da se vidi **kako se odvija komunikacija**. ## Enumeracija ### Preuzimanje banera ```bash nc -vn 21 openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any ``` ### Povežite se na FTP koristeći starttls ``` 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 [] lftp 10.10.10.208:~> login username Password ``` ### Neautorizovano nabrajanje Korišćenjem **nmap**-a ```bash sudo nmap -sV -p21 -sC -A 10.10.10.10 ``` Možete koristiti komande `HELP` i `FEAT` da biste dobili informacije o FTP serveru: ``` 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...) ``` ### Anonimna prijava _anonymous : anonymous_\ _anonymous :_\ _ftp : ftp_ ```bash ftp >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 ``` ### [Brute force](../../generic-methodologies-and-resources/brute-force.md#ftp) Ovde možete pronaći lepu listu sa podrazumevanim ftp kredencijalima: [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) ### Automatizovano Provere anonimnog prijavljivanja i FTP provere se podrazumevano vrše nmap-om sa opcijom **-sC** ili: ```bash nmap --script ftp-* -p 21 ``` ## Povezivanje pretraživačem Možete se povezati sa FTP serverom koristeći pretraživač (kao što je Firefox) koristeći URL adresu: ```bash ftp://anonymous:anonymous@10.10.10.98 ``` Ako **web aplikacija** šalje podatke koje kontroliše korisnik **direktno na FTP server**, možete poslati dvostruko URL enkodirane `%0d%0a` bajtove (u dvostrukom URL enkodiranju ovo je `%250d%250a`) i naterati **FTP server da izvrši proizvoljne akcije**. Jedna od mogućih proizvoljnih akcija je preuzimanje sadržaja sa servera koji kontroliše korisnik, vršenje skeniranja portova ili pokušaj komunikacije sa drugim servisima zasnovanim na čistom tekstu (kao što je http). ## Preuzmi sve fajlove sa FTP-a ```bash wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all ``` Ako vaš korisničko ime/šifra sadrži specijalne karaktere, može se koristiti [sledeća komanda](https://stackoverflow.com/a/113900/13647948): ```bash wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ ``` ## Neke FTP komande * **`USER korisničko_ime`** * **`PASS lozinka`** * **`HELP`** Server pokazuje koje komande podržava * \*\*`PORT 127,0,0,1,0,80`\*\*Ovo će pokazati FTP serveru da uspostavi vezu sa IP adresom 127.0.0.1 na portu 80 (_trebate postaviti 5. karakter kao "0" i 6. kao port u decimalnom formatu ili koristiti 5. i 6. karakter da izrazite port u heksadecimalnom formatu_). * \*\*`EPRT |2|127,0,0,1|80|`\*\*Ovo će pokazati FTP serveru da uspostavi TCP vezu (_označeno sa "2"_) sa IP adresom 127.0.0.1 na portu 80. Ova komanda **podržava IPv6**. * **`LIST`** Ovo će poslati listu fajlova u trenutnom folderu * **`LIST -R`** Rekurzivno listanje (ako je dozvoljeno od strane servera) * **`APPE /putanja/nešto.txt`** Ovo će pokazati FTP-u da sačuva primljene podatke sa **pasivne** ili **PORT/EPRT** konekcije u fajl. Ako fajl već postoji, dodavaće podatke. * **`STOR /putanja/nešto.txt`** Slično kao `APPE` ali će prebrisati fajlove * **`STOU /putanja/nešto.txt`** Slično kao `APPE`, ali ako fajl već postoji, neće uraditi ništa. * **`RETR /putanja/do/fajla`** Pasivna ili port konekcija mora biti uspostavljena. Zatim, FTP server će poslati naznačeni fajl kroz tu konekciju * **`REST 6`** Ovo će pokazati serveru da sledeći put kada šalje nešto koristeći `RETR` treba da počne od 6. bajta. * **`TYPE i`** Postavlja transfer u binarni mod * **`PASV`** Ovo će otvoriti pasivnu konekciju i pokazati korisniku gde može da se poveže * **`PUT /tmp/fajl.txt`** Uploaduje naznačeni fajl na FTP ![](<../../.gitbook/assets/image (383).png>) ## FTPBounce napad Neki FTP serveri dozvoljavaju komandu PORT. Ova komanda se može koristiti da se pokaže serveru da želite da se povežete sa drugim FTP serverom na određenom portu. Zatim, možete koristiti ovo da skenirate koje portove na hostu su otvoreni preko FTP servera. [**Saznajte ovde kako zloupotrebiti FTP server za skeniranje portova.**](ftp-bounce-attack.md) Takođe možete zloupotrebiti ovaj postupak da naterate FTP server da interaguje sa drugim protokolima. Možete **uploadovati fajl koji sadrži HTTP zahtev** i naterati ranjiv FTP server da ga **pošalje proizvoljnom HTTP serveru** (_možda da dodate novog admin korisnika?_) ili čak uploadovati FTP zahtev i naterati ranjiv FTP server da preuzme fajl sa drugog FTP servera.\ Teorija je jednostavna: 1. **Uploadujte zahtev (unutar tekstualnog fajla) na ranjivi server.** Zapamtite da ako želite da komunicirate sa drugim HTTP ili FTP serverom, morate promeniti linije sa `0x0d 0x0a` 2. **Koristite `REST X` da biste izbegli slanje karaktera koje ne želite da pošaljete** (možda ste morali da stavite neki zaglavlje slike na početak da biste uploadovali zahtev unutar fajla) 3. **Koristite `PORT` da se povežete sa proizvoljnim serverom i servisom** 4. **Koristite `RETR` da pošaljete sačuvani zahtev serveru.** Vrlo je verovatno da će ovo **izazvati grešku poput** _**Socket not writable**_ **jer veza ne traje dovoljno dugo da pošalje podatke sa `RETR`**. Predlozi za pokušaj izbegavanja toga su: * Ako šaljete HTTP zahtev, **stavite isti zahtev jedan za drugim** dok ne dostignete **\~0.5MB** barem. Na primer: {% file src="../../.gitbook/assets/posts.txt" %} posts.txt {% endfile %} * Pokušajte da **popunite zahtev "junk" podacima u vezi sa protokolom** (razgovor sa FTP-om možda samo junk komande ili ponavljanje `RETR` instrukcije za dobijanje fajla) * Jednostavno **popunite zahtev sa puno nula karaktera ili drugih** (podeljeno u linije ili ne) U svakom slučaju, ovde imate [stari primer kako zloupotrebiti ovo da naterate FTP server da preuzme fajl sa drugog FTP servera.](ftp-bounce-download-2oftp-file.md) ## Filezilla Server Ranjivost **FileZilla** obično se **vezuje** za **lokalnu** **Administrativnu uslugu** za **FileZilla-Server** (port 14147). Ako možete napraviti **tunel** sa **vaše mašine** da pristupite ovom portu, možete se **povezati** na **njega** koristeći **praznu lozinku** i **kreirati** novog korisnika za FTP servis. ## Konfiguracioni fajlovi ``` ftpusers ftp.conf proftpd.conf vsftpd.conf ``` ### Post-Eksploatacija Podrazumevana konfiguracija vsFTPd-a može se pronaći u `/etc/vsftpd.conf`. Ovde možete pronaći neke opasne postavke: - `anonymous_enable=YES` - `anon_upload_enable=YES` - `anon_mkdir_write_enable=YES` - `anon_root=/home/username/ftp` - Direktorijum za anonimne korisnike. - `chown_uploads=YES` - Promena vlasništva nad anonimno otpremljenim fajlovima - `chown_username=username` - Korisnik koji dobija vlasništvo nad anonimno otpremljenim fajlovima - `local_enable=YES` - Omogućava lokalnim korisnicima prijavljivanje - `no_anon_password=YES` - Ne traži anonimnog korisnika za lozinku - `write_enable=YES` - Dozvoljava komande: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE ### Shodan - `ftp` - `port:21` *** **Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## HackTricks Automatske Komande ``` 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' ```
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite pristupiti **najnovijoj verziji PEASS ili preuzeti HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)! * Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova u** [**hacktricks repozitorijum**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijum**](https://github.com/carlospolop/hacktricks-cloud).