关于破解联通校园宽带限制终端数量的探究

Frank发布

近期(2017年7月)有多所学校升级了联通光纤的系统,本文所述方法在升级后的系统中已经不再有效。
经抓包得知,认证的方法变为:

  • 客户端用http请求一个接口
  • 服务器返回一个json,里面包含一个6位数字的pin
  • 通过pppoe拨号,用户名和以前一样,密码是那6位数字加上用户自己的密码。

这样一来,无论采用方案A还是方案B,都需要一个OpenWrt/Padavan的路由器来完成。
我写了如下的脚本通过下文所述的方案B来实现自动登录,在北京部分学校已测试可用。如果你使用Padavan,请切换至padavan分支。

https://github.com/nyanim/wo201-autologin


今年学校新装的死妈的联通光纤,每个账号独享10M带宽,但是每个账号限制两台终端同时登陆,一台电脑,一台手机。以前全宿舍6个人共用一条8M ADSL从此成为历史。

网络大概是这样的,其中路由器工作模式为路由模式的动态ip方式。

光猫←路由器←─┏─Portal认证←手机

………………………….┗─PPPoE     ←电脑

正常的上网姿势

PC

要在电脑上上网的时候,需要使用联通的客户端进行拨号,其中限制终端数量,及限制承载网络的功能都由这个客户端来实现。

这个客户端最恶心的地方在于,它会把电脑中所有活动的网卡,包括虚拟的和物理的,都当做一个终端来对待。比如我想要在电脑上连接AnyConnect,这时AnyConnect的虚拟网卡就会被认为是新接入的一个终端,随即联通客户端提示超过两个有效终端,并且自动断开互联网连接。如果在电脑上启动承载网络,包括但不限于小度WiFi,猎豹免费WiFi、Connectify,联通客户端同样也会提示发现承载网络,随即将连接断开。

但是,虽然此客户端的本质就是一个PPPoE客户端,但是我并不能使用我的用户名密码直接在电脑上用Windows自带的拨号器进行拨号,否则会报691错误,也就是用户名/密码有误。经过这篇文章 使用 PPPoE 代替流氓的联通宽带客户端进行 ADSL 拨号上网 的启发,我意识到确实可能是因为真实的PPPoE密码并不是联通给我的用户名密码,而是经过客户端处理过的。

移动终端

要在手机上上网时,只要随便打开一个http的url,然后请求会被劫持至联通的Portal认证页面。在认证页面里填入用户名和密码,认证服务器即会对此设备授权。
由于服务器仅靠UA来识别该设备是手机还是电脑。所以如果将电脑上的浏览器改成手机的UA(使用Chrome的调试器即可),同样可以完成认证。这样做的好处是不会有对网卡和承载网络的限制。所以可以放心开承载网络中继给其他设备使用。这是一个最基本的解决方案。


作为一个一向痛恨运营商的流氓行为的人,当然不会就此停止。我的目标是没有蛀牙能够像使用家庭宽带那样,只使用一个路由器经由光猫连向互联网,无论我的路由器下面挂了多少设备。

另外据说有些地方的运营商使用一种叫做网络尖兵的东西,通过检测数据包指纹的方式来判断接入的终端数量。如果那样的话,本文所述的方法都无能为力,请自求多福。不过我没有听说过北京联通有部署这样的设备。

如何破解?

方案A:

上文说过,真实的PPPoE密码并不是联通给我的用户名密码,而是经过拨号客户端处理过的。PPPoE的认证使用的是PAP,所以可以用WireShark抓包抓出明文的用户名和密码。

方案B:

在OpenWRT上使用curl或者python脚本,假装自己是手机浏览器去完成Portal认证,然后将获得授权的以太网和无线AP这两个interface桥接即可。

方案1更加简单,因此优先尝试它。

方案A

使用联通客户端拨号,与此同时用WireShark进行抓包,结果如图:

Image 101

由图可得,真实的用户名是联通提供的用户名(8位数字)后面加上 @wo201
真实的密码则是你自己设置的密码前面加上 \001

这里开始我的思路出现了偏差。我看着那个莫名其妙的\001不知所措。而且实际的密码长度跟Password-Length里写的也不太一样。

直到有一天我跟朋友聊天的时候,他提到他有一个同学也做了跟我一样的事情,但是他成功找出了那个奇怪的编码是ASCII。

通过查找ASCII字母表得知, \001SOH,Start Of Header的意思。

Image 117

设置路由器的时候只需要把路由器设置为路由模式,上网方式选择pppoe。用户名为8位数字的用户名,后面加上@wo201。比如23333333@wo201。

在Sublime Text里打出ASCII的 SOH字符,在后面输入自己设置的密码,然后全选并复制,粘贴进密码那栏里。 SOH字符你也可以在这里:https://git.guoduhao.cn/gdh/soh下载到。

注意并不是所有路由器都能识别这种非法的字符,我的TP-Link路由器亲测没有问题。

然后就可以愉♂快地上网了

方案B

期间我试图尝试方案B,但是进展并不多:

首先用WireShark抓出认证时的HTTP包,如图:

Image 113

然后使用curl来发送一个相同的HTTP请求,curl的参数请自行查询文档。

如果返回内容为 {"msg":"login success","obj":null,"success":true}则表示成功。


7 条评论

人似秋鸿 · 2015 年 10 月 1 日 下午 8:16

MIUI Browser 2.1.1 MIUI Browser 2.1.1 Android 4.4.4 Android 4.4.4

你那位朋友真是太机智啦,我和楼主栽在一个地方

Asimov · 2016 年 9 月 5 日 下午 4:27

Google Chrome 52.0.2743.116 Google Chrome 52.0.2743.116 Windows 10 x64 Edition Windows 10 x64 Edition

以相同思路企图破解武汉宽带的终端限制,折腾了几个小时发现武汉用了更先进的PPP-CHAP认证方式,哭瞎。。。
求PPP-CHAP破解方式

    Frank  Mod · 2016 年 9 月 9 日 上午 8:51

    Google Chrome 55.0.2846.4 Google Chrome 55.0.2846.4 Windows 10 x64 Edition Windows 10 x64 Edition

    chap是加密的,那可能确实比较麻烦吧。google了一下没找到有太大用的信息。

      Asimov · 2016 年 9 月 10 日 上午 8:15

      Chrome 53.0.2785.86 Chrome 53.0.2785.86 iPad iOS 9.3.5 iPad iOS 9.3.5

      是啊,这个是三次握手认证协议,每次都要双方验证随机MD5值,简直是变态。技术上没法实现,最后通过投诉还是把问题解决了,哈哈。
      感谢博主又让我学到了东西。

        Frank  Mod · 2016 年 9 月 10 日 上午 10:38

        Google Chrome 52.0.2743.91 Google Chrome 52.0.2743.91 Android 7.0 Android 7.0

        投诉竟然解决了。可以可以

Fenng在路上 · 2016 年 10 月 22 日 上午 11:48

Safari 10.0 Safari 10.0 Mac OS X  10.12 Mac OS X 10.12

抓出包来发现是PPP-CHAP认证方式,已哭瞎

    Frank  Mod · 2016 年 10 月 22 日 下午 5:55

    Google Chrome 55.0.2883.9 Google Chrome 55.0.2883.9 Android 7.0 Android 7.0

    太惨,试试投诉吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha *

%d 博主赞过: