通过ICMP实现C2通信
Darin Roberts //
在之前的博客中,我已经展示了如何获取各种C2会话。在这篇博客中,我将展示如何通过ICMP进行C2通信。首先,什么是ICMP?ICMP是互联网控制消息协议。它允许互联网连接的设备在遇到数据包传递问题时向源IP地址发送错误消息。这听起来像是一个非常有用的协议,确实如此。但是,它对攻击者也同样非常有用。似乎几乎所有可以用于好的方面的事物也可以并且被用于坏的方面。ICMP也不例外。
为了设置我们的会话,我们需要下载几个文件。第一个文件将在攻击机器上运行。您可以在这里下载:https://github.com/inquisb/icmpsh。我刚刚在我的Kali机器上克隆了它。第二个文件是一个PowerShell脚本,我们将在受害者机器上运行。您可以在这里下载脚本:https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellIcmp.ps1。
在我的攻击机器实例上,我克隆了icmpsh。
为了让我的ICMP C2工作,我必须禁用基于机器的ICMP。我能够使用以下命令来完成这个操作。
然后我运行了python脚本来启动我的监听器。
如您所见,为了让脚本运行,我们需要给它我们的源IP和目标IP。
如您所见,什么都没有发生。这是因为我们的客户端还没有设置好。转到上面提到的GitHub仓库并保存原始代码。
现在我们有了PowerShell代码,我们需要将其传输到受害者计算机。当然,有无数种方法可以做到这一点。我不会详细说明如何在实践中做到这一点,由于这只是一个试验,我只是复制了过去。
现在我的脚本准备好了,我将运行它。这是一个PowerShell脚本,所以我需要获取一个PowerShell命令提示符。
现在我们有了PowerShell提示符,我需要运行我的脚本。我将导航到我放置文件的位置并运行以下命令。
然后我被要求输入我设置的监听器的IP地址。
当我运行命令时,脚本运行,并且我在Kali上启动的监听器连接了。这几乎就像魔法一样!
您可以在屏幕截图的底部看到,我有来自Windows机器的PowerShell命令提示符。现在我可以运行任何命令,就像我在受害者的计算机上一样。
那么,使用ICMP作为C2方法的好处是什么?所有通信都被注入到ICMP数据包中,包括请求和响应。因为所有流量都在ICMP数据包中,所以基于代理的防火墙无法检测到该流量。这并不是说这些连接无法被检测到,但它们可以绕过一些防火墙规则。