21 - Pentesting FTP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
File Transfer Protocol (FTP) služi kao standardni protokol za prenos datoteka preko računarske mreže između servera i klijenta.
To je protokol u običnom tekstu koji koristi kao karakter novog reda 0x0d 0x0a
tako da ponekad treba da povežete koristeći telnet
ili nc -C
.
Podrazumevani port: 21
U Aktivnom FTP-u FTP klijent prvo inicira kontrolnu vezu sa svog porta N na komandni port FTP servera – port 21. Klijent zatim sluša port N+1 i šalje port N+1 FTP serveru. FTP server zatim inicira podatkovnu vezu, sa svojeg porta M na port N+1 FTP klijenta.
Međutim, ako FTP klijent ima podešen vatrozid koji kontroliše dolazne podatkovne veze sa spolja, tada aktivni FTP može biti problem. A, izvodljivo rešenje za to je Pasivni FTP.
U Pasivnom FTP-u, klijent inicira kontrolnu vezu sa svog porta N na port 21 FTP servera. Nakon toga, klijent izdaje passv komandu. Server zatim šalje klijentu jedan od svojih brojeva portova M. I klijent inicira podatkovnu vezu sa svojeg porta P na port M FTP servera.
Izvor: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
FTP komande debug
i trace
mogu se koristiti da se vidi kako se komunikacija odvija.
Sa nmap
Možete koristiti komande HELP
i FEAT
da dobijete neke informacije o FTP serveru:
anonymous : anonymous &#xNAN;anonymous : &#xNAN;_ftp : ftp
Ovde možete pronaći lepu listu sa podrazumevanim ftp akreditivima: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Anonimni login i bounce FTP provere se izvode podrazumevano od strane nmap-a sa -sC opcijom ili:
Možete se povezati na FTP server koristeći pregledač (kao što je Firefox) koristeći URL kao:
Napomena da ako web aplikacija šalje podatke koje kontroliše korisnik direktno na FTP server, možete poslati dvostruko URL kodirane %0d%0a
(u dvostruko URL kodiranju ovo je %250d%250a
) bajtove i naterati FTP server da izvrši proizvoljne radnje. Jedna od ovih mogućih proizvoljnih radnji je preuzimanje sadržaja sa servera koji kontroliše korisnik, izvođenje skeniranja portova ili pokušaj komunikacije sa drugim uslugama zasnovanim na običnom tekstu (kao što je http).
Ako vaš korisnički nalog/lozinka sadrži posebne karaktere, sledeća komanda može biti korišćena:
USER username
PASS password
HELP
Server pokazuje koji su komandi podržani
PORT 127,0,0,1,0,80
Ovo će naterati FTP server da uspostavi vezu sa IP 127.0.0.1 na portu 80 (morate staviti 5. karakter kao "0" i 6. kao port u decimalnom formatu ili koristiti 5. i 6. za izražavanje porta u heksadecimalnom formatu).
EPRT |2|127.0.0.1|80|
Ovo će naterati FTP server da uspostavi TCP vezu (označeno sa "2") sa IP 127.0.0.1 na portu 80. Ova komanda podržava IPv6.
LIST
Ovo će poslati listu fajlova u trenutnom folderu
LIST -R
Lista rekurzivno (ako je dozvoljeno od strane servera)
APPE /path/something.txt
Ovo će naterati FTP da sačuva podatke primljene iz pasivne veze ili iz PORT/EPRT veze u fajl. Ako ime fajla postoji, podaci će se dodati.
STOR /path/something.txt
Kao APPE
ali će prepisati fajlove
STOU /path/something.txt
Kao APPE
, ali ako postoji, neće uraditi ništa.
RETR /path/to/file
Mora se uspostaviti pasivna ili port veza. Tada će FTP server poslati označeni fajl kroz tu vezu
REST 6
Ovo će naterati server da sledeći put kada pošalje nešto koristeći RETR
počne od 6. bajta.
TYPE i
Postavi prenos na binarni
PASV
Ovo će otvoriti pasivnu vezu i pokazati korisniku gde može da se poveže
PUT /tmp/file.txt
Učitaj označeni fajl na FTP
Neki FTP serveri dozvoljavaju komandu PORT. Ova komanda se može koristiti da se serveru pokaže da želite da se povežete na drugi FTP server na nekom portu. Tada možete koristiti ovo da skenirate koji portovi na hostu su otvoreni preko FTP servera.
Saznajte ovde kako da zloupotrebite FTP server za skeniranje portova.
Takođe možete zloupotrebiti ovo ponašanje da naterate FTP server da komunicira sa drugim protokolima. Možete učitati fajl koji sadrži HTTP zahtev i naterati ranjivi FTP server da pošalje na proizvoljni HTTP server (možda da dodate novog admin korisnika?) ili čak učitati FTP zahtev i naterati ranjivi FTP server da preuzme fajl sa drugog FTP servera. Teorija je jednostavna:
Učitajte 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
Koristite REST X
da izbegnete slanje karaktera koje ne želite da pošaljete (možda da biste učitali zahtev unutar fajla morali ste da stavite neki zaglavlje slike na početku)
Koristite PORT
da se povežete na proizvoljni server i uslugu
Koristite RETR
da pošaljete sačuvani zahtev serveru.
Veoma je verovatno da će ovo izbaciti grešku kao Socket not writable jer veza ne traje dovoljno dugo da pošalje podatke sa RETR
. Predlozi da pokušate da izbegnete to su:
Ako šaljete HTTP zahtev, stavite isti zahtev jedan za drugim dok ne ~0.5MB barem. Ovako:
Pokušajte da popunite zahtev "junk" podacima vezanim za protokol (govoreći o FTP-u možda samo junk komande ili ponavljajući RETR
instrukciju da dobijete fajl)
Samo popunite zahtev sa puno null karaktera ili drugih (podeljenih na linije ili ne)
U svakom slučaju, ovde imate stari primer o tome kako zloupotrebiti ovo da naterate FTP server da preuzme fajl sa drugog FTP servera.
FileZilla obično vezuje na lokalno Administrativnu uslugu za FileZilla-Server (port 14147). Ako možete da kreirate tunel sa vašeg računara da pristupite ovom portu, možete povezati na njega koristeći praznu lozinku i kreirati novog korisnika za FTP uslugu.
Podrazumevana konfiguracija vsFTPd može se nać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
- Promeni vlasništvo nad anonimno otpremljenim datotekama
chown_username=username
- Korisnik koji dobija vlasništvo nad anonimno otpremljenim datotekama
local_enable=YES
- Omogući lokalnim korisnicima da se prijave
no_anon_password=YES
- Ne traži lozinku od anonimnih korisnika
write_enable=YES
- Dozvoli komande: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, i SITE
ftp
port:21
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)