Maison Tutoriel système Linux Transfert de port SFTP: activer la fonctionnalité supprimée

Transfert de port SFTP: activer la fonctionnalité supprimée

Mar 17, 2025 am 09:43 AM

Transfert de port SFTP: activer la fonctionnalité supprimée

introduction

Le protocole SSH prend en charge trois grandes catégories d'activités de serveur distantes: a) l'exécution de la commande (y compris le shell de connexion), b) le transfert et le fonctionnement du réseau, et c) le transfert de fichiers.

Les responsables OpenSSH ont déterminé que SFTP et SCP n'ont aucun objectif juridique pour le transfert de port (via les options -l et -r). Pendant le transfert de fichiers à l'aide de ces utilitaires, un drapeau qui désactive explicitement ces fonctionnalités est transmis inconditionnellement à l'exécutable de l'enfant SSH.

Certains utilisateurs peuvent en effet avoir besoin de ces fonctionnalités. Un sous-ensemble évident est les testeurs de pénétration dont la tâche consiste à vérifier que cette fonctionnalité est explicitement désactivée sur un serveur SFTP public.

Voici deux techniques pour activer ces fonctionnalités supprimées en modifiant la chaîne du binaire SFTP elle-même, ou en redirigeant à travers un shell qui peut facilement modifier la ligne de commande. Selon les fonctionnalités de la plate-forme, l'une ou l'autre technologie peut être nécessaire pour atteindre cet objectif.

Supprimer les détails

Premièrement, il est important de trouver le processus d'intérêt en cours d'exécution. La fonction de shell ci-dessous affichera le PID qui correspond au motif de shell (notez que ce n'est pas une expression régulière). Cela s'exécute sous Debian Dash (et la plupart des autres coquilles courantes) et s'appuie sur l'option PS de BSD:

 <code>pps () { local a= b= c= IFS=$'\r'; ps ax | while read -ra do [ "$b" ] || c=1; for b; do case "$a" in *"$b"*) c=1;; esac; done; [ "$c" ] && printf '%s\n' "$a" && c=; done; }</code>
Copier après la connexion

Démarrez une session SFTP traditionnelle pour vérifier les processus qui y sont associés:

 <code>$ id uid=1001(aturing) gid=1001(aturing) groups=1001(aturing)... $ sftp aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Copier après la connexion

Nous supposons que l'utilisateur UNIX local ci-dessus a le même compte d'utilisateur sur le serveur SFTP distant.

Une fois la session exécutée, une recherche de processus locale pour le nom d'utilisateur affichera le processus SSH de l'enfant généré par SFTP:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9666 pts/0 S 0:00 sftp aturing@sftp.victimandum.com 9667 pts/0 S 0:00 /usr/bin/ssh -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
Copier après la connexion

Le paramètre ClearallForwardings Oui supprimera toute tentative de transfert sans prendre aucune mesure pour la casser.

Les drapeaux de transfert de port -l et -r n'existent pas comme options valides pour la ligne de commande SFTP, mais nous pouvons utiliser l'option -s pour les déclencher explicitement pour spécifier un gestionnaire SSH personnalisé, dans ce cas le serveur de messagerie:

 <code>$ cat portssh #!/bin/sh exec ssh -L2525:smtp.victimandum.com:25 "$@"</code>
Copier après la connexion

Si la suppression de transfert n'est pas en place, cet appel SFTP est suffisant pour établir une connexion de transfert:

 <code>$ sftp -S ./portssh -oClearAllForwardings\ no aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Copier après la connexion

Vous pouvez maintenant voir des tentatives de transfert dans le processus SSH de l'enfant:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9897 pts/0 S 0:00 sftp -S ./portssh -oClearAllForwardings no aturing@sftp.victimandum.com 9898 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -o ClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
Copier après la connexion

Cependant, tenter de contacter le serveur de messagerie distant via le port de transfert local est infructueux en raison d'une remplacement explicite:

 <code>$ nc localhost 2525 $</code>
Copier après la connexion

Cette suppression inconditionnelle est visible dans le code source:

 <code>$ sed -n /X11/,/Forwardings/p openssh-8.7p1/sftp.c addargs(&args, "-oForwardX11 no"); addargs(&args, "-oPermitLocalCommand no"); addargs(&args, "-oClearAllForwardings yes");</code>
Copier après la connexion

