SNI(Server Name Indication)是 TLS 的扩展,使得在 Client Hello 阶段,浏览器会向服务器明文发送要访问网站的域名。访问控制设备可以根据这一原理对特定的 SNI 进行阻断,也即俗称的 SNI 阻断。众所周知,github 等站点受到了严重的 DNS 污染和表现为随机、间歇性的 SNI 阻断,而 google 等站点 SNI 阻断的同时,还有大量服务 IP 被屏蔽。但是,无论是 github 还是 google,总能找出未被屏蔽的 IP,结合 SNI 伪造,就可以直连访问!
网传的域前置,不过是故弄玄虚版本的 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 了,浏览器会显示证书错误警告。
免费工具
当然,如果不想动手去设置,我们可以直接使用GitHub上的一个SNI 伪造工具「Sheas Cealer」,该工具免去了查找可用 IP、编辑启动参数等门槛,新手、小白可以开箱即用。
工具下载
进入「Sheas Cealer」,当然值得注意的是,该工具从2024年12月30日起将仅供抵御网络非法监听和开展网络安全研究使用。
接下来我们在项目中找到最右边的Releases中的最新版本,然后点击进入,来到Assets,可直接下载exe安装版,当然我这里选择下载便携版,解压直接可用。
下载完成解压之后,我们看到上面有两个exe可执行文件,我们现在用不到,先不用管他,直接来到下面的Sheas-Cealer.exe,点击启动。
该程序要用到.net8,如果电脑没有该环境的话,提示我们下载安装,我们按照提示下载安装即可。
下载完成我们点击安装,安装成功后直接关闭!然后重新双击Sheas-Cealer.exe。
接下来,在弹出框中,我们先不要着急启动伪造,我们要先点击更新上游规则,然后弹出可更新提示,我们选择是,然后等待更新完成。
接下来,我们就可以点击启动伪造了,弹出关闭浏览器所有进程,我们点击是。
接下来,我们就可以直接访问谷歌搜索了。
暂无评论内容