21 - Pentesting FTP

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Kikundi cha Usalama cha Try Hard


Taarifa Msingi

Itifaki ya Uhamishaji wa Faili (FTP) hutumika kama itifaki ya kawaida kwa uhamishaji wa faili kwenye mtandao wa kompyuta kati ya seva na mteja. Ni itifaki ya maandishi wazi inayotumia tabia mpya ya mstari 0x0d 0x0a kwa hivyo mara nyingine unahitaji kuunganisha kutumia telnet au nc -C.

Bandari ya Chaguo: 21

PORT   STATE SERVICE
21/tcp open  ftp

Uunganisho wa Moja kwa Moja na wa Kupitisha

Katika FTP ya Moja kwa Moja, mteja wa FTP kwanza ananzisha uunganisho wa kudhibiti kutoka kwa bandari yake N kwenda kwa bandari ya amri ya Seva ya FTP - bandari 21. Mteja kisha anasikiliza kwenye bandari N+1 na kutuma bandari N+1 kwa Seva ya FTP. Seva ya FTP kisha inaanzisha uunganisho wa data, kutoka kwa bandari yake M kwenda kwa bandari N+1 ya Mteja wa FTP.

Lakini, ikiwa Mteja wa FTP ana firewall iliyowekwa kudhibiti uunganisho wa data unaokuja kutoka nje, basi FTP ya moja kwa moja inaweza kuwa tatizo. Na, suluhisho linalowezekana kwa hilo ni FTP ya Kupitisha.

Katika FTP ya Kupitisha, mteja ananzisha uunganisho wa kudhibiti kutoka kwa bandari yake N kwenda kwa bandari 21 ya Seva ya FTP. Baada ya hii, mteja anatoa amri ya passv. Seva kisha inatuma mteja nambari moja ya bandari yake M. Na mteja anaanzisha uunganisho wa data kutoka kwa bandari yake P kwenda kwa bandari M ya Seva ya FTP.

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

Uchunguzi wa Uunganisho

Amri za FTP debug na trace zinaweza kutumika kuona jinsi mawasiliano yanavyotokea.

Uorodheshaji

Kukamata Bango

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

Unganisha kwa FTP ukitumia 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

Kuchunguza bila idhini

Kwa nmap

sudo nmap -sV -p21 -sC -A 10.10.10.10

Unaweza kutumia amri HELP na FEAT kupata baadhi ya taarifa za seva ya FTP:

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

Kuingia kwa njia ya Anonymous

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

Hapa unaweza kupata orodha nzuri ya siri za msingi za ftp: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt

Kiotomatiki

Uchunguzi wa Anon login na bounce FTP hufanywa kiotomatiki na nmap kwa chaguo la -sC au:

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

Uunganisho wa Kivinjari

Unaweza kuunganisha kwenye seva ya FTP ukitumia kivinjari (kama Firefox) ukitumia URL kama:

ftp://anonymous:anonymous@10.10.10.98

Tafadhali kumbuka kwamba ikiwa programu-jalizi ya wavuti inatuma data inayodhibitiwa na mtumiaji moja kwa moja kwa seva ya FTP unaweza kutuma URL encode mara mbili %0d%0a (katika URL encode mara mbili hii ni %250d%250a) na kufanya seva ya FTP ifanye vitendo vya ujanja. Moja ya vitendo vya ujanja vinavyowezekana ni kupakua maudhui kutoka kwa seva inayodhibitiwa na mtumiaji, kufanya uchunguzi wa bandari au jaribu kuwasiliana na huduma zingine zinazotegemea maandishi wazi (kama vile http).

Pakua faili zote kutoka FTP

wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all

Ikiwa jina la mtumiaji/nywila lina herufi maalum, amri ifuatayo inaweza kutumika:

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

Baadhi ya amri za FTP

  • USER jina_la_mtumiaji

  • PASS nenosiri

  • HELP Seva inaonyesha ni amri zipi zinasaidiwa

  • **PORT 127,0,0,1,0,80**Hii itaonyesha seva ya FTP kuweka uhusiano na IP 127.0.0.1 kwenye bandari 80 (unahitaji kuweka herufi ya 5 kuwa "0" na ya 6 kama bandari kwa decimal au tumia ya 5 na 6 kuonyesha bandari kwa hex).

  • **EPRT |2|127.0.0.1|80|**Hii itaonyesha seva ya FTP kuweka uhusiano wa TCP (unaoonyeshwa na "2") na IP 127.0.0.1 kwenye bandari 80. Amri hii inasaidia IPv6.

  • LIST Hii itatuma orodha ya faili kwenye folda ya sasa

  • LIST -R Orodhesha kwa njia ya kurudia (ikiwa inaruhusiwa na seva)

  • APPE /njia/kitu.txt Hii itaonyesha FTP kuhifadhi data iliyopokelewa kutoka kwa uhusiano wa passive au kutoka kwa uhusiano wa PORT/EPRT kwenye faili. Ikiwa jina la faili lipo, itaongeza data.

  • STOR /njia/kitu.txt Kama APPE lakini itabadilisha faili zilizopo

  • STOU /njia/kitu.txt Kama APPE, lakini ikiwepo haitafanya chochote.

  • RETR /njia/ya/faili Uhusiano wa passive au wa port lazima uwe umewekwa. Kisha, seva ya FTP itatuma faili iliyotajwa kupitia uhusiano huo

  • REST 6 Hii itaonyesha seva kwamba wakati inatuma kitu kutumia RETR inapaswa kuanza kwenye herufi ya 6.

  • TYPE i Weka uhamisho kuwa binary

  • PASV Hii itafungua uhusiano wa passive na itaonyesha mtumiaji mahali anaweza kuunganisha

  • PUT /tmp/kitu.txt Pakia faili iliyotajwa kwenye FTP

