21 - Pentesting FTP

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Osnovne informacije

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 pa ponekad treba da se povežete koristeći telnet ili nc -C.

Podrazumevani port: 21

PORT   STATE SERVICE
21/tcp open  ftp

Connections Active & Passive

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 firewall 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.

Source: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/

Connection debugging

FTP komande debug i trace mogu se koristiti da se vidi kako se komunikacija odvija.

Enumeration

nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any

Povezivanje 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 <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password

Unauth enum

Sa nmap

sudo nmap -sV -p21 -sC -A 10.10.10.10

Možete koristiti komande HELP i FEAT da dobijete 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...)

Anonymous login

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

Ovde možete pronaći lepu listu sa podrazumevanim ftp akreditivima: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt

Automated

Anon login i bounce FTP provere se izvode podrazumevano od strane nmap-a sa -sC opcijom ili:

nmap --script ftp-* -p 21 <ip>

Browser connection

Možete se povezati na FTP server koristeći pregledač (kao što je Firefox) koristeći URL kao:

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 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).

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

Ако ваш кориснички налог/лозинка има специјалне знакове, следећа команда може бити коришћена:

wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/

Neki FTP komandi

  • USER username

  • PASS password

  • HELP Server pokazuje koji su komandi podržani

  • **PORT 127,0,0,1,0,80**Ovo će označiti 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 označiti 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 označiti 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 označiti server da sledeći put kada pošalje nešto koristeći RETR treba da počne od 6. bajta.

  • TYPE i Postavi transfer na binarni

  • PASV Ovo će otvoriti pasivnu vezu i označiti korisnika gde može da se poveže

  • PUT /tmp/file.txt Učitaj označeni fajl na FTP

FTPBounce napad

Neki FTP serveri dozvoljavaju komandu PORT. Ova komanda se može koristiti da označi serveru 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:

  1. 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

  2. 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)

  3. Koristite PORT da se povežete na proizvoljni server i uslugu

  4. 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:

495KB
posts.txt
  • Pokušajte da napunite 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 napunite 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 Server Ranjivost

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.

Konfiguracione datoteke

ftpusers
ftp.conf
proftpd.conf
vsftpd.conf

Post-Exploitation

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

Shodan

  • ftp

  • port:21

HackTricks Automatic Commands

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'

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)

Podržite HackTricks

Last updated