我在目标服务器上使用了 nmap,它返回以下服务
PORT STATE SERVICE VERSION
53/tcp open domain?
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2021-03-17 07:07:34Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap
443/tcp open https?
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
问题是如何识别在 Nmap 可能错误识别的端口上运行的真实服务。例如,在端口 53 上,我如何通过终端确保 DNS 服务正在其上运行?
我可以使用哪种技术?我无权访问目标服务器,因此看不到服务器上正在运行的进程。
正如 Steffen 指出的那样,判断服务器 X 是否在主机 Z 上的端口 Y 上运行的方式是运行一个与 X 使用相同协议的客户端,并将其指向主机 Z 上的端口 Y。例如,测试一个给定服务器使用 DNS,您可以使用许多 DNS 客户端中的任何一个,例如
nslookup
.当然,除了它与您使用的协议兼容之外,这并没有告诉您有关实际运行的任何信息。服务器几乎可以是任何东西。例如,端口 80 上的侦听器(来自您的示例)可能只是一个小脚本,它简单地响应任何 TCP 握手“HTTP 201 No content\r\nServer: Microsoft IIS httpd 10.0\r\n\r\n” ,这大约是一个有效的 HTTP 响应(尽管即使客户端没有发送 HTTP 请求,它也可能会发送该响应),但并不意味着侦听器在任何有用的意义上都是 Web 服务器,更不用说它是特定的 IIS 10.0。
Nmap 的内置识别器脚本可能比您更擅长识别大多数服务器,尽管它们也非常不灵活,如果有人尝试,很容易被愚弄。熟悉相关工具和协议的人很可能在不寻常的情况下提取比脚本更多的信息(例如,一台服务器冒充另一台服务器,或者管理员故意隐藏了识别服务器的常用“提示”)到 Nmap)。但是,一般来说,即使是传授这种熟悉的基础知识,也超出了这个答案的范围,甚至超出了这个网站的范围。