Shambulio la FTPBounce

Baadhi ya seva za FTP huruhusu amri ya PORT. Amri hii inaweza kutumika kuonyesha kwa seva kwamba unataka kuunganisha kwenye seva nyingine ya FTP kwenye bandari fulani. Kisha, unaweza kutumia hii kuscan bandari zipi za mwenyeji ziko wazi kupitia seva ya FTP.

Jifunze hapa jinsi ya kutumia seva ya FTP kuscan bandari.

Unaweza pia kutumia tabia hii kufanya seva ya FTP iingiliane na itifaki nyingine. Unaweza kupakia faili inayohusisha ombi la HTTP na kufanya seva ya FTP iliyo hatarini itume kwa seva ya HTTP isiyojulikana (labda kuongeza mtumiaji mpya wa msimamizi?) au hata kupakia ombi la FTP na kufanya seva ya FTP iliyo hatarini ipakue faili kwa seva ya FTP tofauti. Teoria ni rahisi:

  1. Pakia ombi (ndani ya faili ya maandishi) kwenye seva iliyo hatarini. Kumbuka kwamba ikiwa unataka kuzungumza na seva nyingine ya HTTP au FTP unahitaji kubadilisha mistari na 0x0d 0x0a

  2. Tumia REST X kuepuka kutuma herufi ambazo huzitaki kutuma (labda kupakia ombi ndani ya faili ulihitaji kuweka kichwa cha picha mwanzoni)

  3. Tumia PORT kuunganisha kwenye seva na huduma isiyojulikana

  4. Tumia RETR kutuma ombi lililohifadhiwa kwenye seva.

Inawezekana sana kwamba hii itatoa kosa kama Socket not writable kwa sababu uhusiano hautoshelezi kutuma data na RETR. Mapendekezo ya kujaribu kuepuka hilo ni:

  • Ikiwa unatuma ombi la HTTP, weka ombi moja baada ya nyingine hadi ~0.5MB angalau. Kama hivi:

  • Jaribu kujaza ombi na data "taka" inayohusiana na itifaki (ukiwasiliana na FTP labda amri za taka au kurudia maagizo ya RETR kuchukua faili)

  • Tu jaza ombi na herufi za null nyingi au nyingine (zilizogawanywa kwenye mistari au la)

Kwa namna yoyote, hapa kuna mfano wa zamani kuhusu jinsi ya kutumia hii kufanya seva ya FTP ipakue faili kutoka kwa seva ya FTP tofauti.

Udhaifu wa Seva ya Filezilla

FileZilla kawaida inabana kwa lokalini huduma ya utawala kwa FileZilla-Server (bandari 14147). Ikiwa unaweza kuunda tuneli kutoka kwenye mashine yako kufikia bandari hii, unaweza kuunganisha kwayo ukitumia nenosiri tupu na kuunda mtumiaji mwingine kwa huduma ya FTP.

Faili za Mipangilio

ftpusers
ftp.conf
proftpd.conf
vsftpd.conf

Baada ya Kuingia

Mipangilio ya msingi ya vsFTPd inaweza kupatikana katika /etc/vsftpd.conf. Hapa, unaweza kupata mipangilio hatari:

  • anonymous_enable=YES

  • anon_upload_enable=YES

  • anon_mkdir_write_enable=YES

  • anon_root=/home/username/ftp - Daktari kwa wageni.

  • chown_uploads=YES - Badilisha umiliki wa faili zilizopakiwa kwa njia isiyojulikana

  • chown_username=username - Mtumiaji ambaye anapewa umiliki wa faili zilizopakiwa kwa njia isiyojulikana

  • local_enable=YES - Wezesha watumiaji wa ndani kuingia

  • no_anon_password=YES - Usiulize nywila kwa wageni

  • write_enable=YES - Ruhusu amri: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, na SITE

Shodan

  • ftp

  • port:21


Kikundi cha Usalama cha Kujitahidi Kwa Bidii


Amri za Kiotomatiki za HackTricks

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'
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Last updated