hacktricks/network-services-pentesting/pentesting-ftp
2024-04-07 03:36:12 +00:00
..
ftp-bounce-attack.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 03:36:12 +00:00
ftp-bounce-download-2oftp-file.md Translated to Swahili 2024-02-11 02:13:58 +00:00
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 03:36:12 +00:00

21 - Pentesting FTP

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

Kikundi cha Usalama cha Kujitahidi

{% embed url="https://discord.gg/tryhardsecurity" %}


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 ya 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 udhibiti 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 udhibiti 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/

Kutatua Mipangilio ya 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

Uchambuzi wa Kibali

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 Kutumia Jina la 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

Kujaribu nguvu

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

Anon login na bounce FTP checks 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 kiholela. Moja ya vitendo vya kiholela 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 kwa 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 lako 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 zinazoungwa mkono
  • **PORT 127,0,0,1,0,80**Hii itaonyesha seva ya FTP kuanzisha uhusiano na IP 127.0.0.1 kwenye bandari 80 (unahitaji kuweka herufi ya 5 kama "0" na ya 6 kama bandari kwa decimal au tumia ya 5 na 6 kueleza bandari kwa hex).
  • **EPRT |2|127.0.0.1|80|**Hii itaonyesha seva ya FTP kuanzisha uhusiano wa TCP (unaoonyeshwa na "2") na IP 127.0.0.1 kwenye bandari 80. Amri hii inaunga mkono 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 pasifiki 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 pasifiki au wa port lazima uanzishwe. Kisha, seva ya FTP itatuma faili iliyotajwa kupitia uhusiano huo
  • REST 6 Hii itaonyesha seva kwamba wakati inatuma kitu kutumia RETR ianze kwenye byte ya 6.
  • TYPE i Weka uhamishaji kuwa wa binary
  • PASV Hii itafungua uhusiano wa pasifiki na itaonyesha mtumiaji anaweza kuunganisha wapi
  • 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 vibaya seva ya FTP kuscan bandari.

Unaweza pia kutumia tabia hii kufanya seva ya FTP iingiliane na itrotokole zingine. Unaweza kupakia faili inayohusisha ombi la HTTP na kufanya seva ya FTP inayoweza kudhurika ikutume kwenye seva ya HTTP isiyojulikana (labda kuongeza mtumiaji mpya wa msimamizi?) au hata kupakia ombi la FTP na kufanya seva ya FTP inayoweza kudhurika ipakue faili kwa seva ya FTP tofauti.
Teoria ni rahisi:

  1. Pakia ombi (ndani ya faili ya maandishi) kwenye seva inayoweza kudhurika. 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 unahitaji 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 isiyoweza kuandikwa kwa sababu uhusiano hautoshi 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:

{% file src="../../.gitbook/assets/posts.txt" %} posts.txt {% endfile %}

  • Jaribu kujaza ombi na data "taka" inayohusiana na itrotokoli (ukiwasiliana na FTP labda amri za taka au kurudia maagizo ya RETR kuchukua faili)
  • Tu jaza ombi na herufi za null au nyingine nyingi (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 Seva ya FileZilla (bandari 14147). Ikiwa unaweza kuunda tuneli kutoka kwenye mashine yako kufikia bandari hii, unaweza kuunganisha kwayo kwa kutumia 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 siri
  • chown_username=username - Mtumiaji ambaye anapewa umiliki wa faili zilizopakiwa kwa siri
  • 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

{% embed url="https://discord.gg/tryhardsecurity" %}


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