由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

  1. 客户端配置代理
    • 我们在浏览器中设置 HTTP Proxy 为 Squid的IP:3128
    • 浏览器/cURL 不是直接发请求给 example.com,而是发给 Squid 一个特殊的请求(格式类似 GET http://example.com/index.html HTTP/1.1 —— 注意这里带了完整 URL)
  2. Squid 收到请求
    • Squid 检查自己的缓存(cache)里有没有这个内容
    • 如果有 → 直接返回给客户端
    • 如果没有 → Squid 以自己的身份去真正访问 http://example.com/index.html(它会发起一个普通的 HTTP 请求)
  3. 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的工作原理

  1. 流量控制:外部请求必须经过防火墙规则或网络地址转换(NAT)映射到DMZ服务器。

  2. 访问限制:DMZ服务器可以与外部网络通信,但与内网的通信受到严格限制,防止入侵扩散。

  3. 内部管理:内网用户可以访问DMZ服务器进行管理和维护,但外网用户无法直接访问内网。

常见 DMZ 部署方式

  • 单防火墙 DMZ(三腿防火墙):一个防火墙有三个网卡(外网、DMZ、内网)

  • 双防火墙 DMZ(最推荐):外网防火墙(Internet → DMZ) + 内网防火墙(DMZ → Internal)即使 DMZ 被攻破,攻击者还得再突破第二道防火墙才能进内网

  • 反向代理(Reverse Proxy) 常放在 DMZ:用户访问反向代理,反向代理再把请求转发到内网真正的 Web 服务器(用户看不到内网 IP)

image

(图片来自网络)

而把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) 更加具体的等后面遇到了再详细深入讲解


看到这里的师傅相信你一定对渗透有兴趣,希望能在漫漫路上能共同进步★,°:.☆( ̄▽ ̄)/$:.°★

posted @ 2026-04-19 21:32  ShoreKiten  阅读(7)  评论(0)    收藏  举报