DNS tunnel的原理及实战
DNS tunnel的原理及实战
摘自:http://netsec.ccert.edu.cn/zhengming/2011/11/01/%E8%BD%AC%E8%BD%BD%EF%BC%9Adns-tunnel%E7%9A%84%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E6%88%98/
什么是DNS tunnel?
DNS tunnel 即 DNS隧道。从名字上来看就是利用DNS查询过程建立起隧道,传输数据。
为什么使用DNS tunnel?
当你在酒店、机场等公共场所,通常有Wifi信号,但是当你访问一个网站时,如http://hi.baidu.com/, 可能会弹出个窗口,让你输入用户名、密码,登陆之后才可以继续上网(该技术一般为透明http代理,不在本文讨论范围之内,以后再讲)。这时,你没有账号,就无法上网。但是有时你会发现,你获取到得DNS地址是有效的,并且可以用以进行DNS查询,这时你便可以用DNS tunnel技术来实现免费上网了!
DNS tunnel的原理
首先,要知道DNS系统的工作原理,见:[DNS系统(服务器)的工作原理及攻击防护方法论] 。你在做 DNS 查询的时候,如果查的域名在 DNS 服务器本机的 cache 中没有,它就会去互联网上查询,最终把结果返回给你。如果你在互联网上有台定制的服务器。只要依靠 DNS 的这层约定,就可以交换数据包了。从 DNS 协议上看,你是在一次次的查询某个特定域名,并得到解析结果。但实际上,你在和外部通讯。你没有直接连到局域网外的机器,因为网关不会转发你的 IP 包出去。但局域网上的 DNS 服务器帮你做了中转。这就是 DNS Tunnel 了。
上 图简单介绍了DNS tunnel的原理。当你连接上wifi后,你可以使用DNS服务器,向这个服务器的53端口发送数据,请求一个域名,比如b.xxx.org 。这台DNS服务器上没有b.xxx.org,那么它将向root,也就是根域名服务器请求,看看根知道不。root一看是.org的域名,就交 给.org域名服务器进行解析。.org的域名服务器一看是.xxx.org那么就会去找.xxxi.org的域名服务器 (f1g1ns1.dnspod.net),看看它有没有这条记录。.xxx.org的域名服务器上一看是b.xxx.org,如果它有这 条A记录,那么就会返回b.xxx.org的地址。
但是,如果没有,你可以再在guanwei.org的域名服务器上设定一个NS 类型的记录人,如:xxx.org NS 111.222.333.444(通常这里不让设置为地址,那么也好办,你可以先在DNS服务器上添加一条A记录,如ns.xxx.org 111.222.333.444,再添加NS记录:guanwei.org NS ns.xxx.org),这里指定一个公网服务器,也就是上图绿色的服务器,这台服务器中跑着DNS tunnel的server端,是一台假的DNS服务器,他不会返回b.xxx.org的地址,但是它会将你的请求转发到已经设定的端口中,比如 SSH的22端口,22端口返回的数据它将转发到53端口返回给客户端(也就是你的电脑)。这时,你就可以用这台公网服务器的资源了,如果是一台http 或者sock代理,那么你就可以用这个代理免费上网了。
DNS tunnel实现的工具
DNS tunnel实现的工具有很多,比如:OzymanDNS、tcp-over-dns、heyoka、iodine、dns2tcp。由于BT4、5系统自带了dns2tcp工具。这里仅介绍dns2tcp的使用方法。
DNS2TCP的DNS tunnel实验
环境准备
一个已经申请好的公网域名,在这里我就用本blog的域名了xxx.org。给该域名指定一个DNS服务器(在域名管理的控制面板即可看到),本 环境为DNSpod的服务器:f1g1ns1.dnspod.net。一个公网服务器server(运行着BT4系统,主要使用里面的dns2tcpd V4程序)。这里使用局域网中的一台PC,在防火墙上做端口映射,将UDP的53端口映射出去。公网IP为111.222.333.444一 个客户端client(运行着BT4系统,主要使用里面的dns2tcpc V4程序)。这里模拟在机场的环境,能连接局域网(与上面的服务器不在一个局域网内,是另一个连接公网的局域网),能够获取到DNS服务器,如辽宁网通的202.96.64.68,并可以通过它进行DNS查询(测试方法:nslookup www.xxx.org 202.96.64.68,后面的域名服务器请根据实际情况替换)。
。。。可以让你实现一个反弹木马,可免费上网。
DNS tunnel的原理及实战的更多相关文章
- DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置
DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...
- DNS Tunnel隧道隐蔽通信实验 && 尝试复现特征向量化思维方式检测
1. DNS隧道简介 DNS隧道技术是指利用 DNS协议建立隐蔽信 道,实现隐蔽数据传输.最早是在2004年 DanKaminsky 在 Defcon大会上发布的基于 NSTX 的 DNS隐蔽 隧道工 ...
- iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server
我的命令: server端: sudo iodined -P passwd -f -DD 10.0.0.100 abc.com client端(直连模式,-r表示使用xxx.abc.com的xxx来转 ...
- Keepalived 原理与实战
Keepalived 原理与实战 随着系统架构的逐渐演化,服务器的数量和结构会越来越复杂,例如 Web 服务器集群的搭建,提高了系统的性能,同时也提高了系统维护的复杂度,我们需要对集群中各台服务器进行 ...
- DNS Rebinding漏洞原理
目录 SSRF过滤器设计 背景知识 DNS TTL 公网DNS服务器 DNS重绑定 自建DNS服务器 利用步骤图解 实战中的注意事项 防御 参考 DNS Rebinding 广泛用于绕过同源策略.SS ...
- jQuery源码:从原理到实战
jQuery源码:从原理到实战 jQuery选择器对象 $(".my-class"); document.querySelectorAll*".my-class" ...
- Keepalived原理与实战精讲--VRRP协议
. 前言 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简 ...
- DNS服务基础原理介绍
FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名) FQDN=主机名.域名 根域 . 顶级域名 .com .n ...
- Spark MLlib特征处理:OneHotEncoder OneHot编码 ---原理及实战
http://m.blog.csdn.net/wangpei1949/article/details/53140372 Spark MLlib特征处理:OneHotEncoder OneHot编码 - ...
随机推荐
- IBMWebsphere 使用jar包删除文件
1. 先使用ant打包一个jar包,删除其他不要的目录和文件,仅保留一个空的xxx.war文件夹("xxx"对应was上的工程安装根目录) 2. 在文件夹下新建一个META-INF ...
- Laravel5.1学习笔记6 响应
基本响应 附加头信息到响应 附加Cookie到响应 其他响应 View视图响应 JSON响应 File下载 重定向 重定向到命名路由 重定向到控制器Action 附带闪回Session数据重定向 响应 ...
- angularJS之ng-bind与ng-bind-template的区别
ng-bind-template 指令用于告诉 AngularJS 将给定表达式的值替换 HTML 元素的内容. 当你想在 HTML 元素上绑定多个表达式时可以使用 ng-bind-template ...
- 八:前端---Vue下的国际化处理
1:首先安装 Vue-i8n npm install vue-i18n --save 注:-save-dev是指将包信息添加到devDependencies,表示你开发时依赖的包裹. -save是指将 ...
- Java常用设计模式《转》
设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...
- Matlab数组创建
只用C语言,不用Matlab这种魔咒还是要打破的.Matlab是科学计算的常用工具,既然以前没用过,现在开始学吧...... 1. 向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] ...
- c#如何用代码开启cmd指定命令(如:运行一个手机adb shell命令)
else if (this.Mode == TravelMode.AutoRecodeMode) { DateTime StartDate = DateTime.Now; string args = ...
- 论 fmap、fmap fmap、与 fmap fmap fmap
https://blog.csdn.net/sinat_25226993/article/details/44415803
- C++ (带有默认参数的函数参数)缺省函数参数
缺省参数?在C++中,允许实参的个数与形参的个数不同.在声明函数原型时,为一个或者多个形参指定默认值,以后调用这个函数时,若省略某一个实参,c++则自动的以默认值作为相应参数的值. 实列说明:#inc ...
- List分组的两种方式
java8之前List分组 假设有个student类,有id.name.score属性,list集合中存放所有学生信息,现在要根据学生姓名进行分组. public Map<String, Lis ...