【网络】重定向产生的中间人攻击

源于会话:https://www.doubao.com/thread/wd7f3730b256c59c9

文章目录

    • 一、重定向为什么会容易产生中间人攻击
    • [二、中间人先通过 ARP 欺骗劫持链路是如何做到的](#二、中间人先通过 ARP 欺骗劫持链路是如何做到的)
      • [1、 先补 2 个核心前提(不懂这 2 点,永远搞不懂 ARP 欺骗)](#1、 先补 2 个核心前提(不懂这 2 点,永远搞不懂 ARP 欺骗))
      • [2、 ARP 欺骗劫持链路的核心原理(一句话讲透)](#2、 ARP 欺骗劫持链路的核心原理(一句话讲透))
      • [3、 ARP 欺骗劫持链路的 3 步完整流程(实操级拆解)](#3、 ARP 欺骗劫持链路的 3 步完整流程(实操级拆解))
      • [4、 为什么 ARP 欺骗这么容易成功?(3 个先天缺陷,无解的原生问题)](#4、 为什么 ARP 欺骗这么容易成功?(3 个先天缺陷,无解的原生问题))
      • [5、 2 个典型场景:ARP 欺骗 + 重定向攻击(对应上一轮的知识点)](#5、 2 个典型场景:ARP 欺骗 + 重定向攻击(对应上一轮的知识点))
      • [6、 如何防御 ARP 欺骗?(从个人到后端 / 运维,可落地方案)](#6、 如何防御 ARP 欺骗?(从个人到后端 / 运维,可落地方案))
      • [7、 核心总结(提炼关键,方便记忆)](#7、 核心总结(提炼关键,方便记忆))

一、重定向为什么会容易产生中间人攻击

我们先把核心结论摆前面:重定向之所以容易被中间人攻击,核心原因是重定向的 "跳转目标" 可被中间人篡改,且早期重定向缺乏可靠验证机制,用户 / 客户端会无脑执行跳转指令,相当于把 "去哪" 的决定权拱手让人。结合你熟悉的后端、网络底层逻辑,咱们一步步拆透,好理解又能对应实际场景。

1、先理清 2 个前提(搞懂基础才懂风险)

  1. 重定向的核心逻辑:服务器返回3xx状态码(301/302/307 等),响应头带Location字段,告诉客户端 "去这个新地址拿资源",客户端会自动发起新请求,全程无需用户确认(或仅简单确认)。
  2. 中间人攻击(MITM)的前提:攻击者能劫持客户端与服务器之间的网络链路,实现 "窃听 + 篡改 + 转发"(比如局域网 ARP 欺骗、公共 WiFi 劫持、网关篡改等),数据经过攻击者时可被随意修改。

2、重定向被中间人攻击的核心原理(3 步闭环)

中间人攻击重定向是一套 "劫持 - 篡改 - 诱导" 的闭环,每一步都踩中重定向的设计弱点,咱们按流程拆解:

  1. 第一步:劫持链路,拦截原始响应客户端正常请求目标服务器(比如访问https://xxx.com/login),请求包经过网络时,被中间人劫持;服务器处理后返回正常响应(比如登录页),响应包回传时,又被中间人拦截(此时响应还没到客户端)。✅ 关键:链路劫持是前提,重定向本身不防劫持。
  2. 第二步:篡改响应,替换Location跳转目标中间人不把原始响应发给客户端,而是伪造一个 3xx 重定向响应:
    ◦ 状态码改成 302(临时重定向),适配大部分客户端的自动跳转逻辑;
    ◦ 把响应头Location的值,从原始地址(比如https://xxx.com/home)改成攻击者搭建的钓鱼地址(比如https://xxx-hack.com/login,页面和原站一模一样);
    ◦ 其他响应头伪装成原站格式,降低客户端识别概率。
    ✅ 核心弱点:重定向的Location是明文(早期 HTTP)或可篡改(链路被劫持时),且客户端默认信任服务器返回的Location,无校验机制。
  3. 第三步:诱导操作,窃取敏感信息客户端收到伪造的 3xx 响应,自动跳转到攻击者的钓鱼地址。用户看到和原站一致的页面(比如登录页),输入账号密码、手机号验证码等敏感信息,这些信息会直接发送到攻击者服务器,攻击者拿到后再转发给原站(可选),实现 "无痕窃取"。

3、重定向易被攻击的 3 个关键弱点(对应后端开发要注意的点)

这 3 个弱点是重定向的 "先天缺陷",也是中间人攻击能得逞的核心原因,和你做后端开发时的安全考量强相关:

  • 弱点 1:跳转目标无 "身份校验",客户端无脑执行不管是早期 HTTP 还是部分未做配置的 HTTPS,客户端只认3xx状态码和Location字段,不验证新地址是否为原站授权地址。比如原站只会跳转到xxx.com域名下的地址,但若Location被改成hack.com,客户端照样跳 ------ 相当于 "别人说去哪就去哪",毫无防备。
  • 弱点 2:早期重定向基于 HTTP,数据明文传输,篡改无成本早期 Web 大量用 HTTP 协议,整个请求 / 响应(包括 3xx 重定向的Location)都是明文传输,中间人拦截后可直接修改,无需解密,篡改成本极低。哪怕后来有 HTTPS,若客户端忽略证书异常(比如钓鱼站用自签证书,客户端弹出警告但用户点 "继续访问"),中间人照样能篡改(比如 SSL 剥离攻击,把 HTTPS 降级为 HTTP)。
  • 弱点 3:重定向可 "跨域 / 跨协议",扩大攻击范围重定向支持跨域(比如从a.com跳b.com)、跨协议(比如从https跳http),中间人正好利用这一点:
    ◦ 跨域:跳转到钓鱼域名,用户难分辨;
    ◦ 跨协议:把https(加密)跳http(明文),后续请求的敏感数据可直接窃听,无需破解加密。

4、最典型的 2 种重定向中间人攻击场景(对应实际工作遇到的情况)

结合后端开发、日常网络使用,这 2 种场景最常见,一看就懂:

  • 场景 1:HTTP 302 临时重定向劫持(最经典)
    • 场景:用户访问http://bank.com(银行官网,早期未强制 HTTPS),原站返回 302 重定向到http://bank.com/login。
    • 攻击:中间人拦截原站 302 响应,把Location改成http://bank-hack.com/login(钓鱼登录页)。
    • 结果:用户自动跳钓鱼页,输入银行卡号、密码后被窃取,攻击者再用窃取的信息登录原站转账。
  • 场景 2:HTTPS 重定向的 SSL 剥离攻击(进阶,针对 HTTPS 站点)
    • 场景:用户访问https://shop.com,原站正常返回首页;用户点击 "我的订单",原站返回 307 重定向到https://shop.com/order。
    • 攻击:中间人先通过 ARP 欺骗劫持链路,拦截https请求后,向客户端返回 302 重定向,把https://shop.com/order改成http://shop.com/order(降级为 HTTP)。
    • 结果:客户端跳转到 HTTP 的订单页,用户输入收货地址、支付密码时,数据明文传输,被中间人直接窃听;且 HTTP 页面无证书验证,钓鱼成本更低。

5、为什么重定向比普通请求更容易被攻击?(对比普通请求,突出核心差异)

你可能会问:普通请求也会被中间人劫持,为啥重定向风险更高?核心是 2 个差异,精准对应风险点:

  • 普通请求:篡改的是 "请求内容 / 响应内容",比如篡改商品价格、返回错误数据,用户可能会察觉(比如价格明显异常);
  • 重定向:篡改的是 "跳转目标",跳转到钓鱼站后页面和原站一致,用户几乎无法察觉,攻击隐蔽性极强。
  • 普通请求:客户端拿到响应后是 "展示给用户",用户有判断空间;
  • 重定向:客户端拿到响应后是 "自动执行跳转",用户无干预机会,攻击成功率极高。

6、后端开发中如何防御重定向中间人攻击?(可直接落地的方案)

对应前面的风险点,这 4 个方案是行业最佳实践,做后端开发时直接用:

  1. 核心方案:强制使用 HTTPS,禁用 HTTP 重定向(杜绝明文篡改)
    ◦ 配置全站 HTTPS,返回301/302时,Location必须是https开头,禁止跳http(即 "HTTPS 严格模式");
    ◦ 后端配置Strict-Transport-Security(HSTS)响应头,告诉客户端 "未来一段时间内,只允许用 HTTPS 访问本站",防止被降级为 HTTP。
  2. 关键方案:重定向地址做 "白名单校验"(防止跳钓鱼域名)
    ◦ 后端维护重定向白名单(比如只允许跳xxx.com、xxx.cn等自有域名),返回 3xx 前,校验Location是否在白名单内,不在则拒绝重定向;
    ◦ 禁止 "任意参数拼接重定向"(比如https://xxx.com/redirect?url=${param}),避免攻击者通过篡改param值控制跳转目标(这也是重定向攻击的另一种形式:开放重定向)。
  3. 辅助方案:禁用不安全的重定向码,用 307/308 替代 301/302
    ◦ 301/302:允许客户端把 "POST 请求" 改成 "GET 请求",中间人可利用这点篡改请求方法,增加风险;
    ◦ 307/308:严格保留原请求方法,且跳转更稳定,安全性更高,优先使用。
  4. 兜底方案:客户端侧增加验证(配合后端)
    ◦ 后端返回重定向时,可在Location中拼接签名(比如https://xxx.com/home?sign=xxx),客户端跳转前校验签名,签名无效则拒绝跳转;
    ◦ 提醒用户:遇到 "HTTPS 跳 HTTP""陌生域名跳转" 时,立即停止操作。
    总结(核心要点提炼,方便你记忆)
  5. 核心风险:重定向的Location跳转目标可被中间人篡改,客户端自动执行跳转,无验证 = 无防备;
  6. 攻击逻辑:劫持链路→篡改 3xx 响应 + Location→诱导跳钓鱼站→窃取敏感信息;
  7. 易攻击原因:无身份校验、明文可篡改、自动跳转无干预;
  8. 防御核心:HTTPS+HSTS + 白名单校验 + 安全重定向码,从链路加密、目标校验、跳转规则三层防护。

二、中间人先通过 ARP 欺骗劫持链路是如何做到的

我们先把核心逻辑讲透:ARP 欺骗能劫持链路,本质是ARP 协议本身无认证机制,攻击者伪造 ARP 应答包,让目标设备(你的电脑)和网关互相 "认错",把本该发往网关的流量,全部转发到攻击者的设备上,实现中间人劫持。结合你熟悉的网络底层逻辑,一步步拆透原理、步骤、实操,全程不绕弯,适配后端开发理解视角。

1、 先补 2 个核心前提(不懂这 2 点,永远搞不懂 ARP 欺骗)

要明白 ARP 欺骗,先吃透 ARP 协议的本质和局域网通信逻辑,这是基础中的基础。

  1. ARP 协议的核心作用:IP 地址 → 物理 MAC 地址映射
    局域网内设备通信,不看 IP 地址,只认物理 MAC 地址(网卡的唯一标识,比如00:11:22:33:44:55)。
    • 比如你的电脑(IP:192.168.1.100)要访问百度,先得把数据包发给网关(IP:192.168.1.1);
    • 电脑只知道网关 IP,不知道网关 MAC,就会发ARP 广播包:「谁是 192.168.1.1?麻烦把你的 MAC 告诉我」;
    • 网关收到广播,回复ARP 单播应答包:「我是 192.168.1.1,我的 MAC 是 AA:BB:CC:DD:EE:FF」;
    • 电脑把「IP 192.168.1.1 ↔ MAC AA:BB:CC:DD:EE:FF」存在ARP 缓存表里,后续发往网关的流量,直接用这个 MAC 地址发送。
  2. 局域网通信的关键规则(ARP 欺骗的突破口)
  3. ARP 协议无任何身份认证:不管是谁发的 ARP 应答包,设备收到后都会无条件信任,直接更新本地 ARP 缓存表(覆盖原有记录);
  4. ARP 缓存表有过期时间(默认 2~10 分钟),设备会定期刷新,给攻击者持续欺骗留了窗口;
  5. 广播特性:ARP 广播包能被同一局域网内所有设备收到,攻击者可轻易监听目标设备的 ARP 请求。
    这 3 个规则,就是 ARP 欺骗的 "命门"------ 无认证、可覆盖、能监听,攻击者只要利用这三点,就能实现劫持。

2、 ARP 欺骗劫持链路的核心原理(一句话讲透)

ARP 欺骗本质是双向欺骗:同时欺骗「你的电脑」和「网关」,让两者都把攻击者当成对方,所有流量必须经过攻击者设备转发,形成「电脑 ↔ 攻击者 ↔ 网关」的链路,攻击者就成了中间人。

• 欺骗电脑:告诉电脑「网关 192.168.1.1 的 MAC 是攻击者的 MAC」;

• 欺骗网关:告诉网关「电脑 192.168.1.100 的 MAC 是攻击者的 MAC」;

• 结果:电脑发往网关的流量→攻击者,网关发往电脑的流量→攻击者,攻击者转发双方流量(无痕劫持),同时可窃听、篡改数据。

3、 ARP 欺骗劫持链路的 3 步完整流程(实操级拆解)

以「你的电脑(A)+ 攻击者电脑(H)+ 网关(G)」同一局域网(192.168.1.x)为例,全程还原劫持过程,每一步都对应实际网络包交互。

准备阶段:攻击者先收集基础信息

  1. 攻击者用arp-scan/ping命令扫描局域网,获取 3 个关键信息:
    ◦ 目标电脑 A:IP=192.168.1.100,MAC=00:AA:BB:CC:DD:EE;
    ◦ 网关 G:IP=192.168.1.1,MAC=AA:BB:CC:DD:EE:FF;
    ◦ 自身 H:IP=192.168.1.200,MAC=11:22:33:44:55:66;
  2. 攻击者开启IP 转发功能(关键!):否则收到 A 和 G 的流量后,无法转发给对方,会导致 A 断网,欺骗暴露。
    ◦ Linux 命令:echo 1 > /proc/sys/net/ipv4/ip_forward;
    ◦ Windows 命令:netsh interface ip set global forwarding=enabled。
    第一步:欺骗目标电脑 A,让 A 认 H 为网关 G
  3. 电脑 A 正常通信时,会定期发 ARP 请求:「谁是 192.168.1.1(网关)?」;
  4. 攻击者 H抢先于网关 G,给 A 发送伪造的 ARP 应答包:
    ◦ 应答内容:「我是 192.168.1.1,我的 MAC 地址是 11:22:33:44:55:66(H 的 MAC)」;
  5. 电脑 A 无认证机制,收到应答后,无条件更新 ARP 缓存表:
    ◦ 原有记录:192.168.1.1 ↔ AA:BB:CC:DD:EE:FF(真实网关 MAC);
    ◦ 新记录:192.168.1.1 ↔ 11:22:33:44:55:66(攻击者 MAC);
  6. 从此,电脑 A 发往网关的所有流量(比如访问网站、发请求),目标 MAC 都是 H 的 MAC,全部发到攻击者电脑上。
    第二步:欺骗网关 G,让 G 认 H 为电脑 A
  7. 网关 G 要给电脑 A 回传数据(比如网站响应、DNS 解析结果),会查 ARP 缓存表找 A 的 MAC;
  8. 攻击者 H 主动给网关 G 发送伪造的 ARP 应答包:
    ◦ 应答内容:「我是 192.168.1.100(电脑 A),我的 MAC 地址是 11:22:33:44:55:66(H 的 MAC)」;
  9. 网关 G 同样无认证,无条件更新 ARP 缓存表:
    ◦ 原有记录:192.168.1.100 ↔ 00:AA:BB:CC:DD:EE(真实 A 的 MAC);
    ◦ 新记录:192.168.1.100 ↔ 11:22:33:44:55:66(攻击者 MAC);
  10. 从此,网关 G 发往电脑 A 的所有流量,目标 MAC 都是 H 的 MAC,也全部发到攻击者电脑上。
    第三步:攻击者成为中间人,实现链路劫持(核心闭环)
    此时整个局域网链路变成「A ↔ H ↔ G」,所有流量必经 H,攻击者可做 3 件事(对应之前的重定向攻击):
  11. 无痕转发:H 收到 A 的流量,转发给 G;收到 G 的流量,转发给 A,A 和 G 都察觉不到被劫持;
  12. 窃听数据:H 可抓取所有明文流量(比如 HTTP 请求、未加密的账号密码);
  13. 篡改数据:H 可修改流量内容(比如篡改 3xx 重定向的 Location 字段),这就是之前说的「重定向中间人攻击」的链路基础。

4、 为什么 ARP 欺骗这么容易成功?(3 个先天缺陷,无解的原生问题)

ARP 协议设计之初只考虑了 "简单高效",没考虑安全,这 3 个缺陷让欺骗几乎零成本:

  1. 无身份认证(核心缺陷):ARP 应答包无需验证发送者身份,哪怕是伪造的,接收方也 100% 信任,这是最根本的原因;
  2. 无加密机制:ARP 包是明文传输,攻击者可轻易伪造、篡改,无需破解任何加密;
  3. 缓存自动覆盖:不管原有 ARP 记录是否有效,新收到的应答包都会直接覆盖,且缓存会过期,攻击者只需定期发送伪造包,就能持续劫持。

5、 2 个典型场景:ARP 欺骗 + 重定向攻击(对应上一轮的知识点)

结合你之前问的「重定向易被中间人攻击」,这 2 个场景是实战中最常见的组合攻击,把链路劫持和数据篡改打通:

场景 1: 公共 WiFi 下的 ARP 欺骗 + HTTP 重定向劫持

  1. 你连咖啡厅公共 WiFi(局域网),打开浏览器访问http://xxx.com/login;
  2. 攻击者在同一 WiFi 下,发起 ARP 欺骗,劫持你的电脑和 WiFi 网关的链路;
  3. 你的登录请求发到攻击者,攻击者转发给xxx.com服务器;
  4. 服务器返回 302 重定向(Location: http://xxx.com/home),响应包回传到攻击者;
  5. 攻击者篡改 Location 为http://hack-xxx.com/login(钓鱼页),转发给你;
  6. 你的电脑自动跳转钓鱼页,输入账号密码后,数据直接发给攻击者。
    场景 2: 内网 ARP 欺骗 + HTTPS 剥离(进阶攻击)
  7. 公司内网,你访问https://company.com/order(HTTPS 加密);
  8. 攻击者内网 ARP 欺骗,劫持你和公司网关;
  9. 你发 HTTPS 请求到攻击者,攻击者无法解密,但给你返回 302 重定向,Location 改成http://company.com/order(降级为 HTTP);
  10. 你自动跳 HTTP 页面,后续输入的订单信息、支付密码都是明文,攻击者直接窃听;
  11. 攻击者把明文数据加密后转发给公司服务器,你正常下单,全程无感知。

6、 如何防御 ARP 欺骗?(从个人到后端 / 运维,可落地方案)

针对 ARP 的原生缺陷,从「个人防护」「内网防护」「后端兜底」三个维度防御,覆盖不同场景:

✅ 个人层面(自己用,简单有效)

  1. 绑定静态 ARP(核心):手动把网关 IP 和 MAC 绑定,拒绝自动更新,攻击者伪造包无效;
    ◦ Windows:arp -s 192.168.1.1 AA:BB:CC:DD:EE:FF(网关 IP + 真实 MAC);
    ◦ Linux/Mac:arp -s 192.168.1.1 AA:BB:CC:DD:EE:FF;
  2. 关闭不必要的 IP 转发(自己的电脑):防止被他人利用做攻击节点;
  3. 公共 WiFi 尽量用 HTTPS:哪怕链路被劫持,HTTPS 加密数据攻击者无法篡改(除非 SSL 剥离)。
    ✅ 内网 / 运维层面(公司 / 网关侧,根治 ARP 欺骗)
  4. 开启 ARP 防火墙(网关 / 交换机):主流路由器、企业交换机都支持,只允许合法 ARP 应答,拒绝伪造包;
  5. 启用 IP-MAC 绑定(端口绑定):交换机端口绑定设备 IP 和 MAC,非绑定设备无法接入,攻击者无法伪造;
  6. 部署 ARP 欺骗检测工具:比如arpwatch,监控局域网 ARP 缓存变动,发现频繁更新同一 IP 的 MAC,立即告警。
    ✅ 后端开发层面(兜底防护,不管链路是否被劫持)
  7. 强制 HTTPS+HSTS:哪怕链路被劫持,HTTPS 加密让攻击者无法篡改重定向的 Location;HSTS 防止被降级为 HTTP;
  8. 重定向白名单:不管 Location 被怎么改,后端只允许跳自有域名,钓鱼域名直接拒绝;
  9. 敏感操作加校验:登录、支付等操作,增加短信验证码、设备绑定,哪怕密码被窃,攻击者也无法登录。

7、 核心总结(提炼关键,方便记忆)

  1. ARP 欺骗核心:双向欺骗电脑和网关,利用 ARP 无认证缺陷,让流量必经攻击者,实现链路劫持;
  2. 劫持前提:攻击者和目标在同一局域网(公共 WiFi、公司内网),开启 IP 转发;
  3. 重定向攻击关联:链路劫持是基础,攻击者能拦截并篡改 3xx 响应的 Location,才会让重定向攻击得逞;
  4. 防御核心:静态 ARP 绑定(个人)+ ARP 防火墙(内网)+ HTTPS 加密(后端),三层防护全覆盖。
相关推荐
乾元2 小时前
自动化补丁评估与策略回滚:网络设备固件 / 配置的风险管理
运维·开发语言·网络·人工智能·架构·自动化
鲨莎分不晴2 小时前
深入理解 UDP:大道至简的传输层基石
网络·网络协议·udp
专业开发者3 小时前
蓝牙 Mesh 网络为欧司朗智能照明系统开启了全新的无线时代
网络·物联网
G_H_S_3_3 小时前
【网络运维】MySQL 高可用架构实践:备份策略、主从复制与读写分离
运维·网络·mysql
How_doyou_do3 小时前
智能体通信协议 ANP
网络·anp
摇滚侠3 小时前
图解三次握手,四次挥手,建立 TCP 连接的过程,上千次 TCP 连接测试,让我看到教科书没写的细节
网络·网络协议·tcp/ip
米羊1213 小时前
TCP/IP 协议 (上)
网络·安全
huangql5203 小时前
HTTP/1 VS HTTP/2
网络·网络协议·http
ZeroNews内网穿透3 小时前
Typecho博客搭建与公网访问指南
运维·服务器·网络·ssh