Ces chaînes statiques sont également visibles dans les fichiers binaires compilés:

 <code>$ strings /usr/bin/sftp | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -oPort %d</code>
Copier après la connexion

Enfin, la documentation indique clairement que cette suppression est intentionnelle et donne des raisons raisonnables:

 <code>$ man ssh_config | sed -n /ClearAllForwardings/,/default/p ClearAllForwardings Specifies that all local, remote, and dynamic port forwardings specified in the configuration files or on the command line be cleared. This option is primarily useful when used from the ssh(1) command line to clear port forwardings set in configura‐ tion files, and is automatically set by scp(1) and sftp(1). The argument must be yes or no (the default).</code>
Copier après la connexion

Modifier les chaînes compilées

Pour ceux qui souhaitent désactiver la configuration de oui par défaut ClearallForwardings, une option consiste à utiliser SED pour modifier directement les chaînes dans le binaire SFTP (en supposant que le SED de la plate-forme est en satelière binaire):

 <code>$ sed 's/AllForwardings yes/AllForwardings no /' sftp.noclearforward</code>
Copier après la connexion

Cette modification directe est beaucoup plus facile que la compilation de nouveaux fichiers binaires.

Nous pouvons confirmer que la chaîne a été modifiée avec succès:

 <code>$ strings ./sftp.noclearforward | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -oPort %d</code>
Copier après la connexion

Bien que le contenu et la somme de contrôle du SFTP modifié soient différents, tout Linux BuildID SHA1 existant restera le même (mais ne soumettez pas les billets d'assistance lors de l'utilisation de SFTP modifiée):

 <code>$ file /usr/bin/sftp ./sftp.noclearforward /usr/bin/sftp: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped ./sftp.noclearforward: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped $ sha1sum /usr/bin/sftp ./sftp.noclearforward d8bdaf0b4642b9c324f9c2e0aeee2d9578fbe383 /usr/bin/sftp b12dda8ecfd7bd2847919b5531aea7c03364c123 ./sftp.noclearforward $ sha256sum /usr/bin/sftp ./sftp.noclearforward 986eecdfc654c9b3ff3fd0dce59690d47cf56be96a4b98a04a3682aef95d3f52 /usr/bin/sftp c8f99ce33fc129250c11dc6dbb8a01112e01124e470a92d0acefb955fd17d670 ./sftp.noclearforward</code>
Copier après la connexion

Vous pouvez appeler le binaire SFTP modifié pour activer le transfert de port:

 <code>$ chmod 755 sftp.noclearforward $ ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Copier après la connexion

Vous pouvez maintenant voir les paramètres modifiés dans le processus de l'enfant:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9991 pts/0 S 0:00 ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com 9992 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
Copier après la connexion

Cette fonction est activée et exécutée sur un serveur distant et peut vérifier les connexions dans un shell séparé:

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>
Copier après la connexion
Copier après la connexion

Lorsque le transfert est désactivé sur le serveur, le client recevra une notification indiquant cet état lorsque la connexion tentera:

 <code>channel 3: open failed: administratively prohibited: open failed</code>
Copier après la connexion

L'administrateur SFTP a attribué un compte non fiable devrait être susceptible de vérifier que la configuration du serveur désactive explicitement le transfert et l'exécution des commandes.

Au-delà de la coque POSIX

Bien que les normes DASH et POSIX fournissent un ensemble - afin de réinitialiser les paramètres de ligne de commande, des fonctionnalités plus avancées sont fournies dans Bash et KSH93:

 <code>$ cat ynargs #!/bin/bash echo "${@//yes/no}"</code>
Copier après la connexion

Le test rapide confirme l'édition réussie:

 <code>$ ./ynargs -oForwardX11 no -oPermitLocalCommand yes -oClearAllForwardings yes -oForwardAgent no -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no</code>
Copier après la connexion

Notez que le $ ci-dessus {@ // ... / ...} n'est pas un POSIX valide et ne peut pas fonctionner dans Dash ou aucun shell (MKSH, OKSH) dérivé de PDKSH. De nombreuses plates-formes ne regroupent pas les coquilles avec cette fonctionnalité (comme Android et OpenBSD, bien qu'il existe des moyens de les ajouter);

Pour profiter de cette fonctionnalité avec un shell puissant, nous créons un répertoire, puis nous créons un wrapper SSH pour effacer les paramètres de problème:

 <code>$ cat ~/switcharoo/ssh #!/bin/bash exec /usr/bin/ssh "${@//yes/no}"</code>
Copier après la connexion

Réglez ensuite le répertoire avant System SSH dans $ PATH:

 <code>$ export PATH=~/switcharoo:$PATH $ which ssh ~/switcharoo/ssh</code>
Copier après la connexion

Ensuite, nous appelons le système SFTP dans cet environnement modifié:

 <code>$ /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Copier après la connexion

Nous avons observé que le shell réinitialise les paramètres du problème:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 10058 pts/0 S 0:00 /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com 10059 pts/0 S 0:00 /usr/bin/ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>
Copier après la connexion

Reconfirmé la connexion locale au port de transfert:

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>
Copier après la connexion
Copier après la connexion

En tant que démonstration finale, un échange SMTP complet peut être effectué en utilisant le script suivant:

 <code>$ cat awkmail #!/bin/gawk -f BEGIN { smtp="/inet/tcp/0/localhost/2525"; ORS="\r\n"; r=ARGV[1]; s=ARGV[2]; sbj=ARGV[3]; # /bin/awkmail to from subj 0) print |& smtp print "." |& smtp; smtp |& getline j; print j print "quit" |& smtp; smtp |& getline j; print j close(smtp) } # /inet/protocol/local-port/remote-host/remote-port</code>
Copier après la connexion

Nous pouvons utiliser ce script pour envoyer notre propre courrier à un destinataire distant auquel le serveur SMTP cible peut accéder:

 <code>$ ./awkmail jatanasoff@victimandum.com aturning@localhost awkmail Queued mail for delivery</code>
Copier après la connexion

Dans des environnements hautement contrôlés, la présence de ces fonctions n'est pas optimale.

Restrictions de serveur

Il est compréhensible que les administrateurs SFTP ne souhaitent pas permettre à leurs utilisateurs de créer des connexions TCP arbitraires à l'aide du serveur, ce qui peut mettre en danger les réseaux sensibles. Limiter cette activité est un cadre de sécurité prudent.

Une configuration restrictive commune consiste à ajouter des utilisateurs de SFTP non fiables à un groupe, puis à contraindre l'activité de ce groupe dans SSHD_Config:

 <code>Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no</code>
Copier après la connexion

Cette configuration recommandée est généralement suffisante pour empêcher toutes les tentatives de transfert.

Il est recommandé d'ajouter une désactivation.

 <code>$ man sshd_config | sed -n /DisableForwarding/,/configurations/p DisableForwarding Disables all forwarding features, including X11, ssh-agent(1), TCP and StreamLocal. This option overrides all other forwarding- related options and may simplify restricted configurations.</code>
Copier après la connexion

Ceci est laissé à l'administrateur pour la pratique.

en conclusion

Les paramètres du client SFTP trop stricts peuvent conduire à un certain degré de cécité de gestion des serveurs. Les restrictions du client SFTP sont facilement contournées par une variété de méthodes.

Pour les administrateurs du serveur SFTP, il est important de savoir où ils sont restreints et où ils sont restreints et ne comptent pas sur les clients pour protéger le serveur contre le contrôle arbitraire du TCP. Le client est contrôlé par l'utilisateur, et si la configuration est erronée, il est difficile d'implémenter les commandes TCP sur le serveur. Tout test doit être effectué sans transmission approfondie dans l'utilisateur SSH_Config, faites attention aux avertissements dans le document.

Bien que cette fonctionnalité puisse avoir un objectif juridique imaginable, les abus seront rares.

Ces problèmes ne sont pas nouveaux, car les variantes de Site Exec sont présentes dans FTP en texte clair depuis des décennies. SFTP n'est pas une alternative simple au transfert de fichiers en texte clair, il dispose également de nombreuses fonctionnalités faciles à utiliser.

Espérons que les administrateurs pourront utiliser ces méthodes pour vérifier la sécurité de leurs serveurs afin de ne pas être pris au dépourvu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

À quoi sert le mieux le Linux? À quoi sert le mieux le Linux? Apr 03, 2025 am 12:11 AM

Linux est mieux utilisé comme gestion de serveurs, systèmes intégrés et environnements de bureau. 1) Dans la gestion des serveurs, Linux est utilisé pour héberger des sites Web, des bases de données et des applications, assurant la stabilité et la fiabilité. 2) Dans les systèmes intégrés, Linux est largement utilisé dans les systèmes électroniques intelligents et automobiles en raison de sa flexibilité et de sa stabilité. 3) Dans l'environnement de bureau, Linux fournit des applications riches et des performances efficaces.

