如果我進入文件/etc/ssh/ssh_config
,我可以在文件頂部看到“$OpenBSD”。但是,如果我將預設連接埠更改為不同的值,它似乎不起作用。一位同事告訴我,這是因為 Dropbear 是這裡的軟體伺服器,而不是開放SSH。
有辦法確定嗎?我無法透過谷歌搜尋找到答案。
答案1
連接到 ssh 連接埠(例如 22)並檢查橫幅。
$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6
答案2
大多數(如果不是全部?)SSH 伺服器在連接後立即發送某種版本字串。在我的一個小型研究專案中,我嘗試在大型 IPv4 空間中映射 SSH 伺服器版本,我所做的基本上是nc address port
.
我將其烘焙到 Perl 腳本中,並設定了超時以便於我這邊更輕鬆地進行處理,以及帶有預設值的可選超時:
#!/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;
針對我網路上的伺服器進行測試:
./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3
答案3
如果您在伺服器上,請查看附加至ssh
預期網路連接埠(22
或其他連接埠)的進程。
您可以使用netstat
orss
來實現這一點。然後,您將能夠找到正在運行的伺服器的完整命令列,這可能足以識別它,或者您可以使用其他選項:
- 在它上面運行
strings
實際上是最後一個操作過程,但可以產生結果(您肯定會找到伺服器遠端報告的字串,如其他答案所示) - 您可以找到該進程打開的文件(查看
/proc/$PID/fd
),這可能會產生指向配置文件或日誌文件的鏈接,並且理想情況下,日誌文件將提供足夠的信息來查明這是什麼進程。
或者根據您的系統和設置,例如您可以使用它systemctl list-units
來準確查看當前運行的內容以及ssh
伺服器是什麼(然後透過檢查systemd
單元檔案您將看到它是什麼命令列以及其他資訊)
如果您在伺服器外部,則可以查看其他答案,但不能保證從遠端伺服器返回的結果是真實的,它可以將自己顯示為它想要的任何內容。
遠端的另一個選擇是進行一些“SSH 指紋識別”。我沒有直接看到它,但我確信它存在。基本上,透過測試各種類型的連接,除了它聲稱的資訊之外,我們還可以確定來自遠端部分的一些資訊。我猜多個漏洞掃描器都有類似的東西。
答案4
您可以使用ps
來取得進程清單和grep
的輸出sshd
。
這樣,您將獲得可執行二進位檔案的路徑{{例如/usr/sbin/sshd
或類似的東西}}。
然後您可以使用以下命令執行該二進位文件-?
取得協助和使用資訊。此輸出將包含包的最終名稱{{ 例如 OpenSSH 或 Dropbear 或類似的東西}}。