时效性
2025年8月3日
题目来源
题目描述
某些网站会优先信任X-Forwarded-For头来获取客户端真实ip,导致我们可以直接伪造X-Forwarded-For:127.0.01来绕过!特别是在使用反向代理(如Nginx、Cloudflare等)的环境中。如果系统简单地信任这个头而不做验证,攻击者可以:伪造 X-Forwarded-For: 127.0.0.1 让服务器认为请求来自本地。从而突破IP的限制。
Write up
在html源码中存在一段Base64编码的字符串,进行解码后可以看到对应的密码test123
总结
“X-Forwarded-For” (XFF) 头绕过指的是攻击者通过伪造或操纵这个 HTTP 请求头来欺骗服务器,使其错误地识别客户端的真实 IP 地址。这是一种常见的 IP 欺骗技术,主要用于规避基于 IP 地址的安全控制(如访问控制列表、速率限制、地理封锁、反爬虫机制等)。
为什么 XFF 可以被绕过?
- 客户端可控性:
X-Forwarded-For头是由客户端(浏览器、脚本、工具)或路径上的第一个代理服务器添加的。攻击者可以完全控制自己发送的请求头,直接设置X-Forwarded-For为任意值(包括多个 IP)。 - 代理链信任问题:如果服务器(或服务器前的最后一个代理/负载均衡器/WAF)盲目信任
X-Forwarded-For头中的值,特别是第一个值或最后一个值,并将其视为客户端的真实 IP,那么伪造就成功了。 - 代理配置不当:中间代理服务器可能配置不当,未能正确覆盖或清理传入的
X-Forwarded-For头,或者直接将客户端提供的 XFF 值追加到现有头中。
常见的 XFF 绕过手法:
-
简单伪造:
- 攻击者直接在 HTTP 请求中添加
X-Forwarded-For头,并设置为自己想要的 IP 地址。 X-Forwarded-For: 203.0.113.100(伪造的 IP)- 如果服务器直接信任这个值,攻击者就成功伪装了 IP。
- 攻击者直接在 HTTP 请求中添加
-
追加伪造 (制造代理链假象) :
- 攻击者发送一个已经包含
X-Forwarded-For头的请求,该头包含一个或多个看起来像代理链的 IP 地址,最后一个是攻击者希望服务器看到的伪造 IP。 X-Forwarded-For: 192.0.2.1, 198.51.100.2, 203.0.113.100(假设203.0.113.100是伪造的目标 IP)- 服务器如果配置为取
X-Forwarded-For头中的第一个 IP 作为客户端 IP(这在一些错误配置中会发生),就会取192.0.2.1。 - 服务器如果配置为取
X-Forwarded-For头中的最后一个 IP(这通常被认为是离服务器最远的、最原始的客户端 IP),就会取203.0.113.100(伪造成功)。这是最常见的攻击方式。 - 服务器如果配置为取
X-Forwarded-For头中倒数第二个 IP(假设它信任自己前面的一个代理),如果攻击者伪造的链长度足够,也可能被欺骗。
- 攻击者发送一个已经包含
-
覆盖已有头:
- 即使客户端请求中可能没有 XFF 头,攻击者也可以主动添加一个。
- 即使客户端请求中已经有一个 XFF 头(比如浏览器在某些代理后自动添加),攻击者可以发送一个同名的头。根据 HTTP 规范和服务器/代理的实现,后发送的头可能会覆盖前一个头,或者多个值被合并。这可能导致攻击者注入的值生效。