参考:
http://www.jianshu.com/p/98c08956183d
https://github.com/bl4de/ctf/blob/master/2017/nullcon_HackIM_2017/Web1.md

看到一个CTF题中有一个与X-Forwarded-For有关的。
通过在HTTP头中设置

X-Forwarded-For: 127.0.0.1

在正常的TCP 通信中,是可以伪造数据包来源 IP 的,但这会让发送出去的数据包返回到伪造的IP上,无法实现正常的通信。

实现TCP层级别的伪造很难,因为很难实现正常的TCP连接;但是在应用层协议HTTP上的实现较容易,通过伪造IP,能欺骗多数服务器应用程序实现通信。对于绕过服务器的IP地址过滤或者伪造来源IP特别有用,导致的后果就是非授权IP能访问服务器,甚至能钻服务器的漏洞。

关于X-Forwarded-For

HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,只能通过X-Forwarded-For来实现。
X-Forwarded-For位于HTTP协议的请求头, 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入RFC 7239(Forwarded HTTP Extension)标准之中。
其格式为:

X-Forwarded-For: client, proxy1, proxy2

最开始的是离服务端最远的设备 IP(即客户端IP),然后是每一级代理设备的 IP。

总结

目前很多Web 应用(例如获取用户所在地区,基于 IP 做访问频率控制,禁止某些IP访问等等),为了获取用户真正的 IP,从 HTTP 请求头中获取 IP地址。
对于直接使用的 Web 应用,必须使用从TCP连接中得到的 Remote Address,才是用户真实的IP

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