当我在 SSH 端口上进行 nmap 扫描时,我得到了
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
是否可以修改或隐藏 SSH 标识字符串?
答案1
该标识字符串可能是由 SSH 服务本身返回的。尝试这个:
echo "blah" | nc YOUR.SERVER.ADDRESS 22
这给出的响应有点类似于:
SSH-2.0-OpenSSH_8.6
Invalid SSH identification string.
不幸的是,这是嵌入在二进制文件中的字符串sshd
。你有几个选择:
- 检查您的发行版是否允许 sshd 包的特定编译标志以删除版本横幅
- 某些发行版,例如 Debian,允许您尝试这样的选项:
DebianBanner no
在/etc/ssh/sshd_config
文件中。这是强烈的分布特定性 - 哈奇的一种解决方案。使用
strings
onsshd
binary 来查找哪些字符串与返回的字符串匹配。之后,准备当前二进制文件的备份并使用hexedit
.注意:如果您尝试运行修改后的二进制文件并且出现问题,这可能最终导致无法 ssh 到您的服务器。小心并确保你有后备计划。
不要过多地篡改它,因为此标识字符串是协议的一部分,尽管nc
显示更改的字符串,但您最终可能会导致客户端拒绝连接,因为字符串的格式不正确http://www.openssh.com/txt/rfc4253.txt
答案2
sed 's/SSH-%d.%d-%.100s%s%s/SSH-%d.%d-OpenSSH___/' /usr/sbin/sshd > modifiedsshd
检查它们的大小是否仍然相同,但二进制文件不同。如果它们仍然是相同的二进制文件(cmp 返回 0)那么
strings /usr/sbin/sshd | grep SSH-
查找printf()
您的 SSH 版本使用的正确格式。关键是您给出的前后字符串的sed
长度必须完全相同。
不言而喻,但请sshd
在某处保留二进制文件的备份,并首先在可以本地访问的计算机上尝试此操作,以防出现问题。