突破校园网的认证限制
突破校园网的认证限制
0x01 事情起因
事情是这样的,我一大早来到教室不想学汇编,由于之前在搞ipv6,开始就ipconfig查看自己的ipv6,然后我ping了一下buucoj.cn,让我感兴趣的是他的ipv6,但是在ping的过程中,我发现自己ping不同,开始疑惑以为是限制了他们那一方限制了ping命令,然后打开该网站这才想起自己未认证校园网,这时候才开始思考未认证校园网为什么可以得到dns记录,我以为是缓存,可是电脑才开机,带着疑问我去随意ping 了一个dn1.com,
图 1-1ping buu
结果如下
显然我的电脑是不可能带有dn1.com的缓存(我甚至不知道这个网站真实存在),最后在网上找到了相关的论述,网上说是有一个入口设备在未认证的时候导向校园网的认证页面,直到认证完成,然后才让你的数据通过,但是dns数据是可以通过的,既然数据是可以传出去,还能传回来,那么我肯定可以利用这一点,于是我去网上搜索了相关文章,网上有很多的利用dns隧道技术突破校园网的限制,文章附上
0x02 预备知识
硬件要求:需要服务器一台,域名一个,电脑一台。
我们假设读者对DNS有最基本的了解,若不了解可先阅读《百度百科:DNS》。这里要介绍的是NS记录。网上百度得到的是一下内容
NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析,如果我们在记录添加了一NS记录,那么我们访问该域名的时候,他会让我们去访问指定的域名服务器,如果这个域名服务器是我们自己,那么我们就能和服务器通讯,因为一般的DNS查询机制不会经过我们的服务器,一般在权威服务器查到了就返回,添加NS服务器的目的在于让DNS查询经过我们服务器。
0x03 开始搭建
1、域名解析
搭建的开始我们需要确定我们已经 有了一台服务器,我用的是ubuntu的服务器,以及一个域名,rao2357.top.
在配置DNS的时候加上一条NS记录,同时加上一条A记录,
添加NS记录,记录名称是aaa.dns.rao2357.top,值为dns.rao2357.top
添加A记录,记录名称为dns.rao2357.top,值为119.3.208.71
NS的值和A记录是名称要对应,A记录的值是自己公网的IP,NS的记录名称等会会用到。当某个主机想知道aaa.dns.rao2357.top的时候,会去访问dns.rao2357.top,然后这个值指向自己,如果自己搭建了DNS那么是可以应答的。
在服务器运行如下命令
1 | tcpdump -n -i eth0 udp dst port 53 |
TCPDump可以将网络中传送的数据包完全截获下来提供分析,-n 不进行IP地址到主机名的转换,-i 选择过滤的网络接口,这里选择的是eth0网卡,udp协议,目的端口是53的数据包。
在电脑中运行如下命令
1 | nslookup aaa.rao2357.top |
nslookup aaa.rao2357.top,这时候,如果不指定DNS服务器,一般是默认的服务器,我们用ping 命令也是异曲同工的。
这个时候服务器端就会出现如下命令,说明NS和A记录生效了,拦截到了目的端口是53的流量。
二、服务器端配置
1、安装配置dns2tcp
在服务器上运行安装命令
1 | sudo apt-get install dns2tcp |
或者是在centos安装,但是centos是没有这个包的,去编译运行他,win编译。
dns2tcp是一款在linux下使用C语言开发的建立dns隧道的开源工具,项目开源地址:https://github.com/alex-sector/dns2tcp
修改/etc/dns2tcp.conf
1 | listen = 192.168.0.29 |
listen需要改成服务器内网地址,因为这里的如果填的是0.0.0.0,那么会绑定端口失败,因为有一个系统服务systemd-resolve会占用这个服务用于自己的dns解析服务。
安装配置dante-server
现在让我们来搭建一个socks代理。我选择使用dante-server来搭建。首先安装它,命令如下:
1 | apt-get install dante-server |
安装完成后打开配置文件“/etc/danted.conf”,将其中内容修改为:
1 | logoutput: /var/log/sockd.log |
一般修改配置文件都先做好备份,不然很容易搞炸。我们现在看到的配置文件配置了一个监听端口7777的socks代理,无身份认证,允许任何客户端连接
客户端我们用的是windows,但是dns-tcp是没有windows的,我们从网上找到源码进行编译,点击查看教程:win编译。
0x04 搭建隧道
首先在服务器上运行如下命令来启动socks代理:
1 | /etc/init.d/danted start |
然后在服务器上运行如下命令来启动dns2tcp的服务器端:
1 | dns2tcpd -f /etc/dns2tcpd.conf -F -d 2 |
其中参数“-f /etc/dns2tcpd.conf”指定了配置文件,“-F”要求程序在前台运行,“-d 2”指明了输出调试信息,级别为2。作为首次运行,我们加上参数“-F”和“-d 2”。
最后,在办公电脑(客户端)上运行如下命令以建立DNS隧道:
1 | ./dns2tcpc -r socks -z aaa.dns.rao2357.top -l 8888 -d 2 |
其中参数“-r socks”指明了要连接的资源,“-z aaa.dns.rao2357.top”指明了建立DNS隧道使用的域名,“-l 8888”指明了隧道的这头监听的端口,“-d 2”的作用和服务器端相同。
要持续运行服务器的dns2tcp需要将其放入后台进程
创建screen会话 screen -S dns2tcpd
启动dns2tcp sudo dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
暂时离开快捷键 Ctrl + a + d
恢复screen会话 screen -r dns2tcpd
列出当前的会话列表 screen -ls
强行终止dns2tcp进程 screen -S dns2tcpd -X quit
最后我们可以在windows的火狐打开网络配置
设置好我们的代理端口为本地的8888端口,选择socks5。
可以看到本地cmd中显示以上内容,说明我们已经有数据进行传输了。
然后我们百度当前的IP
我们的IP变成了我们的服务器IP,然后我们注销校园网认证账号。
可见我们是能够继续访问的。
同样我们可以设置系统代理,不局限于浏览器突破限制
或者专门的QQ代理
不过以上实现的DNS隧道速度不快,有待改进。不过一步步的学习总归是学到了一点东西, 还好我没有放弃思考问题。不过校园网认证系统存在的这个漏洞虽然不具有安全危害,但是也背离了认证的意义,使得干坏事的人有更隐蔽的手段。