Heim >System-Tutorial >LINUX >SFTP -Portweiterleitung: Ermöglichung unterdrückter Funktionen
Einführung
Das SSH -Protokoll unterstützt drei Hauptkategorien von Remote -Server -Aktivitäten: a) Befehlsausführung (einschließlich Anmeldeschale), b) Netzwerkweiterleitung und -betrieb sowie c) Dateiübertragung.
OpenSSH -Betreuer haben festgestellt, dass SFTP und SCP keinen rechtlichen Zweck für die Hafenweiterleitung haben (über die Optionen -l und -r). Während der Dateiübertragung unter Verwendung dieser Dienstprogramme wird ein Flag, das diese Funktionen explizit deaktiviert, bedingungslos an die ausführbare SSH -SSH -Datei übergeben.
Einige Benutzer benötigen diese Funktionen möglicherweise. Eine offensichtliche Teilmenge sind die Penetrationstester, deren Aufgabe es ist, zu überprüfen, ob diese Funktion auf einem öffentlichen SFTP -Server explizit deaktiviert ist.
Hier sind zwei Techniken, die diese unterdrückten Merkmale ermöglichen, indem die Zeichenfolge der SFTP -Binärdatei selbst geändert oder durch eine Shell umgeleitet wird, die die Befehlszeile problemlos bearbeiten kann. Abhängig von der Funktionalität der Plattform ist möglicherweise die Technologie erforderlich, um dieses Ziel zu erreichen.
Details unterdrücken
Erstens ist es wichtig, den laufenden Prozess des Interesses zu finden. In der unten stehenden Shell -Funktion werden die PID angezeigt, die dem Shell -Muster entspricht (Beachten Sie, dass dies kein regulärer Ausdruck ist). Dies läuft unter Debian Dash (und den meisten anderen gemeinsamen Schalen) und basiert auf der PS -Option von 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>
Starten Sie eine traditionelle SFTP -Sitzung, um die damit verbundenen Prozesse zu überprüfen:
<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>
Wir gehen davon aus, dass der lokale UNIX -Benutzer oben das gleiche Benutzername -Konto auf dem Remote SFTP -Server hat.
Nachdem die Sitzung ausgeführt wurde, zeigt eine lokale Prozess Suche nach dem Benutzernamen den von SFTP generierten untergeordneten SSH -Prozess an:
<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>
Mit dem Parameter ClearallForwardings Yes oben wird jeder Weiterleitungsversuch unterdrückt, ohne Maßnahmen zu ergreifen, um ihn zu brechen.
Die Flags -L- und -r -Port -Weiterleitung bestehen nicht als gültige Optionen für die SFTP -Befehlszeile. Wir können jedoch die Option -S verwenden, um sie explizit auszulösen, um einen benutzerdefinierten SSH -Handler anzugeben, in diesem Fall der Mailserver:
<code>$ cat portssh #!/bin/sh exec ssh -L2525:smtp.victimandum.com:25 "$@"</code>
Wenn die Weiterleitungsunterdrückung nicht vorhanden ist, reicht dieser SFTP -Aufruf aus, um eine Weiterleitungsverbindung herzustellen:
<code>$ sftp -S ./portssh -oClearAllForwardings\ no aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Jetzt sehen Sie weiterleitende Versuche im SSH -Prozess des Kindes:
<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>
Der Versuch, den Remote -Mailserver über den lokalen Weiterleitungsport zu kontaktieren, ist jedoch aufgrund einer expliziten Überschreibung erfolglos:
<code>$ nc localhost 2525 $</code>
Diese bedingungslose Unterdrückung ist im Quellcode sichtbar:
<code>$ sed -n /X11/,/Forwardings/p openssh-8.7p1/sftp.c addargs(&args, "-oForwardX11 no"); addargs(&args, "-oPermitLocalCommand no"); addargs(&args, "-oClearAllForwardings yes");</code>
Diese statischen Zeichenfolgen sind auch in kompilierten Binärdateien sichtbar:
<code>$ strings /usr/bin/sftp | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -oPort %d</code>
Schließlich besagt die Dokumentation eindeutig, dass diese Unterdrückung beabsichtigt ist und angemessene Gründe angibt:
<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>
Änderung kompilierte Saiten
Für diejenigen, die die Standardkonfiguration von ClearAllForwardings deaktivieren möchten, besteht die Möglichkeit, SED zu verwenden, um die Saiten im SFTP-Binary direkt zu bearbeiten (vorausgesetzt, die SED der Plattform ist binär-safa):
<code>$ sed 's/AllForwardings yes/AllForwardings no /' sftp.noclearforward</code>
Diese direkte Änderung ist viel einfacher als das Kompilieren neuer Binärdateien.
Wir können bestätigen, dass die Zeichenfolge erfolgreich geändert wurde:
<code>$ strings ./sftp.noclearforward | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -oPort %d</code>
Obwohl der Inhalt und die Prüfsumme des modifizierten SFTP unterschiedlich sein werden, bleibt alle vorhandenen Linux Buildid SHA1 gleich (senden Sie jedoch keine Support -Tickets, wenn Sie bearbeitete SFTP verwenden):
<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>
Sie können den modifizierten SFTP -Binary aufrufen, um die Portweiterleitung zu aktivieren:
<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>
Jetzt können Sie die geänderten Einstellungen im untergeordneten Prozess sehen:
<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>
Diese Funktion ist aktiviert und auf einem Remote -Server ausgeführt und kann Verbindungen in einer separaten Shell überprüfen:
<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>
Wenn die Weiterleitung auf dem Server deaktiviert ist, erhält der Client eine Benachrichtigung, die diesen Status angibt, wenn die Verbindung versucht:
<code>channel 3: open failed: administratively prohibited: open failed</code>
Der SFTP -Administrator hat ein nicht vertrauenswürdiges Konto zugewiesen, um zu überprüfen, ob die Serverkonfiguration die Weiterleitung und Befehlsausführung explizit deaktiviert.
Jenseits von Possix Shell
Während die Dash- und POSIX -Standards eingestellt sind - als Möglichkeit, Befehlszeilenparameter zurückzusetzen, werden erweiterte Funktionen in Bash und KSH93 bereitgestellt:
<code>$ cat ynargs #!/bin/bash echo "${@//yes/no}"</code>
Schneller Test bestätigt eine erfolgreiche Bearbeitung:
<code>$ ./ynargs -oForwardX11 no -oPermitLocalCommand yes -oClearAllForwardings yes -oForwardAgent no -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no</code>
Beachten Sie, dass das obige $ {@// .../...} kein gültiges POSIX ist und nicht in Dash oder eine von PDKSH abgeleitete Shell (Mksh, Oksh) ausgeführt wird. Viele Plattformen bündeln keine Shells mit dieser Funktion (wie Android und OpenBSD, obwohl es Möglichkeiten gibt, sie hinzuzufügen).
Um diese Funktion mit einer leistungsstarken Shell zu nutzen, erstellen wir ein Verzeichnis und erstellen dann einen SSH -Wrapper darin, um die Problemeinstellungen zu löschen:
<code>$ cat ~/switcharoo/ssh #!/bin/bash exec /usr/bin/ssh "${@//yes/no}"</code>
Setzen Sie dann das Verzeichnis vor System SSH in $ path:
<code>$ export PATH=~/switcharoo:$PATH $ which ssh ~/switcharoo/ssh</code>
Dann nennen wir System SFTP in dieser modifizierten Umgebung:
<code>$ /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>
Wir haben festgestellt, dass die Shell die Problemparameter zurücksetzt:
<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>
Bestätigte die lokale Verbindung zum Weiterleitungsanschluss neu:
<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>
Als endgültige Demonstration kann ein vollständiger SMTP -Austausch mit dem folgenden Skript durchgeführt werden:
<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>
Wir können dieses Skript verwenden, um unsere eigene E -Mail an einen Remote -Empfänger zu senden, auf den der Ziel SMTP -Server zugreifen kann:
<code>$ ./awkmail jatanasoff@victimandum.com aturning@localhost awkmail Queued mail for delivery</code>
In stark kontrollierten Umgebungen ist das Vorhandensein dieser Funktionen nicht optimal.
Serverbeschränkungen
Es ist verständlich, dass SFTP -Administratoren ihren Benutzern nicht ermöglichen möchten, mit Hilfe des Servers willkürliche TCP -Verbindungen herzustellen, wodurch sensible Netzwerke gefährdet werden können. Die Begrenzung dieser Aktivität ist eine vorsichtige Sicherheitseinstellung.
Eine häufige restriktive Konfiguration besteht darin, einer Gruppe nicht vertrauenswürdige SFTP -Benutzer hinzuzufügen und dann die Aktivität dieser Gruppe in SSHD_CONfig einzuschränken:
<code>Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no</code>
Diese empfohlene Konfiguration reicht normalerweise aus, um alle Weiterleitungsversuche zu verhindern.
Es wird empfohlen, deaktivierte Deaktivierung zu fügen. Ja:
<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>
Dies bleibt dem Administrator zur Praxis überlassen.
abschließend
Zu strenge SFTP -Client -Einstellungen können zu einem gewissen Grad an Blindheit der Serververwaltung führen. SFTP -Client -Beschränkungen können durch eine Vielzahl von Methoden leicht umgangen.
Für SFTP -Serveradministratoren ist es wichtig zu wissen, wo sie eingeschränkt sind und wo sie eingeschränkt sind, und verlassen sich nicht auf Clients, um den Server vor willkürlicher TCP -Steuerung zu schützen. Der Client wird vom Benutzer gesteuert, und wenn die Konfiguration falsch ist, ist es schwierig, TCP -Befehle auf den Server zu implementieren. Jeder Test sollte ohne umfangreiche Weiterleitung im Benutzer ssh_config abgeschlossen werden, achten Sie auf die Warnungen im Dokument.
Während dieses Merkmal einen denkbaren rechtlichen Zweck hat, ist Missbrauch selten.
Diese Probleme sind nicht neu, da Varianten von Site Exec seit Jahrzehnten in Plaintext FTP vorhanden sind. SFTP ist keine einfache Alternative zur Übertragung von Klartextdateien, sondern auch viele benutzerfreundliche Funktionen.
Hoffentlich können Administratoren diese Methoden anwenden, um die Sicherheit ihrer Server so zu überprüfen, um nicht überrascht zu werden.
Das obige ist der detaillierte Inhalt vonSFTP -Portweiterleitung: Ermöglichung unterdrückter Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!