〇、概述
使 ssh 客户端以及探测工具在与 ssh 服务器通信过程中通过登录认证之前无法获取到 sshd 程序的具体版本号,从而避免基于SSH版本号的漏洞探测。
在 openssh 最新源码的基础上修改,隐藏登录过程中服务端发送给客户端的程序版本信息,编译安装后测试效果。
一、修改源码
version.h
diff --git a/version.h b/version.h
index 81b7645a7..b92b28c6f 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,7 @@
/* $OpenBSD: version.h,v 1.102 2024/07/01 04:31:59 djm Exp $ */
#define SSH_VERSION "OpenSSH_9.8"
+#define SSH_VERSION_FAKE "OpenSSH_latest"
kex.c
diff --git a/kex.c b/kex.c
index 63aae5d71..b1e88e935 100644
--- a/kex.c
+++ b/kex.c
@@ -1253,7 +1253,7 @@ kex_exchange_identification(struct ssh *ssh, int timeout_ms,
if (version_addendum != NULL && *version_addendum == '\0')
version_addendum = NULL;
if ((r = sshbuf_putf(our_version, "SSH-%d.%d-%s%s%s\r\n",
- PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION,
+ PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION_FAKE,
version_addendum == NULL ? "" : " ",
version_addendum == NULL ? "" : version_addendum)) != 0) {
oerrno = errno;
二、测试效果
使用 ssh 客户端:
ssh -v root@kylin.vm
使用 nc 命令:
nc -v kylin.vm 22