Transfert de port SFTP: activer la fonctionnalité supprimée
Mar 17, 2025 am 09:43 AMintroduction
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 tache 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Réglez ensuite le répertoire avant System SSH dans $ PATH:
<code>$ export PATH=~/switcharoo:$PATH $ which ssh ~/switcharoo/ssh</code>
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>
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>
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>
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>
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>
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>
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>
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Lorsque vous rencontrez des problèmes DNS, vérifiez d'abord le fichier /etc/resolv.conf pour voir si le serveur de nom correct est configuré; Deuxièmement, vous pouvez ajouter manuellement le DNS public tel que 8,8.8.8 pour les tests; Utilisez ensuite les commandes NSlookup et Dig pour vérifier si la résolution DNS est normale. Si ces outils ne sont pas installés, vous pouvez d'abord installer le package DnsUtils ou Bind-Utils; Vérifiez ensuite l'état du service et le fichier de configuration résolus SystemD /etc/systemd/resolved.conf, et définissez DNS et FallbackDNS au besoin et redémarrez le service; Enfin, vérifiez l'état de l'interface réseau et les règles du pare-feu, confirmez que le port 53 n'est pas

Si vous constatez que le serveur s'exécute lentement ou que l'utilisation de la mémoire est trop élevée, vous devez vérifier la cause avant de fonctionner. Tout d'abord, vous devez vérifier l'utilisation des ressources système, utiliser les commandes TOP, HTOP, Free-H, IOSTAT, SS-ANTP et d'autres commandes pour vérifier les connexions CPU, mémoire, E / S de disque et réseau; Deuxièmement, analysez des problèmes de processus spécifiques et suivez le comportement des processus à haute occupation via des outils tels que PS, JSTACK, Strace; puis vérifier les journaux et surveiller les données, afficher les enregistrements OOM, les demandes d'exception, les requêtes lentes et autres indices; Enfin, le traitement ciblé est effectué en fonction de raisons courantes telles que les fuites de mémoire, l'épuisement des pools de connexion, les tempêtes de défaillance du cache et les conflits de taches de synchronisation, optimiser la logique du code, configurer un mécanisme de réessayer du délai de temps, ajouter des fusibles de limite actuelle et les ressources de mesure et d'évaluation régulièrement de la pression et d'évaluation.

En tant qu'administrateur système, vous pouvez vous retrouver (aujourd'hui ou à l'avenir) dans un environnement où Windows et Linux coexistent. Ce n'est un secret pour personne que certaines grandes entreprises préfèrent (ou doivent) gérer certains de leurs services de production dans Windows Boxes et

Dans Linux Systems, 1. Utilisez la commande IPA ou HostName-I pour afficher la propriété intellectuelle privée; 2. Utilisez curlifconfig.me ou curlipinfo.io/ip pour obtenir une adresse IP publique; 3. La version de bureau peut afficher IP privé via les paramètres système, et le navigateur peut accéder à des sites Web spécifiques pour afficher la propriété IP publique; 4. Les commandes communes peuvent être définies sous forme d'alias pour un appel rapide. Ces méthodes sont simples et pratiques, adaptées aux besoins de visualisation IP dans différents scénarios.

Construit sur le moteur V8 de Chrome, Node.js est un environnement d'exécution JavaScript open source et axé sur les événements con?u pour la construction d'applications évolutives et les API backend. NodeJS est connu pour être léger et efficace en raison de son modèle d'E / S non bloquant et

LinuxCanrunonModesthardwarewithSpecificminimumRequirements.A1GHZProcessor (x86orx86_64) est ensemble, avec-corecpureComend.r.R AmshouldBeatleast512MBForCommand-lineUseor2gbfordesktopenvironments.

Dans cet article, nous apprendrons à installer, à mettre à jour, à supprimer, à trouver des packages, à gérer les packages et les référentiels sur les systèmes Linux à l'aide de l'outil YUM (Yellowdog Updater Modified) développé par Redhat. Les exemples de commandes montrées dans cet article sont pratiques

écrit en C, MySQL est une source ouverte, multiplateforme, et l'un des systèmes de gestion de base de données relationnels les plus utilisés (RDMS). Il fait partie intégrante de la pile de lampes et est un système de gestion de base de données populaire dans l'hébergement Web, l'analyse des données,