Quels sont les 5 composants de base de Linux? Quels sont les 5 composants de base de Linux? Apr 06, 2025 am 12:05 AM

Les cinq composants de base de Linux sont: 1. Le noyau, gérant les ressources matérielles; 2. La bibliothèque système, fournissant des fonctions et des services; 3. Shell, l'interface pour les utilisateurs pour interagir avec le système; 4. Le système de fichiers, stockant et organisant des données; 5. Applications, en utilisant des ressources système pour implémenter les fonctions.

Qu'est-ce que l'administration Linux de base? Qu'est-ce que l'administration Linux de base? Apr 02, 2025 pm 02:09 PM

Linux System Management assure la stabilité, l'efficacité et la sécurité du système grâce à la configuration, à la surveillance et à la maintenance. 1. Commandes de shell maître telles que TOP et SystemCTL. 2. Utilisez APT ou YUM pour gérer le progiciel. 3. Écrivez des scripts automatisés pour améliorer l'efficacité. 4. Erreurs de débogage communs telles que les problèmes d'autorisation. 5. Optimiser les performances grâce à des outils de surveillance.

Comment apprendre les bases de Linux? Comment apprendre les bases de Linux? Apr 10, 2025 am 09:32 AM

Les méthodes d'apprentissage Linux de base à partir de zéro incluent: 1. Comprendre le système de fichiers et l'interface de ligne de commande, 2. Master Basic Commandes telles que LS, CD, MKDIR, 3. Apprenez les opérations de fichiers, telles que la création et l'édition de fichiers, 4. Explorer une utilisation avancée telle que les pipelines et les commandes GREP, 5. Master Debugging Skills and Performance Optimimisation, 6. Amélioration continue des compétences par la pratique et l'exploration.

Quelle est la plus utilisée de Linux? Quelle est la plus utilisée de Linux? Apr 09, 2025 am 12:02 AM

Linux est largement utilisé dans les serveurs, les systèmes intégrés et les environnements de bureau. 1) Dans le domaine du serveur, Linux est devenu un choix idéal pour héberger des sites Web, des bases de données et des applications en raison de sa stabilité et de sa sécurité. 2) Dans les systèmes intégrés, Linux est populaire pour sa personnalisation et son efficacité élevées. 3) Dans l'environnement de bureau, Linux fournit une variété d'environnements de bureau pour répondre aux besoins des différents utilisateurs.

Qu'est-ce qu'un appareil Linux? Qu'est-ce qu'un appareil Linux? Apr 05, 2025 am 12:04 AM

Les périphériques Linux sont des périphériques matériels exécutant des systèmes d'exploitation Linux, y compris des serveurs, des ordinateurs personnels, des smartphones et des systèmes embarqués. Ils profitent de la puissance de Linux pour effectuer diverses tâches telles que l'hébergement de sites Web et l'analyse des mégadonnées.

Quels sont les inconvénients de Linux? Quels sont les inconvénients de Linux? Apr 08, 2025 am 12:01 AM

Les inconvénients de Linux incluent l'expérience utilisateur, la compatibilité des logiciels, la prise en charge matérielle et la courbe d'apprentissage. 1. L'expérience utilisateur n'est pas aussi conviviale que Windows ou MacOS, et elle s'appuie sur l'interface de ligne de commande. 2. La compatibilité logicielle n'est pas aussi bonne que les autres systèmes et manque de versions natives de nombreux logiciels commerciaux. 3. La prise en charge matérielle n'est pas aussi complète que Windows, et les pilotes peuvent être compilés manuellement. 4. La courbe d'apprentissage est raide et la maîtrise des opérations de ligne de commande nécessite du temps et de la patience.

Internet fonctionne-t-il sur Linux? Internet fonctionne-t-il sur Linux? Apr 14, 2025 am 12:03 AM

Internet ne s'appuie pas sur un seul système d'exploitation, mais Linux joue un rôle important. Linux est largement utilisé dans les serveurs et les appareils réseau et est populaire pour sa stabilité, sa sécurité et son évolutivité.

See all articles