通过Squid代理执行Nmap扫描失败的技术问题求助
解决通过Squid代理扫描目标80端口(含Shellshock漏洞)的问题
首先得明确你的环境限制:你只能通过虚拟机的3128端口Squid代理,访问它自身的80端口,其他端口的扫描请求要么被Squid拦截,要么因为扫描方式不兼容代理而失败——这就是你用Nmap扫3128/3000端口显示filtered、Nikto扫描出错的核心原因。
下面是针对性的解决步骤:
1. 用Nmap适配HTTP代理的扫描方式
Nmap的常规端口扫描(比如SYN、Connect扫描)是直接发送网络层数据包,没法通过HTTP代理工作。你需要用Nmap的代理参数+应用层漏洞扫描脚本,直接针对80端口的Shellshock漏洞检测:
执行这条命令:
nmap -p 80 --proxy http://192.168.0.105:3128 192.168.0.105 --script http-shellshock --script-args uri=/cgi-bin/your-cgi-path.cgi
- 如果你不知道具体的CGI路径,可以去掉
--script-args部分,脚本会自动尝试常见路径; -p 80锁定目标端口,避免代理拒绝其他端口的请求;--proxy参数明确指定Squid代理的地址和端口。
2. 修正Nikto的代理配置
Nikto扫描失败通常是因为代理参数没配置正确,你可以直接在命令行指定代理:
nikto -h 192.168.0.105 -p 80 -useproxy http://192.168.0.105:3128
或者修改Nikto的配置文件(nikto.conf),添加以下内容后再运行扫描:
PROXYHOST=192.168.0.105 PROXYPORT=3128
3. 先验证代理的连通性
在扫描前,先用curl确认代理能正常转发到目标80端口:
curl -x http://192.168.0.105:3128 http://192.168.0.105
如果能返回目标页面内容,说明代理工作正常;如果不行,先排查Squid的配置——比如是否允许你的主机IP(192.168.0.108)访问代理,是否只允许转发到localhost的80端口。
补充说明:为什么之前的扫描会失败?
- Nmap扫3128端口显示filtered:Squid可能配置了防火墙规则,只允许接收代理请求,不允许直接扫描代理端口本身;
- 扫虚假端口3000显示filtered:Squid会拒绝转发到未授权/不存在的端口,这是代理的正常防护逻辑;
- 常规端口扫描不兼容HTTP代理:因为代理是应用层服务,只处理HTTP请求,而Nmap默认的扫描方式是网络层的,没法通过代理传递。
内容的提问来源于stack exchange,提问作者melvinjose
相关产品推荐
相关产品推荐

