再谈 IP 伪造
0x00 前言 本篇文章最早由笔者发布在漕河泾小黑屋公众号上。然而,公众号始终不利于分享,故重新发表于博客上。 本篇文章主要介绍几种常见的伪造来源 IP 的方式。 0x01 方式1: X-Forwarded-For 这个是最为认知的 IP 伪造方法,早年的 CTF 题目也经常涉及,然而现在知道的人太多, CTF 都不屑于出这类题目。 X-Forwarded-For 诞生的原因比较简单粗暴。 对于一个非常简单的网络模型, 一个网络请求通常只有两方,即请求方与被请求方,如下所示。这样的网络模型下, Web Server 是可以拿到 User 的真实 IP 地址的,即使拿到的可能是路由器的地址。 User --> Web Server 但是上了规模的网站,其网络模型不会这么简单,它可能长这样: User --> CDN --> Web Server 在这种场景下, CDN 依旧可以拿到 User 的真实 IP 地址,然而 Web Server 却无法直接拿到。 为了解决这个问题, 有人提出了 X-Forwarded-For, 它作为 HTTP Header 传递给后端的 Web Server,其格式如下: X-Forwarded-For: 1.0.0.1, 2.0.0.2 细心的朋友可能会发现, 我是不是可以直接将 1.0.0.1 改成任意 IP 地址,然后直接将请求发送给 Web Server?没错,这就是非常简单的 X-Forwarded-For IP 伪造攻击。一般这类问题的解决思路是,校验 4 层协议的来源 IP,判断是否为可信 IP,比如是否为 CDN 的 IP。如果可信,才会尝试解析 X-Fowarded-For Header。 ...