由SickOS引发的关于对Squid的思考
前言:在打SickOS-1的时候遇到了一个以前从来没有碰到过的东东,nmap扫出来是这样的:3128/tcp open squid-http 最前面有个squid 下文也将以这个进行展开。
什么是squid
遇到没见过的首先肯定是搜索引擎去搜一下了,下面是官方解释:
Squid 是一种高性能的 Web 客户端代理缓存服务器,支持 FTP、gopher 和 HTTP 数据对象。Squid 以单一、非阻塞、I/O 驱动的进程通过 IPv4 或 IPv6 处理所有请求。
Squid 将元数据,特别是热门对象和 DNS 条目缓存到 RAM 中,并实现失败请求的负面缓存。
Squid 支持 SSL、广泛的访问控制和完整的请求日志。通过使用轻量级的 Internet Cache Protocol (ICP),Squid 缓存可以分层或网状排列,以节省额外的带宽。
Squid 由一个主服务器程序 *squid*、一些用于重写请求和执行身份验证的可选程序,以及一些管理和客户端工具组成。
简单来说就是开源 HTTP 代理服务器(Web Proxy),主要工作是:
-
帮用户(或服务器)去访问互联网上的网页,然后把内容缓存下来,下次别人访问同样的网页就更快。
-
很多公司、学校会用它来统一管理上网、过滤内容、加速访问。
-
默认监听端口就是 3128(就像 80 是网页、22 是 SSH、3306 是 MySQL 一样,3128 是 Squid 的“标准门牌号”)。
不出意外的话后面肯定得用到这个。但我刚开始依旧是直接端口加上去访问了,一个squid的错误页面,后面上dirsearch扫也都是400,所以得通过代理去访问这里的内部网页。
具体工作流程
假设我们想访问一个网页 http://example.com/index.html
- 客户端配置代理:
- 我们在浏览器中设置 HTTP Proxy 为 Squid的IP:3128
- 浏览器/cURL 不是直接发请求给 example.com,而是发给 Squid 一个特殊的请求(格式类似 GET
http://example.com/index.html HTTP/1.1—— 注意这里带了完整 URL)
- Squid 收到请求:
- Squid 检查自己的缓存(cache)里有没有这个内容
- 如果有 → 直接返回给客户端
- 如果没有 → Squid 以自己的身份去真正访问
http://example.com/index.html(它会发起一个普通的 HTTP 请求)
- Squid 获取内容后:
- 把内容缓存起来(根据配置决定存多久)
- 把内容返回给原来的客户端
- 同时记录日志(access.log 等),管理员可以看到谁访问了什么
这里就会有ip的区别:
- 正常访问:客户端 → 直接连目标服务器(目标服务器看到的是我们自己真实的 IP)
- 走 Squid:客户端 → Squid → 目标服务器(目标服务器看到的是 Squid 的 IP,不是我们自己的 IP)
在SikcOS这台靶机上就是利用这个已知的proxy作为跳板,去访问它能访问但我们不能直接访问的网站
DMZ--Squid的存放位置
DMZ 是网络安全里一个非常重要的概念,字面意思是“非军事化区域”,作用是隔离外网和内网。
真实网络中典型的 DMZ 架构
-
Internet(外网,不信任区)
-
DMZ(半信任区):放一些必须对外提供服务的服务器,比如:
- Web 服务器(网站)
- Mail 服务器
- DNS 服务器
- Proxy 服务器(Squid 经常放在这里)
- FTP、VPN 入口等
-
Internal LAN(内网,信任区):放数据库、文件服务器、员工电脑、核心业务系统等敏感资源。
DMZ的工作原理
-
流量控制:外部请求必须经过防火墙规则或网络地址转换(NAT)映射到DMZ服务器。
-
访问限制:DMZ服务器可以与外部网络通信,但与内网的通信受到严格限制,防止入侵扩散。
-
内部管理:内网用户可以访问DMZ服务器进行管理和维护,但外网用户无法直接访问内网。
常见 DMZ 部署方式
-
单防火墙 DMZ(三腿防火墙):一个防火墙有三个网卡(外网、DMZ、内网)
-
双防火墙 DMZ(最推荐):外网防火墙(Internet → DMZ) + 内网防火墙(DMZ → Internal)即使 DMZ 被攻破,攻击者还得再突破第二道防火墙才能进内网
-
反向代理(Reverse Proxy) 常放在 DMZ:用户访问反向代理,反向代理再把请求转发到内网真正的 Web 服务器(用户看不到内网 IP)

(图片来自网络)
而把Proxy放在DMZ的理由如下:
-
Proxy 可以集中管理上网、过滤恶意内容、缓存、记录日志
-
如果 Proxy 被攻破,攻击者最多只能在 DMZ 活动,很难直接跳到内网
-
但如果 Proxy 配置错误(misconfigured),它可能允许外网用户通过它去请求内网资源(localhost 或 10.0.0.0/8 等),这就是 Proxy Pivot 的来源
在SickOS-1.1中,这台靶机就相当于模拟了一个 简化版的 DMZ 场景:
-
外网只能看到 3128 (Squid) 和 22 (SSH)
-
真正的 Web 服务只监听在 localhost:80(相当于内网服务)
-
Squid 被故意配置成允许你通过它去访问 localhost 的资源(misconfigured open proxy)
-
配置 proxy → 请求
http://ip/→ Squid 帮我们转到它自己内部的 80 端口 → 这样我们才能看到网页、扫目录等后续一系列操作
与渗透测试主流框架的联系
这次的靶机开始有真正接触实际渗透过程中的一点东西了,后面又去具体了解了一下,基本的完整渗透流程有这么几点:
-
外网打点 /
External Foothold:对应 Recon + Scanning + Initial Access(外网拿到第一台机器的 shell) -
内网渗透 /
Internal Penetration:进入内网后的整体行动 -
横向移动
(Lateral Movement):在内网从一台跳到另一台,扩大控制范围(最常见的如 Pass-the-Hash、Pass-the-Ticket、SMB/RDP 喷洒等) -
内网穿透 /
Pivoting / Tunneling/ 建立通道:用已控机器作为跳板,建立代理隧道或端口转发,让外网工具能直接访问内网其他端口/服务(frp、ew, chisel, ligolo-ng 等工具常用) -
权限维持 /
Persistence:长期驻留(后门、计划任务、注册表、C2 信标等)
这里就相当于外网打点到初始访问阶段,拿到交互式shell之后才算是真正进了内网。
而内网穿透就比如说我们从外网好不容易打了一点得到shell,想接着打下去会遇到内网其他机器端口对外网完全不通的问题,这样我们的工具就无法使用,因此需要让已控机器帮我们转发流量,即建立通道
然后靶场里面还有一个常考的知识点:WPAD 劫持
Windows 域环境下,浏览器会自动寻找 http://wpad/wpad.dat 获取代理配置。如果攻击者在内网抢占了 NetBIOS/WINS 名称解析,就能强制所有员工浏览器流量经过恶意 Squid 代理——这是内网横向移动中窃取 Net-NTLM Hash 和流量劫持的经典手法(对应工具:Responder + Squid) 更加具体的等后面遇到了再详细深入讲解
看到这里的师傅相信你一定对渗透有兴趣,希望能在漫漫路上能共同进步★,°:.☆( ̄▽ ̄)/$:.°★

浙公网安备 33010602011771号