从429到200:利用X-Overwriting头实现速率限制绕过与漏洞赏金
Akwaaba!朋友们。在本报告中,我将展示如何绕过某组织匆忙实施的速率限制机制。如果你对我的其他研究感兴趣,可以参考我之前关于《如何绕过Google验证码实现CSRF与XSS链式攻击》的文章,或者关于《Android Intent重定向攻击》的移动端渗透测试文章。
速率限制技术解析
速率限制是开发者用来控制用户/系统在特定时间范围内请求次数的技术。在API中,标准响应状态码为429(请求过多),但许多开发者会采用非标准实现。常见实现方式包括:
- 基于IP地址的限制
- 基于电子邮件的限制
- 基于设备/会话的限制
- 基于地理位置的限制
- 端点专用限制等
例如微软会在多次错误登录后给予冷却期,而Snapchat则会直接临时锁定账户。
漏洞发现过程
在某HackerOne项目的测试中,我最初发现其应用存在速率限制缺失问题。在厂商修复后,我重新检测登录端点发现:
- 5次错误登录触发429状态码
- 响应体中包含用户公网IP参数
- 确认采用IP基础的计数机制
利用X-Overwriting头绕过
为绕过IP限制,除了VPN切换外,更有效的方法是使用下列HTTP覆盖头:
X-HTTP-Method-Override
:覆盖HTTP方法X-Original-URL/X-Rewrite-URL
:URL重写X-Forwarded-For
:声明原始客户端IPX-Real-IP
:替代IP传递方式
通过Burp Suite测试:
- 注入
X-Forwarded-For: 127.0.0.1
头 - 观察到状态码从429变为401
- 响应体显示伪造IP与剩余尝试次数
自动化暴力破解配置
使用Burp Intruder进行自动化攻击:
- 采用Sniper攻击模式
- 对IP地址某个字节设置数字载荷(1-500)
- 每个请求自动变更X-Forwarded-For值
- 利用无效IP(如256+字节值)实现无限尝试
防护方案建议
针对IP基础速率限制的防护措施:
- 仅信任已知内部代理的X-Forwarded-For头
- 优先使用网络层REMOTE_ADDR值
- 在应用前置反向代理/WAF(如Cloudflare、AWS WAF)
- 实施多因素速率限制策略(IP+会话+行为)
特别说明:本文所有技术细节已获得相关厂商授权披露,仅供学习防御技术使用。
通过Twitter @tinopreter或LinkedIn Clement Osei-Somuah与我交流更多安全研究。