为了展示 netcat 将会使用两台主机。
1. Kali linux 虚拟机
2. Ubuntu vps
Ubuntu vps:
在公网 UBUNTU 上:
这行命令表示监听本机的8888端口。
在 Kali 上:
这行命令表示与公网 ip 为 144.168.*.70的主机进行通信。
在其他基于Debian的操作系统上:apt-get netcat
然后尝试在两边的命令行里面输入命令,结果发现另一个命令行都能看到输出:
Ubuntu:
Kali:
上面就是使用Netcat在远程Ubuntu系统上创建了一个侦听器。然后在本地Kali系统上的端口8888(可以是任何端口)上打开了Netcat侦听器。
在攻击任何系统之前,我们需要尽可能多地了解目标。因此,一旦我们与Web服务器建立了TCP连接,就可以使用Netcat抓住已提供新连接的Web服务器的标识,以识别目标正在运行的Web服务软件。
可以使用HEAD / HTTP/1.0
命令将Banner抓取到Web服务器。请注意并完全按照斜杠和空格进行复制。或者,如果这不起作用,则可以改用 HEAD / HTTP/1.1
。
实验:
先在shodan上面找一个nginx的主机:
然后抓取banner。在我的kali输入:
可以看到抓回的信息显示web服务器是nginx。记得多按几次回车。
再在shodan上面找一个apache的主机:
总之都可以找出它们正在运行的服务器,获取服务器信息。
在公网 Ubuntu 上面输入下列命令,结果报错了:
修复: https://www.fengdingbo.com/netcat-invalid-option-e.html
我自己一不小心把nc删了,重新apt-get install netcat
了一遍就好了。
在kali上面开始监听此Ubuntu vps的6996端口:
在ka
netcat
已经有某个网络软件开启了监听端口,然后用 nc 测试端口是否可达。
需求:要判断某个主机的监听端口是否能连上。
导致监听端口无法连上,通常有两种原因:
1. 这个监听端口根本就【没开启】;
2. 监听端口虽然开启,但是被防火墙阻拦了。
对于第1个原因,(如果我们能在该主机上运行命令)可以直接用netstat
这个命令来查看监听端口是否开启:
使用 netstat 查看正在监听的端口:
当前主机 tcp 开放了哪些端口:
当前主机 udp 开放了哪些端口:
但是对于第2个原因(防火墙拦截了监听端口),netstat
就用不上了,这时候可以用nc来搞定。
nc -nv x.x.x.x xx
(nc -nv IP port)
使用这个命令可以测试某个IP地址(x.x.x.x
)上的某个监听端口是否开启。
选项 -v
-v
选项——通过更详细的输出,能帮你搞明白状况。
选项 -n
由于测试的是【IP 地址】,用该选项告诉 nc,【无须】进行域名(DNS)解析;
反之,如果要测试的主机是基于【域名】,就【不能】用选项 -n
。
在测试链接的时候,如果你【没】使用 -w
这个【超时选项】,默认情况下 nc 会等待很久,然后才告诉你连接失败。
如果你所处的网络环境稳定且高速(比如:局域网内),那么,你可以追加-w
选项,设置一个比较小的超时值。在下面的例子中,超时值设为3秒。
nc -nv -w 3 x.x.x.x xx
-u
选项通常情况下,要测试的端口都是【TCP】协议的端口;如果你碰到特殊情况,需要测试某个【UDP】的端口是否可达。nc 同样能胜任。只需要追加-u
选项。
实验环境:
主机1: 本地 Windows10 主机
主机2:WSL —— Linux 子系统(Ubuntu 18.04)
nc 测试 CLOSE_WAIT 的端口
Windows 主机上 6666 端口处于 CLOSE_WAIT 状态:
WSL 上
Netcat 简称为nc,中文名网猫。网络里的一只猫,可见其灵活性。
nc 是一个【命令行】工具,通过nc,可以很灵活地操纵【传输层协议】(TCP&UDP)。
OSI 7层模型:
划重点!
协议非常重要。比如,在实战中,我们可能遇到一种情况:走 TCP 无法出网、走 UDP 也无法出网,只有 DNS 才能出网。那么 nc 支持这种场景吗?NC 是支持 DNS 的。因为DNS协议位于应用层,而 netcat 操纵的 TCP 和 UDP 是传输层,只要位于传输层之上的协议, nc 就都是支持的。
要做到根据支持的协议划分工具。这样在实战中才能以不变应对万变。
nc 所有的功能,都以命令行的方式呈现。
nc 命令选项 主机 端口
1-1024
。nc 提供了很多【命令行选项】,分别对应它提供的功能。每个选项都是【单字母】。有些选项需要带选项值,有些则不需要。
选项要放在 nc 这个命令之后,每个选项前面要有一个【半角减号】,选项之间以空格分开。
一些常见的 nc 命令行选项:
注:
nc 有很多【变种】。不同的变种,会在原有 nc 的基础上增加一些新功能。比较流行的变种之一是OpenBSD 社区的变种(也叫“OpenBSD netcat”或“netcat-openbsd”),这是由 OpenBSD 社区重写的 netcat,主要增加了对“IPv6、proxy、Unix sockets”等功能的支持。很多主流 Linux 发行版的官方软件仓库已包含这个变种(比如说:Debian 家族、Arch 家族、openSUSE 家族、Gentoo 家族......)。
在nc - h
的输出中,如果第一行包含 OpenBSD 这个单词,就说明当前 nc 是 OpenBS