何为Nmap

简单地说,Nmap是一款网络安全领域常用的网络探测工具。我们可以用它探测当前网络在线的主机及其开放的端口。

Nmap是网络安全工程师黑客必须掌握的一个工具。

以下均在命令行中演示。

原理

分辩IP地址和域名。如果所给的是域名则会访问DNS服务器做域名解析。然后再发送ICMP数据包探测主机存活性。ICMP数据包常运用于PING。远程机器接收到数据包会响应一个数据包。Nmap解析这个返回的数据包得到机器的信息,其中就包括端口信息。

例子

最简单的使用

下面是在Windows 10中的测试,使用nmap探测我这台土豆服务器开放的端口。在其他平台下大同小异。

1
nmap 192.168.0.204
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PS C:\Users\bkryofu> nmap 192.168.0.204
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-06 22:22 ?D1ú±ê×?ê±??
Nmap scan report for server (192.168.0.204)
Host is up (0.00s latency).
Other addresses for server (not scanned): fe80::21a:a9ff:fe91:e101
Not shown: 992 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
631/tcp open ipp
6566/tcp open sane-port
MAC Address: 00:1A:A9:91:E1:01 (Fujian Star-net Communication)

Nmap done: 1 IP address (1 host up) scanned in 6.14 seconds

从Nmap返回的结果来看,这台服务器开放了许多端口,其中包括21端口的ftp文件传输协议、80端口的http超文本传输协议、445端口的microsoft-ds微软共享文件夹、631端口的ipp打印机服务,以及一个sane-port,远程扫描仪端口。黑客可以通过监听数据包(通过WireShark)来获取ftp的密码和http传输报文。而microsoft-ds的445端口很脆弱,非常容易被攻陷。曾经的Bad Rabbit勒索病毒就是通过爆破445端口来攻击。

我这台服务器架设在内网,所以问题不大。

指定DNS扫描域名

我们也可以设置指定的DNS服务器来探测端口,只需要设置--dns-servers参数。如下,使用8.8.8.8作为指定的DNS服务器,扫描scanme.nmap.org

1
2
3
4
5
6
7
8
9
10
11
PS C:\Users\bkryofu> nmap scanme.nmap.org --dns-servers 8.8.8.8
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.18s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 84.31 seconds

“穿墙”

使用-Pn参数来停止探测之前的ICMP请求,以突破防火墙的安全机制。仅限已经知道主机存活或防火墙开启的机器。加入这个参数貌似会让nmap遍历远程机器的每一个端口,所以会很慢。

1
2
3
4
5
6
7
8
9
10
11
12
PS C:\Users\bkryofu> nmap -Pn scanme.nmap.org
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.17s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite

Nmap done: 1 IP address (1 host up) scanned in 78.05 seconds

和之前的有区别吗?莫非这个靶子莫得防火墙?

探测全部端口

以上也仅仅探测了Nmap默认的扫描端口范围。

使用-p m-n指定探测m-n端口范围。

下面还是使用我自己的土豆服务器做靶机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PS C:\Users\bkryofu> nmap -p 0-65535 192.168.0.204
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-06 23:20 ?D1ú±ê×?ê±??
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 7.14 seconds
PS C:\Users\bkryofu> nmap 192.168.0.204 -p 0-65535
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-06 23:20 ?D1ú±ê×?ê±??
Nmap scan report for 192.168.0.204
Host is up (0.00s latency).
Not shown: 65527 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
631/tcp open ipp
6566/tcp open sane-port
31416/tcp open boinc
MAC Address: 00:1A:A9:91:E1:01 (Fujian Star-net Communication)

Nmap done: 1 IP address (1 host up) scanned in 9.45 seconds

可以看到,输出结果和最开始的不同,多出了一个31416端口的boinc

参考

后记

憨憨地在省图书馆测试扫描了以下WLAN登录的服务器,挺有意思的。

<(_ _)>

讲真挺想试试抓包的,可惜这台机器上没有安装WireShark。就算装了我也不会用。