使用nmap来进行一些探索

很多时候需要探测局域网中存在哪些主机,或者开放了哪些端口,有一个特别好用的命令——nmap.

主机发现

任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为 一列活动的或者您感兴趣的主机。扫描每个IP的每个端口很慢,通常也没必要。 当然,什么样的主机令您感兴趣主要依赖于扫描的目的。网管也许只对运行特定服务的 主机感兴趣,而从事安全的人士则可能对一个马桶都感兴趣,只要它有IP地址:-)。一个系统管理员 也许仅仅使用Ping来定位内网上的主机,而一个外部入侵测试人员则可能绞尽脑汁用各种方法试图 突破防火墙的封锁。

由于主机发现的需求五花八门,Nmap提供了一箩筐的选项来定制您的需求。 主机发现有时候也叫做ping扫描,但它远远超越用世人皆知的ping工具 发送简单的ICMP回声请求报文。用户完全可以通过使用列表扫描(-sL)或者 通过关闭ping (-P0)跳过ping的步骤,也可以使用多个端口把TCP SYN/ACK,UDP和ICMP 任意组合起来玩一玩。这些探测的目的是获得响应以显示某个IP地址是否是活动的(正在被某 主机或者网络设备使用)。 在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。 这种情况在基于RFC1918的私有地址空间如10.0.0.0/8尤其普遍。 那个网络有16,000,000个IP,但我见过一些使用它的公司连1000台机器都没有。 主机发现能够找到零星分布于IP地址海洋上的那些机器。

如果没有给出主机发现的选项,Nmap 就发送一个TCP ACK报文到80端口和一个ICMP回声请求到每台目标机器。 一个例外是ARP扫描用于局域网上的任何目标机器。对于非特权UNIX shell用户,使用connect()系统调用会发送一个SYN报文而不是ACK 这些默认行为和使用-PA -PE选项的效果相同。 扫描局域网时,这种主机发现一般够用了,但是对于安全审核,建议进行 更加全面的探测。

  • -sL 列表扫描。只能列出来这个网段会有多少主机,并不能判断主机的任何状态。默认情况下还能获取主机名。
1
2
3
4
5
6
7
8
➜  ~ nmap -sL 192.168.1.0/24
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 16:37 CST
Nmap scan report for 192.168.1.0
Nmap scan report for nsys.cn (192.168.1.1)
...
Nmap scan report for *.demo.haha.com (192.168.1.102)
...
Nmap done: 256 IP addresses (0 hosts up) scanned in 11.16 seconds
  • -sP ping扫描。仅使用ping来扫描主机,然后输出对ping进行响应的主机,速度较快,但是意义并不是太大,主要是因为不能获取所有存活的主机。
1
2
3
4
5
6
7
8
9
10
➜  ~ nmap -sP 192.168.1.0/24
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 16:42 CST
Nmap scan report for nsys.cn (192.168.1.1)
Host is up (0.00078s latency).
Nmap scan report for 192.168.1.9
Host is up (0.086s latency).
Nmap scan report for 192.168.1.10
Host is up (0.00054s latency).
...
Nmap done: 256 IP addresses (29 hosts up) scanned in 2.64 seconds
  • -PU UDP Ping,可以绕过只过滤TCP的防火墙和过滤器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
➜  ~ nmap -P0 192.168.1.0/24
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 16:45 CST
Nmap scan report for 192.168.1.0
Host is up (0.000029s latency).
All 1000 scanned ports on 192.168.1.0 are filtered

Nmap scan report for nsys.cn (192.168.1.1)
Host is up (0.0020s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
1723/tcp open pptp
...
Nmap scan report for 192.168.1.97
Host is up (0.000019s latency).
Not shown: 863 closed ports, 135 filtered ports
PORT STATE SERVICE
5900/tcp open vnc
8086/tcp open d-s-n

端口扫描基础

  • open
    应用程序正在该端口接收TCP 连接或者UDP报文。

  • closed
    关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。

  • filtered
    由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。

  • unfiltered
    未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。

  • open|filtered(开放或者被过滤的)
    当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

  • closed|filtered(关闭或者被过滤的)
    该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。

  • -sS TCP SYN扫描,执行速度快,每秒可以扫描上千个端口。因为它不完成一个完全的TCP连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  ~ sudo nmap -sS  192.168.1.0/24
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 16:52 CST
Nmap scan report for nsys.cn (192.168.1.1)
Host is up (0.00032s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp closed https
xxx
MAC Address: xxxx
...
Nmap scan report for 192.168.1.97
Host is up (0.000017s latency).
Not shown: 499 closed ports, 499 filtered ports
PORT STATE SERVICE
5900/tcp open vnc
8086/tcp open d-s-n

Nmap done: 256 IP addresses (100 hosts up) scanned in 127.95 seconds
  • -sT TCP connect()扫描
  • -sU UDP 扫描
  • -sA TCP ACK扫描
  • -sw TCP窗口扫描

端口说明和扫描顺序

  • -p 只扫描指定端口
  • -F 快速有限的端口
  • -r 不要按随机顺序扫描

服务和版本探测

  • -v
1
2
3
4
5
6
7
8
9
10
11
12
13
nmap -sV 192.168.1.236
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 17:18 CST
Nmap scan report for 192.168.1.236
Host is up (1.0s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
111/tcp open rpcbind 2-4 (RPC #100000)
9100/tcp open jetdirect?
38292/tcp open java-rmi Java RMI

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 36.78 seconds
  • -O
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  ~ sudo nmap -O 192.168.1.236
Starting Nmap 7.91 ( https://nmap.org ) at 2021-09-01 17:20 CST
Nmap scan report for 192.168.1.236
Host is up (0.00057s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
9100/tcp open jetdirect
38292/tcp open landesk-cba
MAC Address: 52:xxxxxxx:49 (QEMU virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.91 seconds

实例

  • 指定端口
1
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

总结

探测分为两部分,获取主机地址和端口。

  • 挖掘更多的网络服务信息
1
nmap --script=discovery
  • 负责检查目标主机是否有常见的漏洞
    1
    nmap --script=vuln 192.168.1.xxx

其他脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
auth:负责处理鉴权证书、绕开鉴权的脚本。

broadcast:处理在局域网内探查更多服务开启的状况,如 dhcp / dns / sqlserver 等服务。

brute:提供暴力破解方式,针对常见的应用如 http / snmp 等。

default:使用 sC 或 A 选项时默认的脚本,提供基本脚本扫描能力。

discovery:挖掘更多的网络服务信息,如 smb 枚举、snmp 查询等。

dos:用于进行拒绝服务攻击。

exploit:利用已知的漏洞入侵系统。

external:利用第三方的数据库或资源,如进行 whois 解析。

fuzzer:模糊测试脚本,发送异常的包到目标主机,探测出潜在的漏洞。

malware:探测目标是否感染了病毒,是否开启了后门。

safe:与 fuzzer 功能相反,属于安全性脚本。

version:负责增强信性服务与版本扫描功能的脚本。

vuln:负责检查目标主机是否有常见的漏洞,如 ms08_067。