Author:Pax.Mac Team核心--Conqu3r
在OWASP2013的沙龙上,某牛分享了一个好的tips。记录了下来,回来学习了下,然后分享出来,知道这是干什么用的同学,可以学习下。
一、DNS隧道实现原理
DNS隧道技术的实现:主要是通过对DNS查询机制的特殊性来利用的一种技术。DNS的隧道的工作原理:
DNS查询是一种递归查询机制,如果本地没有记录,就会其它服务器发起请求查询结果。然后,在需要认证的ISP或者防火墙,发现过滤规则的请求时,它们就会将查询结果的TCP或者UDP包返回结果内容进行丢弃,保返回域名的查询IP地址。查询方式如下图所示:
也就是说,如果我们的请求数据包中的数据,不含过滤规则时,有限制的ISP或者防火墙则不会进行丢包处理。所以,我们在发起请求时,将请求数据包内容通过标准的DNS协议进行加密,标记解析请求的DNS地址,则有限制的ISP在解析客户端发起的域名请求时,无法识别地址,而去指定的DNS服务器上进行请求查询。此时,我们在指定的DNS服务器上进行数据包解密。再将查询内容返回,此时,有限制的ISP或者防火墙会再次检测内容是否为非认证状态,如果是非认证状态,则将查询结果内容进行丢包处理。所以,在特定的DNS服务器上,我们需要将结果进行标准DNS协议加密返回客户端。此时ISP无法识别结果,而直接返回客户端进行解密处理。这样我们就完成了一次DNS隧道请求,而完全绕过的ISP服务商的认证。加密传输方式数据包如下图:
二、建立DNS隧道的环境需求
1、可以连接有限制的ISP服务商,比如连接CMCC的无线信号
2、需要一台高速的性能较高的安装好java的服务器(当然也可以随便一台国内的就行了,目的是为了提高查询的延迟速度)
3、Tcp-over-dns工具,用来提供客户端、服务器通信加解密操作
4、客户端全局代理工具Proxifier(非必需条件,只是我觉得可以用这个来让本机所有程序都代理上网)
三、实现步骤
1、设置自己的DNS服务器域名
方法a:如果你有直接修改DNS记录的权限,可以在dns记录中加入:
;set up the DNS tunnel
$ORIGIN dnstunnel.analogbit.com.
@ IN NS ns.analogbit.com.
ns IN A
paxmactun.mooo.com NS mypaxmac.mooo.com
mypaxmac.mooo.com A xx.xx.xx.xx(服务器IP)
方法c:直接修改我们购买域名时的DNS解析记录
Dnstun NS ns.paxmac.org
Ns A xx.xx.xx.xx(服务器IP)
2、设置服务器
下载tcp-over-dns软件,执行命令:
Java -jar tcp-over-dns-server.jar –domain dnstun.paxmac.org –forward-port 22(为了服务器安全,端口应设置在1024以下)
必须包含–forward-port参数
3、设置客户端
在需要上网的主机上下载tcp-over-dns软件,执行
Java -jar tcp-over-dns-client.jar –domain dnstun.paxmac.org –listen-port 8888 –interval 100(如果服务器性能较高,可以设置最低数值到5或者10)
4、设置上网
或者直接在全局代理服务器中设置全局代理。这样就可以上网了,不过速度不会很快,毕竟要进行加解密。
方法b:设置两个域名记录,其中一个NS记录,一个A记录