记一次校园网认证绕过

一句话

防火墙阻断了所有 tcp 和 udp,但不阻断 icmp,把 tcp/udp 流量用 icmp 协议传输就行了。但是效果差强人意。

背景

某天起来,按照往常一样登录校园网,突然告诉我停机了。不过最近进工作室了,有个了自己的工位了,工位这边插上就有网,于是就没买校园网了。

Untitled.png

但是,很难受,虽然可以白嫖学校的网络,但是只有在工位才可以,宿舍就只能用流量了。想着晚上回宿舍看视频,还要在工位提前缓存,心里想着一定要把认证给破了。

目前情况

学生校园网分为宿舍拨号上网和无线认证上网,这里只考虑无线。

无线网络为公开的无密码热点,连接后访问任何网页都会被重定向到登录页面。

Untitled.png

地址分配

使用 ipconfig 命令查询接口的连接信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
PS C:\Users\suyiiyii> ipconfig
无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2001:da8:****:****:****:d768:df53:2231
   临时 IPv6 地址. . . . . . . . . : 2001:da8:****:****:****:28c:267e:c8c6
   本地链接 IPv6 地址. . . . . . . : fe80::c7fe:6131:efde:de12%16
   IPv4 地址 . . . . . . . . . . . . : 10.*.*.*
   子网掩码  . . . . . . . . . . . . : 255.255.128.0
   默认网关. . . . . . . . . . . . : fe80::2e52:afff:fe6e:7e6d%16
                                       10.*.*.*

可以看到正常分配到了 ipv4 和 ipv6 地址,结合之前使用的情况,认证之后地址不变。

DNS

既然正常分配到 ip 了,尝试 ping 一下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
PS C:\Users\suyiiyii> ping baidu.com

正在 Ping baidu.com [39.156.66.10] 具有 32 字节的数据:
来自 39.156.66.10 的回复字节=32 时间=59ms TTL=48
来自 39.156.66.10 的回复字节=32 时间=59ms TTL=48
来自 39.156.66.10 的回复字节=32 时间=62ms TTL=48
来自 39.156.66.10 的回复字节=32 时间=59ms TTL=48

39.156.66.10  Ping 统计信息:
    数据包已发送 = 4已接收 = 4丢失 = 0 (0% 丢失)
往返行程的估计时间 (以毫秒为单位):
    最短 = 59ms最长 = 62ms平均 = 59ms

居然 ping 成功了,再去试一下打开网页,还是被重定向到登录页面了。

虽然不能上网,但还是说明了:

  1. 此时可以进行 dns 解析
  2. 服务器允许 ping 请求通过

分析

DNS 53 端口

基于第一点,我们猜测防火墙可能没有阻断 udp 53 端口,否则我们做不了 dns 解析。

于是我们尝试指定 dns 服务器进行解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PS C:\Users\suyiiyii> nslookup baidu.com
服务器dns.*.edu.cn
Address:  10.*.*.*

非权威应答:
名称baidu.com
Addresses:  110.242.68.66
          39.156.66.10

PS C:\Users\suyiiyii> nslookup baidu.com 223.5.5.5
DNS request timed out.
    timeout was 2 seconds.
服务器UnKnown
Address:  223.5.5.5

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** 请求 UnKnown 超时

很遗憾,尝试访问第三方服务器失败了。之前 dns 解析能够成功,是因为用的是校内的 dns 服务器,可能是特殊开放的端口。

经过测试,使用默认的 dns 服务器可以解析到正确的地址,但是无法访问第三方的 dns 服务器,也就是说,使用 udp 53 端口这条路行不通。

ICMP

没关系,我们还可以 ping 通。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
PS C:\Users\suyiiyii> ping suyiiyii.top

正在 Ping suyiiyii.top [14.215.57.239] 具有 32 字节的数据:
来自 14.215.57.239 的回复字节=32 时间=8ms TTL=53
来自 14.215.57.239 的回复字节=32 时间=8ms TTL=53
来自 14.215.57.239 的回复字节=32 时间=9ms TTL=53
来自 14.215.57.239 的回复字节=32 时间=8ms TTL=53

14.215.57.239  Ping 统计信息:
    数据包已发送 = 4已接收 = 4丢失 = 0 (0% 丢失)
往返行程的估计时间 (以毫秒为单位):
    最短 = 8ms最长 = 9ms平均 = 8ms

