idc节点被微软封禁<解决方法>

650 阅读2分钟

Sorry, looks like your network settings are preventing access to this feature.

省流: 微软疑似封禁了部分idc节点,可以使用其他更好的代理节点或使用请求头插件伪造来源地址

解决方法

  1. 换节点
  2. 使用ModHeader等修改请求头的插件/软件/方式将X-Forwarded-For修改为任意非黑名单ip(如1.1.1.1)

查看节点是否被封禁

  1. 直接访问 www.bing.com/turing/conv…
  2. 或curl www.bing.com/turing/conv…
  • 如果返回的是{"result":{"value":"UnauthorizedRequest","message":"Sorry, you need to login first to access this service."} 或任意内容,说明节点未被封禁
  • 如果返回一片空白,那就是没了

测试

  • 使用oci(已封禁节点) 直接get 空白
  • 使用oci 修改来源为1.1.1.1 成功
  • 使用oci 修改来源为另一台oci ip 失败
  • 使用gcp 直接get 成功
  • 使用gcp 修改来源为1.1.1.1 成功
  • 使用gcp 修改来源为oci ip失败

分析

做网站的都知道在有前端cdn情况下后端是没法知晓访问者的ip的,需要cdn给源站传递访客信息。

最规范的传递方式就是让cdn修改header中的X-Forwarded-For为访客ip,后端再执行相应逻辑。

但鲜有人知header在结构上更接近一个二元数组,而非字典,也就是说一个'header的'key(比如X-Forwarded-For)可以对应多个value(1.0.0.1,1.0.0.2)

而后端若采用字典方式去获取,只能解得第一个(1.0.0.1)。

正常情况下,访客发出的请求header中是不会存在X-Forwarded-For,所以bing cdn采取的加入访客ip方式应该是append(添加,而非修改)。

但当我们提前加入一个伪造的ip,这将成为第一个,而cdn添加的真实ip则成为第二个,使得欺骗后端防火墙认为自己的来源是第一个ip。

换句话说,你只要把来源伪造成任意非黑名单ip即可。

此漏洞明显,修复方式简单,故修改header的可能不会存留很久。