You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
---
layout: post
title: 绕过Portal认证的另一个想法
tags: [WiFi, Portal, 认证, 绕过]
---
也许反弹还是挺好用的?<!--more-->
# 起因
前段时间, 我换了宿舍。待了一段时间之后我发现在新宿舍里比旧宿舍里多了一些WiFi, 比如CMCC-EDU啥的。原来我们宿舍除了自己的WiFi就再没有别的了, 那这个新的WiFi就引起了我的注意力。
我很久以前也研究过类似的WiFi, 这种WiFi通常不使用密码验证, 而是使用Portal验证。这种验证更加的自由, 所以很多公共区域的WiFi都使用的是这种方式。但是这种验证有一个很大的缺陷, 那就是正常来说用密码的WiFi, 即AP的密码算是在第一层, 也就是物理层上做的验证, 通常物理层验证还是很难破解的, 毕竟这就相当于把网线剪了, 再厉害的黑客也没办法, 通常也只能靠些什么旁路攻击之类乱七八糟的歪门邪道, 不如直接接入网络直接干合适。
所以呢, 当我可以直接接入WiFi时, 不管怎么说, 这都相当于我已经直接用网线直连到了这个网络中, 然后只要想办法绕过认证服务器就可以。不过这么说也不是很准确, 因为大多数人配交换机不会配的很严格, 但是AP还要特地开个AP隔离就比较恶心。
通常来说, 这个所谓的认证服务器也不过是一个二级的防火墙, 通常就是通过认证的设备就在出站白名单里加上这个MAC地址, 这样这个设备就可以正常上网了。
# 绕过的思路
绕过Portal认证的方法网上大多数是给的通过DNS隧道来绕过, 因为大多数的这种服务器都不会自己写的DNS, 而是用已经很成熟的软件, 所以通常解析都不会受到影响。根据这一点, 很多人就想出了使用DNS作为隧道来达到免费上网的目的, 一般来说有两种方法, 第一个是防火墙完全不封DNS的情况, 也就是对UDP 53端口完全不设限的情况, 这种情况直接搭一个使用UDP的任意隧道都可以。
还有一种是只允许使用DHCP分配的DNS服务器, 一般也为了考虑到认证通过后能正常上网, 所以解析都是正常的, 考虑到DNS的特点, 我们可以给自己服务器设置一个NS解析, 这样我们就能拿被指定的这个DNS服务器作为跳板来和远程的服务器通信了。不过这个就不能随便选择软件了, 需要用能伪装成DNS流量的软件来搭隧道, 比如dns2tcp之类的就可以。
其实吧那个CMCC-EDU我试过, 确实解析是没有问题的, 正好Github之前还给我送了一年[mayx.me](https://mayx.me/)的域名,我回头有机会我试试看能不能建立隧道吧。
# 另一个想法
上面的方法虽然很不错, 但是太常见了, 网上基本上搜怎么绕过Portal认证基本上都是这些办法, 比较没意思, 而且一般来说现在新的厂家应该都封掉了这个办法吧? 毕竟只要给指定的DNS上面也加一个认证, 必须是通过认证的设备才能正常解析, 或者是像中国防火长城一样来一波DNS污染, 这样DNS隧道就不能正常工作了。所以学了些网络知识的我有个不成熟的想法, 那就是这种防火墙一般拦截的是出站, 会不会不拦截入站?
事实上我还试了一下, 那个CMCC-EDU很神奇的居然分配的是公网IP, 所以我就试了试去ping连接的设备, 想不到也可以ping成功, 不过也可能只是防火墙没有拦截ICMP, 具体因为我没待几天就回家了, 有了这个想法也只是简单的做了几个测试而已, 所以我也不是很清楚。不过没关系, 如果没拦截ICMP也可以用ptunnel搭ICMP隧道。
不过如果入站真的没有防火墙, 那么我可以试试主动连接的隧道, 用起来有点像反弹。具体怎么搭这种隧道如果用的是Linux系统的设备可以看[怎么搭SSH隧道](/2021/05/07/ssh.html), 不过我这次实验想用frp来搭, 也就是连接CMCC-EDU的设备打开frps, 然后找个能连外网的服务器用frpc连进来, 在配置段中加入:
```
[socks_proxy]
type = tcp
remote_port = 1080
plugin = socks5
```
最后就直接用`127.0.0.1:1080`这个隧道上网就可以了, 如果是Windows设备的话用Proxifier来上网效果还是相当不错的。不过我目前在家里不好试, 等我开学了回宿舍试试看。
# 局限性
像这个方法也只能说是特定情况的另一种可能性吧, 因为限制也是蛮多的, 首先大多数Portal认证的WiFi不可能给一个公网IP, 想要反弹至少要在同一个网络中, 就这个限制就挺严格的, 可能也就校园网可以用, 另外就是不开入站防火墙也可能只是疏忽, 万一管理员开了这个办法也不行, 这也只能靠赌, 也并不怎么好使, 所以说这也就只是另一个想法, 看以后如果真的遇到了类似的问题看怎么解决吧。
不过我确实也没接触过真正严格的网络,像那种极其严格的公司网络我也没见过,也许到时候如果有机会见一见的话就不会觉得这种垃圾防火墙算什么事情了吧😀。