我们 ping 一下自己的服务器,结合之前的数据和 ping 其他服务器的延迟数据,可以大致判断 ping 请求真实到达了远端服务器,也就是说,防火墙没有阻断 icmp 协议,我们只需要把 tcp/udp 数据通过 icmp 协议发送就行了。

资料收集

通过相关关键字的查找,最终决定使用这个最近更新并且 star 比较多的项目:udp2raw

link_preview

udp2raw 项目支持通过 icmp 传输 udp,也就是说,我们现在可以建立一个 udp 连接了。

但是仅有 udp 连接是不够的,我们最终需要的是打开网页。所以我们还需要一个可以传输 tcp/udp 数据的隧道。这方面 udp2raw 项目推荐的是 openvpn,但由于复杂度的问题,我使用的是 v2ray。

为了绕过校园网的认证防火墙,我们还需要一个落地的机器,这里我使用的是在工位的电脑,24 小时开机提供服务。

所以,我们打开一个网页的整个流程就变成了这个样子。

1
2
3
┌───────┐  ┌─────────┐  ┌──────────┐   ┌──────────┐  ┌──────────┐  ┌─────────┐  ┌────────┐
browser-> v2ray c -> udp2raw c--- firewall -> udp2raw s-> v2ray s -> server 
└───────┘  └─────────┘  └──────────┘   └──────────┘  └──────────┘  └─────────┘  └────────┘

实现了把 tcp/udp 流量通过 icmp 协议传输来绕过校园网认证防火墙的效果。

实施

按照项目的文档,先部署 v2ray,再部署 udp2raw 即可

v2ray 由于特殊原因,无法给出教程。也可以替换成其他组件,只要能够实现将 tcp 流量通过 udp 传输,效果是一样的。

udp2raw 就按照文档执行就可以了,记得按照文档修改为自己服务器的地址。

1
2
3
4
5
 server 端运行:
./udp2raw_amd64 -s -l 0.0.0.0:40960  -r 127.0.0.1:45984   -k "passwdddd" --raw-mode icmp   --cipher-mode xor  -a

 client 端运行:
.\udp2raw_mp.exe -c -l 127.0.0.1:45984  -r 10.1.1.1:40960 -k "passwdddd" --raw-mode icmp   --cipher-mode xor 

Tips:

  • 运行 udp2raw 之后服务器就不会响应 ping 了,不是服务器挂了
  • 刚开始可能无法连接,重启两个客户端软件即可

效果

最后确实是实现了免登录使用校园网,但是结果只能说是差强人意惨不忍睹。

0b110ef1-899e-42aa-a3ad-5fd761f74daf.png

首先学校给的接口都是百兆的,可能还不是全双工的。工位这里做服务器的,可能是因为同时有上下行,最多只能跑到 50m。然后,icmp 这一层封装+kcp 一层封装,效率不是一般的低,

但是大文件传输的效果好像还行

从校内镜像站下载镜像,速度有 3-4MB/s 速度尚且可以接受

Untitled.png

Untitled.png

重新测了一下,正常情况下的效率也还能接受吧

Untitled.png

可以改进的地方

  • 首先就是 icmp 数据的包装吧,人家的工具最初只是防止 udp 被 qos 的,伪装 icmp 都是次要的功能,被我拿来做主要功能了,效率上面可能没有做的很优。以后有时间可以自己研究一下然后尝试着自己写一下。
  • 其次是 kcp,kcp 其实是应对容易丢包的环境的,网络环境好情况下时候还可能会有副作用,不过先不管这么多了,能用就行了。
  • 通过目前的观察,校园网认证防火墙只阻断了出站的连接,尚不清楚有没有阻断入站的连接,如果没有,则可以利用 frp 类似的内网穿透机制实现通信。

总结

总得来说还是一次比较爽的折腾吧,搞的时间短没有拖很久,也确实搞出了一点效果。

帮学校想解决方案

首先,我不是专门搞计网的,实现难度这些的我都不清楚,只是自己觉得理论可行。

为什么要选择性阻断一些协议,搞的这么麻烦,要我搞就直接拉个 vlan。所有没有认证的用户都在一个独立的 vlan 里面,vlan 内只有该用户和认证服务器,认证成功之后再把用户切换到业务的 vlan 里面。用户认证之前,顶破天也只能和认证服务器通信,难倒能在认证服务器上打个洞?完美解决任何绕过方案(傻笑)。

Licensed under CC BY-NC-SA 4.0