.. | ||
ftp-bounce-attack.md | ||
ftp-bounce-download-2oftp-file.md | ||
README.md |
21 - Pentesting FTP
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
- Da li radite u cybersecurity kompaniji? Želite li da vidite vašu kompaniju reklamiranu na HackTricks-u? Ili želite da imate pristup najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu? Proverite SUBSCRIPTION PLANS!
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Nabavite zvanični PEASS & HackTricks swag
- Pridružite se 💬 Discord grupi ili telegram grupi ili me pratite na Twitter-u 🐦@carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na hacktricks repo i hacktricks-cloud repo.
Pronađite najvažnije ranjivosti kako biste ih brže popravili. Intruder prati vašu površinu napada, pokreće proaktivne pretnje, pronalazi probleme u celokupnom tehnološkom skupu, od API-ja do veb aplikacija i cloud sistema. Isprobajte ga besplatno danas.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Osnovne informacije
File Transfer Protocol (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 new line karakter 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 svoje porte N do FTP serverovog komandnog porta - porta 21. Zatim klijent sluša na portu N+1 i šalje port N+1 FTP serveru. FTP server zatim inicira podatkovnu vezu sa svojeg porta M do porta N+1 FTP klijenta.
Međutim, ako FTP klijent ima postavljenu zaštitu od dolaznih podatkovnih veza sa spolja, 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 svoje porte N do porta 21 FTP servera. Nakon toga, klijent izdaje passv komandu. Server zatim šalje klijentu jedan od svojih brojeva porta M. I klijent inicira podatkovnu vezu sa svoje porte P do porta M FTP servera.
Izvor: 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
Banner Grabbing
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
Povezivanje na FTP koristeći starttls
Da biste se povezali na FTP server koristeći starttls, možete koristiti ftp
komandu sa opcijom -z
. Ova opcija omogućava enkripciju komunikacije između klijenta i servera.
ftp -z server.com
Nakon što se uspešno povežete na server, možete koristiti standardne FTP komande za prenos i manipulaciju fajlovima.
Povezivanje na FTP koristeći starttls sa Python-om
Ukoliko želite da se povežete na FTP server koristeći starttls koristeći Python, možete koristiti ftplib
biblioteku. Evo jednostavnog primera:
from ftplib import FTP_TLS
ftp = FTP_TLS('server.com')
ftp.login(user='username', passwd='password')
ftp.prot_p()
Nakon uspešnog povezivanja, možete koristiti metode retrbinary()
i storbinary()
za preuzimanje i slanje fajlova.
Povezivanje na FTP koristeći starttls sa Ruby-jem
U Ruby-ju, možete koristiti Net::FTP
biblioteku za povezivanje na FTP server koristeći starttls. Evo jednostavnog primera:
require 'net/ftp'
ftp = Net::FTP.new('server.com')
ftp.auth_tls
ftp.login('username', 'password')
Nakon uspešnog povezivanja, možete koristiti metode getbinaryfile()
i putbinaryfile()
za preuzimanje i slanje fajlova.
Povezivanje na FTP koristeći starttls sa PowerShell-om
U PowerShell-u, možete koristiti System.Net.FtpWebRequest
klasu za povezivanje na FTP server koristeći starttls. Evo jednostavnog primera:
$ftpRequest = [System.Net.FtpWebRequest]::Create('ftp://server.com')
$ftpRequest.EnableSsl = $true
$ftpRequest.Credentials = New-Object System.Net.NetworkCredential('username', 'password')
Nakon uspešnog povezivanja, možete koristiti metode DownloadFile()
i UploadFile()
za preuzimanje i slanje fajlova.
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 <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password
Neovlašćeno nabrajanje
Koristeći nmap
sudo nmap -sV -p21 -sC -A 10.10.10.10
Možete koristiti komande HELP
i FEAT
da biste dobili neke 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
ftp <IP>
>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
Ovde možete pronaći lepu listu sa podrazumevanim ftp kredencijalima: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automatizovano
Provera anonimnog prijavljivanja i provere FTP-a se podrazumevano izvode pomoću nmap-a sa opcijom -sC ili:
nmap --script ftp-* -p 21 <ip>
Povezivanje preko pregledača
Možete se povezati na FTP server koristeći pregledač (kao što je Firefox) koristeći URL kao što je:
ftp://anonymous:anonymous@10.10.10.98
Napomena da ako web aplikacija šalje podatke koje kontroliše korisnik direktno na FTP server, možete poslati dvostruko URL enkodirane %0d%0a
(u dvostrukom URL enkodiranju ovo je %250d%250a
) bajtove i naterati FTP server da izvrši proizvoljne radnje. Jedna od mogućih proizvoljnih radnji je preuzimanje sadržaja sa servera koji korisnik kontroliše, 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
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š korisnik/lozinka sadrži posebne karaktere, može se koristiti sledeća komanda:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Neke FTP komande
USER korisničko_ime
PASS lozinka
HELP
Server pokazuje koje komande podržavaPORT 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 peti karakter kao "0" i šesti kao port u decimalnom formatu ili koristiti peti i šesti karakter da biste izrazili 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 folderuLIST -R
Rekurzivno listanje (ako je dozvoljeno od strane servera)APPE /putanja/nešto.txt
Ovo će pokazati FTP-u da sačuva primljene podatke iz pasivne veze ili iz veze sa PORT/EPRT u fajl. Ako ime fajla već postoji, dodavaće podatke.STOR /putanja/nešto.txt
Slično kaoAPPE
, ali će prebrisati fajloveSTOU /putanja/nešto.txt
Slično kaoAPPE
, ali ako postoji, neće ništa uraditi.RETR /putanja/do/fajla
Mora se uspostaviti pasivna ili port vezu. Zatim, FTP server će poslati naznačeni fajl preko te vezeREST 6
Ovo će pokazati serveru da sledeći put kada šalje nešto koristećiRETR
, treba da počne od 6. bajta.TYPE i
Postavi transfer u binarni formatPASV
Ovo će otvoriti pasivnu vezu i pokazati korisniku gde se može povezatiPUT /tmp/fajl.txt
Uploaduje naznačeni fajl na FTP
FTPBounce napad
Neki FTP serveri dozvoljavaju komandu PORT. Ova komanda se može koristiti da se serveru pokaže da želite da se povežete sa drugim FTP serverom na nekom portu. Zatim, možete koristiti ovo da skenirate koje portove hosta su otvoreni preko FTP servera.
Saznajte ovde kako zloupotrebiti FTP server za skeniranje portova.
Takođe možete zloupotrebiti ovu funkcionalnost da napravite da FTP server komunicira sa drugim protokolima. Možete uploadovati fajl koji sadrži HTTP zahtev i naterati ranjivi FTP server da ga pošalje na proizvoljni HTTP server (možda da dodate novog admin korisnika?) ili čak uploadovati FTP zahtev i naterati ranjivi FTP server da preuzme fajl sa drugog FTP servera.
Teorija je jednostavna:
- 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
- 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 fajla da biste uploadovali zahtev unutar fajla) - Koristite
PORT
da se povežete sa proizvoljnim serverom i servisom - Koristite
RETR
da pošaljete sačuvani zahtev serveru.
Vrlo je verovatno da će ovo izazvati grešku kao Socket not writable jer veza ne traje dovoljno dugo da bi se podaci poslali 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 (1).txt" %} posts.txt {% endfile %}
- Pokušajte da popunite zahtev "junk" podacima u vezi sa protokolom (kada razgovarate sa FTP-om, možda samo junk komande ili ponavljanje
RETR
instrukcije da biste dobili fajl) - Jednostavno popunite zahtev sa puno null karaktera ili drugih (podeljenih u linije ili ne)
U svakom slučaju, ovde imate stari primer kako zloupotrebiti ovo da FTP server preuzme fajl sa drugog FTP servera.
Filezilla Server ranjivost
FileZilla obično vezuje 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 podešavanja:
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 fajlovimachown_username=username
- Korisnik koji dobija vlasništvo nad anonimno otpremljenim fajlovimalocal_enable=YES
- Omogućavanje lokalnim korisnicima da se prijaveno_anon_password=YES
- Ne tražiti anonimnog korisnika za lozinkuwrite_enable=YES
- Dozvoliti komande: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
Shodan
ftp
port:21
Pronađite najvažnije ranjivosti kako biste ih brže popravili. Intruder prati vašu površinu napada, pokreće proaktivno skeniranje pretnji, pronalazi probleme u celokupnom tehnološkom sklopu, od API-ja do veb aplikacija i sistemima u oblaku. Isprobajte besplatno danas.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Automatske komande HackTricks-a
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 cybersecurity kompaniji? Želite li da vidite vašu kompaniju reklamiranu na HackTricks-u? Ili želite da imate pristup najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu? Proverite SUBSCRIPTION PLANS!
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Nabavite zvanični PEASS & HackTricks swag
- Pridružite se 💬 Discord grupi ili telegram grupi ili me pratite na Twitter-u 🐦@carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na hacktricks repo i hacktricks-cloud repo.