Wenn ich in die Datei gehe /etc/ssh/ssh_config
, sehe ich oben in der Datei "$OpenBSD". Wenn ich jedoch den Standardport auf einen anderen Wert ändere, scheint es nicht zu funktionieren. Ein Kollege hat mir gesagt, dass das daran liegt, dass Dropbear hier der Softwareserver ist, nichtOpenSSH.
Gibt es eine Möglichkeit, sicherzugehen?Ich kann beim Googeln keine Antwort darauf finden.
Antwort1
Stellen Sie eine Verbindung zum SSH-Port (z. B. 22) her und überprüfen Sie das Banner.
$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6
Antwort2
Die meisten (wenn nicht alle?) SSH-Server senden unmittelbar nach der Verbindung eine Art Versionszeichenfolge. In einem kleinen Forschungsprojekt von mir habe ich versucht, die SSH-Serverversion über einen großen IPv4-Raum abzubilden, und was ich im Wesentlichen getan habe, war nc address port
…
Ich habe es in ein Perl-Skript mit einem Timeout integriert, um die Verarbeitung auf meiner Seite zu vereinfachen, sowie einem optionalen Timeout mit einem Standardwert:
#!/usr/bin/perl
use warnings;
use strict;
unless ($ARGV[0] && $ARGV[1]) { die "Usage: ./raw hostname port [timeout]\n" }
my $timeout = '10s';
if ($ARGV[2]) { $timeout = $ARGV[2] }
my $response = `timeout $timeout nc $ARGV[0] $ARGV[1]`;
print $response;
Testen gegen einen Server in meinem Netzwerk:
./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3
Antwort3
Wenn Sie sich auf dem Server befinden, sehen Sie sich den Prozess an, der an den Netzwerkport angeschlossen ist, wo die ssh
Antwort erwartet wird ( 22
oder etwas anderes).
Sie können dafür netstat
oder verwenden ss
. Sie können dann die vollständige Befehlszeile des laufenden Servers finden, die möglicherweise ausreicht, um ihn zu identifizieren. Alternativ können Sie auch zwei andere Optionen verwenden:
- das Ausführen
strings
darauf ist zwar die letzte Maßnahme, kann aber Ergebnisse liefern (Sie werden mit Sicherheit auch die Zeichenfolge zurückerhalten, die vom Server remote gemeldet wird, wie andere Antworten zeigen). - Sie können die geöffneten Dateien des Prozesses finden (siehe
/proc/$PID/fd
), die entweder einen Link zu einer Konfigurationsdatei oder einer Protokolldatei enthalten können. Im Idealfall enthält die Protokolldatei genügend Informationen, um den Prozess genau zu bestimmen.
Oder abhängig von Ihrem System und Setup können Sie beispielsweise verwenden, systemctl list-units
um genau zu sehen, was derzeit ausgeführt wird und was der ssh
Server ist (dann sehen Sie durch Überprüfen systemd
der Unit-Datei, um welche Befehlszeile es sich handelt und andere Informationen).
Wenn Sie sich außerhalb des Servers befinden, sehen Sie sich die anderen Antworten an. Es gibt jedoch keine Garantie dafür, dass die vom Remote-Server zurückgegebenen Daten der Wahrheit entsprechen. Der Server kann sich beliebig darstellen.
Eine weitere Remote-Option wäre, ein „SSH-Fingerprinting“ durchzuführen. Ich habe das nicht direkt gesehen, bin aber sicher, dass es das gibt. Grundsätzlich kann man durch Testen verschiedener Verbindungstypen einige Informationen vom Remote-Teil ermitteln, die über das hinausgehen, was er vorgibt zu sein. Ich vermute, dass mehrere Schwachstellenscanner über solche Dinge verfügen.
Antwort4
Sie können verwenden, ps
um die Liste der Prozesse und grep
die Ausgabe für abzurufen sshd
.
Damit erhalten Sie den Pfad zur ausführbaren Binärdatei {{ eg /usr/sbin/sshd
oder so ähnlich }}.
Sie können diese Binärdatei dann mit ausführen, -?
um Hilfe- und Verwendungsinformationen abzurufen. Diese Ausgabe enthält dieDefinitiver Name des Pakets{{ zB OpenSSH oder Dropbear oder so ähnlich }}.