SNI(Server Name Indication)是 TLS 的扩展,使得在 Client Hello 阶段,浏览器会向服务器明文发送要访问网站的域名。访问控制设备可以根据这一原理对特定的 SNI 进行阻断,也即俗称的 SNI 阻断。众所周知,github 等站点受到了严重的 DNS 污染和表现为随机、间歇性的 SNI 阻断,而 google 等站点 SNI 阻断的同时,还有大量服务 IP 被屏蔽。但是,无论是 github 还是 google,总能找出未被屏蔽的 IP,结合 SNI 伪造,就可以免翻墙直连访问,而无需借助任何 VPN/Proxy。网传的域前置,不过是故弄玄虚版本的 SNI 伪造。本文即以 chromium 内核浏览器为例,简要介绍其基本原理和实现,详细操作过程参考「视频分享」。
示例与分析
成功应用 SNI 伪造的前提有两点:
- 能够找到未被屏蔽的站点 IP,国际大站总有漏网之鱼
- 映射的主机名不在黑名单之内
假设我们要访问的站点 a.com、b.com 被阻断,但实际提供服务的站点 IP 未被完全屏蔽。只要找出未被屏蔽的站点 IP 就可以通过 SNI 伪造的方式绕过检测和阻断。
--host-rules="MAP a.com HostA, MAP b.com HostB" --host-resolver-rules="MAP HostA 1.2.3.4, MAP HostB 5.6.7.8" --ignore-certificate-errors
解析:
--host-rules:将主机名 a.com 的对应 SNI 字段映射为 HostA,将主机名 b.com 的对应 SNI 字段映射为 HostB,假设 a.com 和 b.com 被阻断
--host-resolver-rules:名称解析映射,将 HostA、HostB 分别解析到的 IP 地址,假设 1.2.3.4 和 5.6.7.8 未被屏蔽
--ignore-certificate-errors:忽略证书错误,任由浏览器报告不安全
Github/Google直连访问
这里以 github 为例,要绕过 SNI 检查访问 github,就需要找出 github 可访问的 IP 地址,随意匹配一个未被 SNI 阻断的域名即可。很显然,这一场景下请求的任何证书都是错误的,浏览器会显示证书错误/不安全警告。
第一步 找到 github IP 地址
我们知道, google 等站点会是使用很多服务器提供分布式服务,这些服务器分配了很多 IP 地址,部分甚至绝大部分被访问控制设备屏蔽,但总是能找出“漏网之鱼”。另外,github 等站点仅仅是严重的 DNS 污染,其服务器 IP 本身似乎并没有被屏蔽,找出可以直连访问的 IP 地址则相对轻松。
通过 dig 命令或在线的「DIGGUI」,找到 www.github.com 的 A 记录。这里仅为示例,「DIGGUI」可以选择记录类型、名称解析服务器以及各项参数(options)。
第二步 构造浏览器启动参数
结合示例分析,我们可以构造出访问 github 的 chromium 内核浏览器的启动参数。
--host-rules="MAP *github.com gh1, MAP *githubusercontent.com gh2" --host-resolver-rules="MAP gh1 20.200.245.247, MAP gh2 185.199.108.133" --ignore-certificate-errors
同理,也可以构造出访问 discord、flickr 等站点/服务的启动参数。
--host-rules="MAP discord.com dis" --host-resolver-rules="MAP dis 162.159.128.233" --ignore-certificate-errors --host-rules="MAP flickr.com flc" --host-resolver-rules="MAP flc 13.224.165.123" --ignore-certificate-errors
将 github、discord、flickr 等合并,我们就可以得到以下启动参数。
--host-rules="MAP github.com gh,MAP discord.com dis, MAP flickr.com flc" --host-resolver-rules="MAP gh 20.200.245.247,MAP dis 162.159.128.233,MAP flc 13.224.165.123" --test-type --ignore-certificate-errors
第三步 编辑应用程序启动参数
windows 中找到 chrome、edge 等 chromium 内核浏览器的快捷方式(一般都在桌面),右键点击后选择『属性』,在『属性』对话框中,『快捷方式』选项卡下的『目标』,在已有内容后添加空格,并粘贴启动参数后,点击对话框下方的『确定』即可。
接下来,就可以使用 chrome 浏览器打开 gihub 了,浏览器会显示证书错误警告。
「Sheas Cealer」就是图形化的 SNI 伪造工具,免去了查找可用 IP、编辑启动参数等门槛,新手、小白可以开箱即用,免费无广、完全开源。
更多精彩,敬请关注老 E 的博客!
文章评论
感谢楼主