hacktricks/network-services-pentesting/pentesting-ftp/README.md

14 KiB

21 - Pentesting FTP

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

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/

Debugiranje veze

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

Enumeracija

Preuzimanje banera

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

Neautorizovano nabrajanje

Korišćenjem nmap-a

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

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

Provere anonimnog prijavljivanja i FTP provere se podrazumevano vrše nmap-om sa opcijom -sC ili:

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

Povezivanje pretraživačem

Možete se povezati sa FTP serverom koristeći pretraživač (kao što je Firefox) koristeći URL adresu:

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

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:

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

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.

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.

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