![Proxychains 和 Squid Proxy](https://linux22.com/image/1510765/Proxychains%20%E5%92%8C%20Squid%20Proxy.png)
我正在使用代理链(3.1 和 4)。我有一个运行 Squid Proxy 3.1.19 的虚拟机。我已正确配置代理链以使用 Squid Proxy,即“http squidip squidport”。代理链在所有情况下均按预期工作,但有一种情况除外,如果我尝试通过代理链连接到被外部网络阻止的端口,它会返回“连接被拒绝”。
在这种情况下,虚拟机的端口 22 向所有网络开放,端口 80 仅向主机开放。我能通过在我的 Web 浏览器中配置 Squid 代理,或者使用其他工具(如 Nikto)的代理选项连接到端口 80。我可以通过代理链将流量路由到端口 22,但不能路由到端口 80。
我不认为问题出在 Squid Proxy 上,否则我就无法从 Web 浏览器或其他工具连接到内部端口,这只是代理链。
Proxychains 在其他所有情况下都运行正常,我已确保流量通过 Squid Proxy 流向目的地。但它仍然无法连接到外部无法访问的端口。
虽然我现在知道在这种情况下打开的端口以及连接到该端口的其他方式,但我希望能够使用 nmap 扫描代理链并发现端口 80 是打开的。
有人见过这个问题吗?什么原因导致代理链出现这种情况?
编辑:我发现 nmap --proxies 设置的行为类似于代理链。它通过 HTTP 代理进行路由,但仅将可从外部访问的端口列为开放。我仍然对此感到困惑,因为 Nikto 和 Metasploit 可以毫无问题地找到内部端口。
对于那些想要自己测试的人,这个虚拟机可以在https://www.vulnhub.com/entry/sickos-11,132/但我之前在其他主机上也遇到过这个问题。
答案1
对于遇到这种情况的其他人,我已弄清楚了。Proxychains 使用 CONNECT 将其请求发送到 Squid Proxy。Squid Proxy 允许任何动词传递到外部可访问的端口,但只允许使用某些动词(如 GET 和 HEAD)连接到外部阻止的端口。CONNECT 动词从 Squid Proxy 收到“403 禁止”,请求永远不会传递到我尝试访问的端口。
为了解决这个问题,我在 bash 中编写了自己的端口扫描器,使用 netcat 通过代理发送 HEAD 请求。