“ 本文主要研究在Windows平台下的 ICMP 隧道的简单开发和部署使用。”
本文适合了解ICMP隧道基础的安全编程爱好者,可以通过百度、谷歌或在微信公众号中搜索“ICMP隧道”了解该内容。
01
—
ICMP协议简介
ICMP协议是TCP/IP模型中的网络层协议,既不属于TCP协议,也不属于UDP协议,没有端口号的概念,通常用于探测网络是否通畅。Ping 命令就是 ICMP协议实现的一个案例。
02
—
ICMP隧道简介
红队攻击者通常利用ICMP数据包传输隐蔽信息,比如建立C2信道,俗称ICMP隧道,该隧道比较隐蔽。
03
—
ICMP隧道优缺点
优点:
防火墙对 ICMP_ECHO 数据包通常是放行的,并且一般情况下,内部主机不会检查 ICMP 数据包所携带的数据内容,所以隐蔽性比较高;
缺点:
ICMP 隧道是无连接的,和 UDP 一样很不稳定,而且隐蔽隧道的带宽很低;
04
—
ICMP隧道项目
下面介绍一个简单的ICMP隧道开发项目,可用于上传或下载文件。
项目链接:https://github.com/bigbang95/icmp_tunnel。
项目使用C++语言编写,封装了CicmpClientSocket、CicmpServerSocket 等数据传输类,操作简单易懂。
可直接使用 VS2019 编译器 Release x64 方式编译即可。
05
—
Windows 下 ICMP 隧道服务端系统配置
Windows 防火墙新建自定义ICMP入站规则
【实验环境:Windows 10 - 20H2】
1. 点击新建规则
2. 设置规则类型
3. 设置程序(一定选“特定程序”,不能选“所有程序”,否则ICMP隧道会因为出问题,而不能使用)
4. 设置“协议和端口”
5. 设置“作用域”
6. 设置“操作“
7. 设置“配置文件”
8. 设置“名称”
9. 到此,已成功新建并启用了自定义ICMP入站规则。
06
—
ICMP隧道部署
一、服务端(VPS)设置,通常是控制端
启用 Windows 防火墙;
禁用入站规则:文件和打印机共享(回显请求 - ICMPv4-In);
新建并启用“ICMP自定义”规则(注意:配置为”指定程序“,而非”所有程序“);
二、客户端设置,通常是被控端
无需特殊设置;
三、运行程序
在服务端(VPS)Windows 中,管理员权限运行 server.exe;
在客户端(局域网)Windows 中,直接普通用户权限运行 client.exe;
四、开始测试ICMP隧道
07
—
注意事项
服务端程序必须以 “嗅探” 的方式,绑定指定网卡;
bind IP 地址不能是 0.0.0.0,必须是具体的 IP 地址,如:192.168.204.128;
如果 bind IP 地址是 0.0.0.0,WSAIoctl 函数 返回错误代码:10022,即 Invalid argument;
使用 Windows 作为 服务端 的系统时,(注意:是设置 “入站” 规则)
Windows 防火墙应 新建并启用 “自定义 ICMP 入站规则”,方法见上面的 “05 Windows 下 ICMP 隧道服务端系统配置”,而不应使用 规则 “文件和打印机共享(回显请求 - ICMPv4-In)”,此规则应该被禁用;
位于服务端的 Windows 系统,设置防火墙时,需要 重点 注意:
1. 关闭 Windows 防火墙,会使 系统 自动应答 ping 命令 请求包;
2. 启用 Windows 防火墙,但使用 “文件和打印机共享(回显请求 - ICMPv4-In)” 或 “自定义 ICMP 规则 配置为 所有程序”,均会使 系统 自动应答 ping 命令 请求包;
解决方案:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-10-24 11:47
被bigbang95编辑
,原因: