建立DNS隧道绕过校园网认证

因为之前在本科的时候破解过校园网三次,主要就是利用其业务逻辑上的漏洞、53端口未过滤包、重放攻击的手段,然后就是一个博弈的过程,这三次加起来用了大概有一年的时间就被完全堵死了,最近又比较需要网络,然后有开始想折腾了,不过这次建立dns隧道虽然是成功建立了,使用正常网络是能够走服务器的dns隧道的,但是并没有成功绕过校园网的认证,至于原因还是有待探查。最后想着还是记录一下隧道建立流程,之后做CTF题可能用得到。

描述

dns隧道相关的描述直接引用参考中文章的一段描述:既然UDP53端口的数据包可以通过网关,那么我们可以在本地运行一个程序将其它端口的数据包伪装组成UDP53端口的数据包,然后发送到本地域名服务器,那么网关就不会进行拦截了,数据包就顺利的通过了网关,可是发送出去的数据报如何返回呢?这就需要我们做进一步的设置。接下来我们需要一个VPS(云服务器)和一个域名,我了便于叙述,我给这个云服务器起名为V,域名起名为Y。我们伪装的DNS数据包要查询的域名就是Y,本地域名服务器接收到这个伪装后的数据包后,由于它无法解析这个域名Y,便将数据包进行转发,让能够解析Y的域名服务器进行解析,接下来我们将Y设置一个NS记录,用来指定Y由哪个域名服务器来进行解析,我们指定的域名服务器就是前面提到的V,所以接下来数据包会被发送到V中。此时我们在V中运行一个程序,对伪装的数据包进行还原,还原后的数据包再发送出去,这样当V接收到响应数据包后,V上运行的程序会再次对其进行伪装,伪装成一个DNS响应数据包,这个DNS响应数据包会沿着上述相反的路径发送回我们的计算机,我们的计算机再次对这个DNS响应数据包进行还原,到现在,我们真正想要得到的数据包已经到手了。

服务端

假设此时有一个example.com的域名,服务器的ip地址为111.111.111.111。接下来要对域名进行解析,增加一个NS记录以及一个A记录,新增NS记录的名称为dns.example.com,值为dnsserver.example.com,新增A记录的名称为dnsserver.example.com,值为ip地址即111.111.111.111

类型  名称                    值
NS dns.example.com dnsserver.example.com
A dnsserver.example.com 111.111.111.111

之后在服务器执行以下命令。

$ tcpdump -n -i eth0 udp dst port 53

然后随便找一台机器进行dns查询,然后在服务器的终端就能够看到查询的信息了。

$ nslookup dns.example.com
...
19:09:01.810846 IP 222.222.222.222.54346 > 111.111.111.111.53: 6858 [1au] A? dns.example.com. (57)
...

我的服务端使用ubuntulinux发行版,直接使用包管理器安装dns2tcp

$ apt install dns2tcp

接下来需要配置一下dns2tcp

$ vim /etc/dns2tcpd.conf
listen = 0.0.0.0
port = 53
# If you change this value, also change the USER variable in /etc/default/dns2tcpd
user = nobody
chroot = /tmp
domain = dns.example.com
resources = ssh:127.0.0.1:22

执行如下命令即可启动dns2tcp,其中参数-f /etc/dns2tcpd.conf指定了配置文件,-F要求程序在前台运行,-d 2指明了输出调试信息,级别为2,为首次运行,我们加上参数-F-d 2,另外如果需要保持前台运行且输出日志信息的话,nohubscreensystemctl都是可行的,维持终端进程后台运行就不再赘述。

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
19:31:49 : Debug socket.c:55	Listening on 0.0.0.0:53 for domain dns.example.com
Starting Server v0.5.2...
19:31:49 : Debug main.c:132 Chroot to /tmp
11:31:49 : Debug main.c:142 Change to user nobody

客户端

在服务端只需要开启一个终端,客户端需要保持两个终端,首先我们建立一个链接通道,在客户端也需要下载dns2tcp,在这里我直接使用brew安装。

$ brew install dns2tcp

紧接着需要启动通道,至此第一个终端连接已经完成。

$ dns2tcpc -l 8888 -r ssh -z dns.example.com 111.111.111.111
Listening on port : 8888

紧接着我们需要借助ssh开启一个socks4/5通用代理,这也就是第二个终端需要完成的任务,相当于完成了一个ssh连接,同样也是需要账号密码或者私钥的,执行下面的命令即可在127.0.0.1开启一个端口为1080socks代理。

$ ssh -D 127.0.0.1:1080 root@127.0.0.1 -p 8888

之后就是使用代理了,可以为全局进行代理也可以近为一些软件启用socks代理连接,在此本地进行了简单的测试。

$ curl https://www.baidu.com --proxy socks5://127.0.0.1

可以看到服务端有大量的输出。

...
Debug queue.c:240 Flush Write 72 bytes, crc = 0x40c5
Debug queue.c:300 Flushing outgoing data
Debug queue.c:642 Packet [646] decoded, data_len 0
Debug queue.c:653 diff = 21
Debug queue.c:300 Flushing outgoing data
Debug queue.c:642 Packet [647] decoded, data_len 24
Debug queue.c:653 diff = 21
Debug queue.c:240 Flush Write 24 bytes, crc = 0xd739
Debug queue.c:300 Flushing outgoing data
Debug queue.c:642 Packet [648] decoded, data_len 0
Debug queue.c:653 diff = 21
Debug queue.c:300 Flushing outgoing data
...

要注意的是无论是本地的终端还是服务器的终端都需要保持其运行才能继续正常使用,毕竟如果终端掉了进程结束了也就不存在封包解包的操作了,另外实际使用速度还是比较感人的,毕竟其有大量的封包拆包操作。

最后

最终还是没能成功实现想要的功能,最后使用dnslog探查了一下实际上是有dns查询的,还是需要研究一下究竟是什么阻拦策略导致没有完成隧道的建立。想来三级域名的A记录其实是可以携带一点信息的,即abc.example.com可以携带abc这个信息过去。此外还有一个终极大招,直接物理方案解决,毕竟AP可是在宿舍里边的。

参考

http://0sec.com.cn/2018-08-05/
http://blog.dengxj.com/archives/14/
https://www.cnblogs.com/nkqlhqc/p/7805837.html
https://blog.csdn.net/wn314/article/details/81430554
https://blog.csdn.net/m0_53129012/article/details/111173610
https://blog.csdn.net/miaomiaodmiaomiao/article/details/50883764

建立DNS隧道绕过校园网认证的更多相关文章

  1. DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网

    我自己的命令: server端: dns2tcpd -F -d 1 -f ./dns2tcpd.conf 输出: 09:08:59 : Debug options.c:97 Add resource ...

  2. dns隧道 dns2tcpd

    有些网络的防火墙设置只允许端口53的UDP流量,就不能通过tcp搭建隧道,这种情况下我们可以通过UDP搭建DNS隧道,通过搭建一个DNS服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...

  3. 绕过校园网WEB认证_dns2tcp实现

    相信很多高校学生都有用WEB认证方式接入校园网的经历 拿我所在的大学为例,我们大学的校园网由联通公司承建,当我连上寝室的无线路由器后,浏览器会自动弹出一个由卓智公司开发的认证界面,如下图: 如果买了联 ...

  4. 绕过校园网WEB认证_iodine实现

    这篇文章是对我的上一篇文章"绕过校园网WEB认证_dns2tcp实现"的补充,在那篇文章中,我讲述了绕过校园网WEB认证的原理,并介绍了如何在windows系统下绕过校园网WEB认 ...

  5. 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃

    一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...

  6. DNS隧道和工具

    DNS Tunneling及相关实现 转自:http://www.freebuf.com/sectool/112076.html DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DN ...

  7. dns隧道攻击原理及常用工具流量分析

    DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术.虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP.UDP通信大量被安全设备拦截的大背景下,DNS. ...

  8. DNS隧道工具iodine

    DNS隧道工具iodine   在受限制的网络中,如果DNS请求没有被限制,就可以通过DNS请求建立隧道而突破网络限制.iodine是Kali Linux提供的一款DNS隧道工具.该工具分为服务器端i ...

  9. DNS隧道工具dns2tcp

    DNS隧道工具dns2tcp   在很多网络环境中,防火墙会限制出站流量,主机往往只能访问外网主机有限的几个端口,如DNS的53端口.这时,就可以通过DNS请求和响应机制,建立通信隧道.Kali Li ...

  10. DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp

    DNS隧道之DNS2TCP使用心得教程 转自:http://blog.creke.net/750.html DNS2TCP是在上次DNS隧道大检阅时提到的一个DNS隧道. 在2010年6月的更新(也是 ...

随机推荐

  1. [转帖]TiKV & TiDB相关笔记

    https://www.jianshu.com/p/1141be233bb2 一.TiKV存储 简述 通过单机的 RocksDB,TiKV 可以将数据快速地存储在磁盘上:通过 Raft,将数据复制到多 ...

  2. [转帖]Kafka之ISR机制的理解

    Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失. 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同 ...

  3. 【转帖】Linux 系统双网卡绑定 bond的7种模式

    第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)第二种模式:mod=1,即: (active-backup) Active-backup ...

  4. [转帖]20191022-从Jenkins NativeOOM到Java8内存

    我把老掉牙的Jenkins升级了,它跑了几天好好的:后来我有一个python脚本使用JenkinsAPI 0.3.9每隔2.5分钟发送约300余get请求,结果过了3天,它就挂了:当我开两个脚本时,4 ...

  5. [转帖]【redis】redis各稳定版本特性(更新到6.0版本)

    1.Redis2.6 Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下: 1)服务端支持Lua脚本. 2)去掉虚拟内存相关功能. 3)放 ...

  6. 京音平台-一起玩转SCRM之电销系统

    作者:京东科技 李良文 一.前言 电销是什么?就是坐席拿着电话给客户打电话吗?no no no,让我们一起走进京音平台之电销系统. 京音平台2020年初开始建设,过去的两年多的时间里,经历了跌宕起伏, ...

  7. NOI Linux 下 Geany 配置教程

    没有括号补全? 现在有自动括号补全了! 红色的 a.cpp 的意思是 a.cpp 没有保存. 现在来设置编译运行的快捷键. 不难推测 "%e" 是可执行文件的意思,"%f ...

  8. vite配置开发环境和生产环境

    为什么需要境变量的配置 在很多的时候,我们会遇见这样的问题. 开发环境的接口是:http://test.com/api 但是我们的生产环境地址是:http://yun.com/api 此时,我们打包的 ...

  9. .net fromwork连接rabbitmq发布消息

    1.创建连接工厂类 var factory = new RabbitMQ.Client.ConnectionFactory() { HostName = "120.237.72.46&quo ...

  10. P7900 [COCI2006-2007#2] SJECIŠTA_题解

    [COCI2006-2007#2] SJECIŠTA_题解 rt 我们来看一下题目描述 考虑一个有 \(n\) 个顶点的凸多边形,且这个多边形没有任何三个(或以上) 的对角线交于一点. 这句话什么意思 ...