当我尝试使用传送节点作为一种代理来扫描该代理节点后面的网络内的资源时遇到了一些问题。
我的设置如下所示:我的 Teleport 集群内有一个节点,我想使用它来代理 nmap 扫描到该节点后面的资源(这些资源与互联网断开连接,传送节点充当唯一的外部链接,要访问资源,您需要先 ssh 进入“代理节点”,然后才能访问所述网络内的资源)。
我希望能够从另一个传送代理远程执行此操作,因此我基本上启动了动态端口转发:tsh ssh -D 1080 <teleport_node>
然后我使用这个新的 socks5 代理与 proxychains 一起扫描我之前提到的网络中的资源:proxychains4 nmap -sT -Pn -sV -n <resource_ip>
结果是……所有端口都打开并被 tcpwrapped。使用 scanme.nmap.org 作为资源的相同命令实际上从未结束(或者我从未等待它结束,但我认为它实际上从未结束)。
从 nmap 中删除 -sV 标志确实会使其“工作”,但却会使输出完全无用,因为所有端口都被视为打开。
执行与上述完全相同的操作,但使用标准 ssh(OpenSSH)来动态端口转发流量,将获得预期结果:ssh -D 127.0.0.1:1080 <teleport_node>
是否有人知道 tsh 是否会以某种方式改变正常动态端口转发的工作方式(而不是使用 ssh)?
答案1
Nmap 无法通过代理运行通过设计。如果存在这样的可能性,它早就被写入 Nmap 代码本身了(它是一个非常成熟的软件),而且你不需要使用代理链或任何重定向器。
它应该直接连接到目标系统。它需要观察连接行为的每一个细节。即使是时间延迟一些回复包可能会产生影响(例如,对于操作系统指纹代码)。
显然,当代理位于代理后面时,所有这些都会被代理隐藏。在这种情况下,proxychains 用自己的包装器替换库系统调用函数,并且该包装器首先连接到 SSH 动态正向代理,然后那连接成功,并且那成功和其他连接信息将报告给原始调用者,例如 Nmap,然后它会向您显示这些信息。所以恭喜您,您只是扫描代理,因此获取了有关代理本身的信息,例如有关您的 SSH 客户端计算机的信息!
您无法使用任何可以放在那里的标志来实现这一点。相反,请在边界内安装 Nmap,例如在该网络内的虚拟机上,然后您可以在 SSH 会话中使用它,这样它就能完美地工作了。