15 KiB
21 - Pentesting FTP
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
- Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks beworben sehen? Oder möchten Sie Zugriff auf die neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen? Überprüfen Sie die ABONNEMENTPLÄNE!
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie mir auf Twitter 🐦@carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das HackTricks-Repo und das HackTricks-Cloud-Repo einreichen.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Grundlegende Informationen
Das File Transfer Protocol (FTP) dient als Standardprotokoll für den Dateitransfer in einem Computernetzwerk zwischen einem Server und einem Client.
Es handelt sich um ein Klartextprotokoll, das als Zeilenumbruchszeichen 0x0d 0x0a
verwendet, daher müssen Sie manchmal eine Verbindung mit telnet
oder nc -C
herstellen.
Standardport: 21
PORT STATE SERVICE
21/tcp open ftp
Aktive und Passive Verbindungen
Bei Aktivem FTP initiiert der FTP Client zuerst die Steuerungsverbindung von seinem Port N zum Befehlsport des FTP-Servers - Port 21. Der Client hört dann auf Port N+1 und sendet Port N+1 an den FTP-Server. Der FTP Server initiiert dann die Datenverbindung von seinem Port M zum Port N+1 des FTP-Clients.
Wenn jedoch der FTP-Client eine Firewall eingerichtet hat, die die eingehenden Datenverbindungen von außen steuert, kann aktives FTP ein Problem darstellen. Eine mögliche Lösung dafür ist passives FTP.
Bei Passivem FTP initiiert der Client die Steuerungsverbindung von seinem Port N zum Port 21 des FTP-Servers. Danach gibt der Client einen passv Befehl aus. Der Server sendet dann dem Client eine seiner Portnummern M. Der Client initiiert dann die Datenverbindung von seinem Port P zum Port M des FTP-Servers.
Quelle: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Verbindungsfehlerbehebung
Die FTP-Befehle debug
und trace
können verwendet werden, um zu sehen, wie die Kommunikation stattfindet.
Enumeration
Bannererkennung
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
Verbindung zu FTP mit StartTLS herstellen
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
Mit nmap
sudo nmap -sV -p21 -sC -A 10.10.10.10
Sie können die Befehle HELP
und FEAT
verwenden, um Informationen über den FTP-Server zu erhalten:
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...)
Anonyme Anmeldung
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
Hier finden Sie eine schöne Liste mit Standard-FTP-Anmeldeinformationen: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automatisiert
Anonyme Anmeldung und Bounce-FTP-Checks werden standardmäßig von nmap mit der Option -sC oder durchgeführt:
nmap --script ftp-* -p 21 <ip>
Browser-Verbindung
Sie können sich mit einem FTP-Server über einen Browser (wie Firefox) verbinden, indem Sie eine URL wie folgt verwenden:
ftp://anonymous:anonymous@10.10.10.98
Hinweis: Wenn eine Webanwendung Daten, die von einem Benutzer kontrolliert werden, direkt an einen FTP-Server sendet, können Sie doppeltes URL-Encoding %0d%0a
senden (im doppelten URL-Encoding %250d%250a
) Bytes und den FTP-Server beliebige Aktionen ausführen lassen. Eine mögliche willkürliche Aktion besteht darin, Inhalte von einem vom Benutzer kontrollierten Server herunterzuladen, Portscans durchzuführen oder zu versuchen, mit anderen textbasierten Diensten (wie http) zu kommunizieren.
Alle Dateien vom FTP herunterladen
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
Wenn Ihr Benutzername/Passwort Sonderzeichen enthält, kann der folgende Befehl verwendet werden:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Einige FTP-Befehle
USER Benutzername
PASS Passwort
HELP
Der Server zeigt an, welche Befehle unterstützt werden- **
PORT 127,0,0,1,0,80
**Dies gibt dem FTP-Server an, eine Verbindung mit der IP 127.0.0.1 auf Port 80 herzustellen (Sie müssen das 5. Zeichen als "0" und das 6. als Port in Dezimal setzen oder das 5. und 6. verwenden, um den Port in Hexadezimal auszudrücken). - **
EPRT |2|127.0.0.1|80|
**Dies gibt dem FTP-Server an, eine TCP-Verbindung (angezeigt durch "2") mit der IP 127.0.0.1 auf Port 80 herzustellen. Dieser Befehl unterstützt IPv6. LIST
Dies sendet die Liste der Dateien im aktuellen OrdnerLIST -R
Rekursives Auflisten (falls vom Server erlaubt)APPE /Pfad/etwas.txt
Dies gibt dem FTP an, die empfangenen Daten aus einer passiven Verbindung oder aus einer PORT/EPRT-Verbindung in einer Datei zu speichern. Wenn der Dateiname existiert, werden die Daten angehängt.STOR /Pfad/etwas.txt
WieAPPE
, aber es überschreibt die DateienSTOU /Pfad/etwas.txt
WieAPPE
, aber wenn die Datei existiert, passiert nichts.RETR /Pfad/zur/Datei
Eine passive oder eine Port-Verbindung muss hergestellt werden. Dann sendet der FTP-Server die angegebene Datei über diese VerbindungREST 6
Dies gibt dem Server an, dass er beim nächsten Senden von etwas mitRETR
ab dem 6. Byte beginnen soll.TYPE i
Setzt den Transfer auf binärPASV
Dies öffnet eine passive Verbindung und zeigt dem Benutzer an, wo er sich verbinden kannPUT /tmp/datei.txt
Lädt die angegebene Datei auf den FTP-Server hoch
FTPBounce-Angriff
Einige FTP-Server erlauben den Befehl PORT. Dieser Befehl kann verwendet werden, um dem Server anzuzeigen, dass Sie eine Verbindung zu einem anderen FTP-Server an einem bestimmten Port herstellen möchten. Dann können Sie dies verwenden, um zu scannen, welche Ports eines Hosts über einen FTP-Server geöffnet sind.
Erfahren Sie hier, wie Sie einen FTP-Server missbrauchen können, um Ports zu scannen.
Sie könnten dieses Verhalten auch missbrauchen, um einen FTP-Server mit anderen Protokollen interagieren zu lassen. Sie könnten eine Datei hochladen, die eine HTTP-Anfrage enthält und den verwundbaren FTP-Server diese an einen beliebigen HTTP-Server senden lassen (vielleicht um einen neuen Admin-Benutzer hinzuzufügen?) oder sogar eine FTP-Anfrage hochladen und den verwundbaren FTP-Server eine Datei für einen anderen FTP-Server herunterladen lassen.
Die Theorie ist einfach:
- Laden Sie die Anfrage (in einer Textdatei) auf den verwundbaren Server hoch. Denken Sie daran, dass Sie, wenn Sie mit einem anderen HTTP- oder FTP-Server sprechen möchten, Zeilen mit
0x0d 0x0a
ändern müssen. - Verwenden Sie
REST X
, um das Senden der Zeichen zu vermeiden, die Sie nicht senden möchten (vielleicht mussten Sie beim Hochladen der Anfrage in die Datei einen Bildheader am Anfang platzieren) - Verwenden Sie
PORT
, um eine Verbindung zum beliebigen Server und Dienst herzustellen - Verwenden Sie
RETR
, um die gespeicherte Anfrage an den Server zu senden.
Es ist sehr wahrscheinlich, dass dies einen Fehler wie Socket nicht beschreibbar auslöst, weil die Verbindung nicht lange genug besteht, um die Daten mit RETR
zu senden. Vorschläge, um dies zu vermeiden, sind:
- Wenn Sie eine HTTP-Anfrage senden, senden Sie dieselbe Anfrage hintereinander, bis mindestens ~0,5 MB erreicht sind. So:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- Versuchen Sie, die Anfrage mit "Junk"-Daten relativ zum Protokoll zu füllen (beim Sprechen mit FTP vielleicht nur Junk-Befehle oder das Wiederholen der
RETR
-Anweisung, um die Datei zu erhalten) - Füllen Sie die Anfrage einfach mit vielen Nullzeichen oder anderen Zeichen (aufgeteilt in Zeilen oder nicht)
Wie auch immer, hier haben Sie ein altes Beispiel, wie Sie dies missbrauchen können, um einen FTP-Server dazu zu bringen, eine Datei von einem anderen FTP-Server herunterzuladen.
Filezilla Server Schwachstelle
FileZilla bindet normalerweise an einen lokalen administrativen Dienst für den FileZilla-Server (Port 14147). Wenn Sie einen Tunnel von Ihrer Maschine erstellen können, um auf diesen Port zuzugreifen, können Sie sich mit einem leeren Passwort verbinden und einen neuen Benutzer für den FTP-Dienst erstellen.
Konfigurationsdateien
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
Post-Exploitation
Die Standardkonfiguration von vsFTPd befindet sich in /etc/vsftpd.conf
. Hier finden Sie einige gefährliche Einstellungen:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- Verzeichnis für anonyme Benutzer.chown_uploads=YES
- Ändern des Besitzes von anonym hochgeladenen Dateienchown_username=username
- Benutzer, dem der Besitz von anonym hochgeladenen Dateien übertragen wirdlocal_enable=YES
- Lokalen Benutzern das Anmelden ermöglichenno_anon_password=YES
- Kein Passwort von anonymen Benutzern verlangenwrite_enable=YES
- Erlauben von Befehlen: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE und SITE
Shodan
ftp
port:21
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
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'
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
- Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks beworben sehen? oder möchten Sie Zugriff auf die neueste Version des PEASS oder HackTricks als PDF herunterladen? Überprüfen Sie die ABONNEMENTPLÄNE!
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie mir auf Twitter 🐦@carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das hacktricks-Repository und das hacktricks-cloud-Repository senden.