* Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Le **File Transfer Protocol (FTP)** est un protocole réseau standard utilisé pour le transfert de fichiers informatiques entre un client et un serveur sur un réseau informatique.\
C'est un protocole **en texte clair** qui utilise comme **caractère de nouvelle ligne `0x0d 0x0a`** donc parfois vous devez **vous connecter en utilisant `telnet`** ou **`nc -C`**.
Dans le **FTP actif**, le **client FTP** initie d'abord la **connexion de contrôle** depuis son port N vers le port de commande du serveur FTP - port 21. Le **client** écoute ensuite sur le port **N+1** et envoie le port N+1 au serveur FTP. Le **serveur FTP** initie ensuite la **connexion de données** depuis son port M vers le port N+1 du client FTP.
Cependant, si le client FTP a un pare-feu qui contrôle les connexions de données entrantes depuis l'extérieur, le FTP actif peut poser problème. Une solution possible est le FTP passif.
Dans le **FTP passif**, le client initie la connexion de contrôle depuis son port N vers le port 21 du serveur FTP. Après cela, le client envoie une commande **passv**. Le serveur envoie alors au client l'un de ses numéros de port M. Et le **client** initie la **connexion de données** depuis son port P vers le port M du serveur FTP.
Ici, vous pouvez trouver une belle liste de mots de passe FTP par défaut : [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
Notez que si une **application web** envoie des données contrôlées par un utilisateur **directement à un serveur FTP**, vous pouvez envoyer des octets doublement encodés en URL `%0d%0a` (en double encodage URL, cela devient `%250d%250a`) et faire en sorte que le **serveur FTP effectue des actions arbitraires**. L'une de ces actions arbitraires possibles est de télécharger du contenu à partir d'un serveur contrôlé par un utilisateur, d'effectuer une analyse de port ou d'essayer de communiquer avec d'autres services basés sur du texte en clair (comme http).
* **`HELP`** Le serveur indique les commandes supportées
* **`PORT 127,0,0,1,0,80`** Cela indiquera au serveur FTP d'établir une connexion avec l'IP 127.0.0.1 sur le port 80 (_vous devez mettre le 5ème caractère en "0" et le 6ème en port décimal ou utiliser le 5ème et le 6ème pour exprimer le port en hexadécimal_).
* **`EPRT |2|127.0.0.1|80|`** Cela indiquera au serveur FTP d'établir une connexion TCP (_indiquée par "2"_) avec l'IP 127.0.0.1 sur le port 80. Cette commande **prend en charge IPv6**.
* **`LIST`** Cela enverra la liste des fichiers dans le dossier courant
* **`LIST -R`** Liste récursivement (si autorisé par le serveur)
* **`APPE /chemin/quelquechose.txt`** Cela indiquera au FTP de stocker les données reçues d'une connexion **passive** ou d'une connexion **PORT/EPRT** dans un fichier. Si le nom de fichier existe, il ajoutera les données.
* **`STOR /chemin/quelquechose.txt`** Comme `APPE` mais il écrasera les fichiers
* **`STOU /chemin/quelquechose.txt`** Comme `APPE`, mais s'il existe, il ne fera rien.
* **`RETR /chemin/vers/fichier`** Une connexion passive ou une connexion de port doit être établie. Ensuite, le serveur FTP enverra le fichier indiqué via cette connexion
* **`REST 6`** Cela indiquera au serveur que la prochaine fois qu'il enverra quelque chose en utilisant `RETR`, il doit commencer au 6ème octet.
* **`TYPE i`** Définir le transfert en binaire
* **`PASV`** Cela ouvrira une connexion passive et indiquera à l'utilisateur où il peut se connecter
* **`PUT /tmp/fichier.txt`** Télécharger le fichier indiqué sur le FTP
Certains serveurs FTP autorisent la commande PORT. Cette commande peut être utilisée pour indiquer au serveur que vous souhaitez vous connecter à un autre serveur FTP sur un certain port. Ensuite, vous pouvez utiliser cela pour scanner les ports d'un hôte via un serveur FTP.
Vous pourriez également abuser de ce comportement pour faire interagir un serveur FTP avec d'autres protocoles. Vous pourriez **télécharger un fichier contenant une requête HTTP** et faire en sorte que le serveur FTP vulnérable **l'envoie à un serveur HTTP arbitraire** (_peut-être pour ajouter un nouvel utilisateur admin?_) ou même télécharger une requête FTP et faire en sorte que le serveur FTP vulnérable télécharge un fichier pour un autre serveur FTP.\
1.**Téléchargez la requête (à l'intérieur d'un fichier texte) sur le serveur vulnérable.** N'oubliez pas que si vous voulez parler à un autre serveur HTTP ou FTP, vous devez changer les lignes avec `0x0d 0x0a`
2.**Utilisez `REST X` pour éviter d'envoyer les caractères que vous ne voulez pas envoyer** (peut-être pour télécharger la requête à l'intérieur du fichier, vous avez besoin de mettre un en-tête d'image au début)
3.**Utilisez `PORT` pour vous connecter au serveur et au service arbitraires**
4.**Utilisez `RETR` pour envoyer la requête enregistrée au serveur.**
Il est très probable que cela **lance une erreur comme**_**Socket not writable**_**parce que la connexion ne dure pas assez longtemps pour envoyer les données avec `RETR`**. Les suggestions pour essayer d'éviter cela sont:
* Essayez de **remplir la requête avec des données "junk" relatives au protocole** (en parlant à FTP peut-être juste des commandes junk ou en répétant l'instruction `RETR` pour obtenir le fichier)
* Remplissez simplement la requête avec beaucoup de caractères nuls ou autres (divisés en lignes ou non)
Quoi qu'il en soit, voici un [ancien exemple sur la façon d'abuser de cela pour faire télécharger un fichier à un serveur FTP à partir d'un autre serveur FTP.](ftp-bounce-download-2oftp-file.md)
**FileZilla** se **lie généralement** à un **service administratif local** pour le **serveur FileZilla** (port 14147). Si vous pouvez créer un **tunnel** depuis **votre machine** pour accéder à ce port, vous pouvez **vous connecter** en utilisant un **mot de passe vide** et **créer** un **nouvel utilisateur** pour le service FTP.
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.