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

目录

引言

实验目的

实验内容

基础知识

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.youkuaiyun.com/qq_45300786/article/details/110943803

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MXi4oyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值