Nmap (Network Mapper) 是在渗透测试中常用的扫描工具,可用于扫描网络中的 IP 地址和端口,并检测已安装的应用程序。无论是作为网络安全工具还是黑客工具,Nmap 是一个很强大的工具,在《黑客帝国2》电影中就有出现,用于入侵发电站的能源管理系统。本文将介绍 Nmap 的安装和常用命令。
Nmap简介及安装
Nmap官网地址:https://nmap.org/
Nmap 特性
Nmap使用IP数据包来确定网络上有哪些主机可用、提供哪些服务(应用程序名称和版本)、它们运行的操作系统(操作系统版本信息)、使用的数据包过滤/防火墙类型等其它特性。Nmap可以运行在所有主流的操作系统上,比如Linux、Windows和Mac OS等。
- Nmap 支持检查主机是否启动,可用于监视主机或服务正常运行时间等
- 快速识别网络中的设备,包括服务器,路由器,交换机,移动设备等
- 帮助识别系统上运行的服务,包括 web 服务器、 DNS 服务器和其他常见应用程序。Nmap 还可以检测应用程序版本,帮助检测漏洞
- 查找在设备上运行的操作系统详细信息
- 漏洞扫描中,可以使用 Nmap 脚本攻击系统
Nmap提供了以下工具:
- Zenmap 图形界面:可以绘制网络映射图
- Ncat:数据传输、重定向和调试工具
- Ndiff:比较扫描结果
- Nping:数据包生成和响应分析工具
Nmap安装
centos7
Linux系统安装:https://nmap.org/book/inst-linux.html#inst-rpm1
$ rpm -vhU https://nmap.org/dist/nmap-7.91-1.x86_64.rpm
也可以先把rpm下载下来后,再安装
1 | $ rpm -vhU nmap-7.91-1.x86_64.rpm |
查看nmap版本1
2
3
4
5
6
7[root@server ~]# nmap -version
Nmap version 7.91 ( https://nmap.org )
Platform: x86_64-redhat-linux-gnu
Compiled with: nmap-liblua-5.3.5 openssl-1.1.1h nmap-libssh2-1.9.0 nmap-libz-1.2.11 nmap-libpcre-7.6 nmap-libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
[root@Client ~]#
Windows
- 下载exe可执行文件,双击安装,不勾选npcap,其它默认
- 安装npcap,下载地址:https://nmap.org/npcap/#download
安装完成后,npcap默认加入了环境变量,不需要手动添加1
2
3
4
5
6
7
8D:\software\Nmap>nmap --version
Nmap version 7.91 ( https://nmap.org )
Platform: i686-pc-windows-windows
Compiled with: nmap-liblua-5.3.5 openssl-1.1.1h nmap-libssh2-1.9.0 nmap-libz-1.2.11 nmap-libpcre-7.6 Npcap-1.10 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: iocp poll select
D:\software\Nmap>
其它系统安装方法参考:https://nmap.org/download.html
Nmap命令
查看帮助命令:1
$ nmap -h
扫描单个主机
1 | $ nmap 192.168.20.9 |
扫描多个主机
同时扫描多个主机,1
2
3
4$ nmap 192.168.20.9 192.168.20.8
$ nmap 192.168.20.*
$ nmap 192.168.20.8,9,10
$ nmap 192.168.20.8-255
隐秘扫描(Stealth scan)
通过发送 SYN 数据包并分析响应。如果收到 SYN/ACK,则表示端口已打开,可以进行 TCP 连接。1
2
3
4
5
6
7
8
9
10
11
12
13
14$ nmap -sS 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-05 17:15 CST
Nmap scan report for 39.99.181.194
Host is up (0.077s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp closed telnet
3306/tcp open mysql
3389/tcp closed ms-wbt-server
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 30.31 seconds
版本扫描
查找应用程序的版本,确认目标主机使用的应用版本后,可以在Common vulnerability and Exploits (CVE)数据库中找到应用特定版本的现有漏洞。然后可以使用 Metasploit 类似的工具来攻击计算机。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$ nmap -sV 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-05 17:37 CST
Nmap scan report for 39.99.181.194
Host is up (0.066s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
23/tcp closed telnet
3306/tcp open mysql MySQL 5.7.29
3389/tcp closed ms-wbt-server
8080/tcp closed http-proxy
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.26 seconds
操作系统探测
Nmap 还可以使用 TCP/IP 指纹技术提供有关底层操作系统的信息。Nmap 还将尝试在操作系统扫描期间查找系统正常运行时间。
1 | $ nmap -O 39.99.181.194 |
激烈扫描模式(-A参数)启用了操作系统检测(-O) 和版本扫描(-sV),返回系统信息和版本信息。
1 | $ nmap -A 39.99.181.194 |
端口扫描
使用 -p
参数扫描单个端口1
2
3
4
5
6
7
8
9$ nmap -p 3306 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-16 17:35 CST
Nmap scan report for 39.99.181.194
Host is up (0.049s latency).
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.99 seconds
指定端口连接类型,比如TCP连接1
$ nmap -p T:3306 39.99.181.194
指定端口范围1
2
3
4
5
6
7
8
9
10
11
12
13$ nmap -p 22-8080 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-16 17:38 CST
Nmap scan report for 39.99.181.194
Host is up (0.052s latency).
Not shown: 8054 filtered ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
3306/tcp open mysql
3389/tcp closed ms-wbt-server
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 22.10 seconds
1 | $ nmap --top-ports 10 39.99.181.194 |
TCP扫描:1
2
3
4
5
6
7
8
9
10
11
12
13$ nmap -sT 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-18 16:47 CST
Nmap scan report for 39.99.181.194
Host is up (0.049s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
110/tcp open pop3
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 49.29 seconds
TCP SYN扫描(半开放扫描):
SYN扫描执行快,每秒钟可以扫描数千个 端口,因为它不完成TCP连接
1 | $ nmap -sS 39.99.181.194 |
UDP扫描:
UDP扫描一般较慢,DNS,SNMP,和DHCP (端口53,161/162,和67/68)是最常见的三个UDP服务。
1 | $ nmap -sU 39.99.181.194 |
open|filtered表示无法确定端口是开放还是被过滤的
UDP扫描比TCP扫描慢的原因是UDP是无连接的,Nmap无法区分应用过滤数据包的开放端口、数据包被防火墙阻止丢弃的端口或者数据包由于网络拥塞而在传输过程中丢失。而且对于closed端口(ICMP端口无法访问),Nmap无法区分端口被防火墙过滤还是数据包丢失。除非端口返回数据或返回ICMP不可达报文,否则Nmap需要发送多个数据包来消除速率限制或丢失数据包的可能性。
可以通过如下方式提高扫描速度(牺牲扫描精度)
--min-rate
参数:--min-rate 5000
表示每秒发送5000个数据包--max-rtt-timeout
参数:控制nmap等待响应时间,需大于5ms,具体时间可以通过ping命令查看。--max-rtt-timeout 0.005
:5ms等待时间--max-retries
参数:设置重试次数,--max-retries 1
重试1次--max-scan-delay
参数:设置扫描间隔,用在主机响应慢的情况下。
1 | $ nmap -sU --min-rate 5000 39.99.181.194 |
Null扫描 (-sN):
不设置任何标志位(tcp标志头是0)
1 | $ nmap -sN 39.99.181.194 |
FIN扫描 (-sF):
只设置TCP FIN标志位。
1 | $ nmap -sF 39.99.181.194 |
Xmas扫描 (-sX):
设置FIN,PSH,和URG标志位
1 | $ nmap -sX 39.99.181.194 |
TCP ACK扫描:
用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
1 | $ nmap -sA 39.99.181.194 |
IP协议扫描:
确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等)
1 | $ nmap -sO 39.99.181.194 |
PING扫描:检测目标主机是否在线1
$ nmap -sP 39.99.181.194
读取文件扫描
如果需要扫描的IP地址很多,可以存放在一个文件里面进行扫描
1 | $ nmap -iL nmap_test.txt |
扫描日志
-v
参数打印扫描日志
1 | $ nmap -v -p 3306 39.99.181.194 |
保存到文件,保存格式支持text、xml
1 | $ nmap -oN output.txt 39.99.181.194 |
或者1
$ nmap -oA output 39.99.181.194
生成output,xml、output.nmap、output.gnmap文件
NSE脚本
NSE(Nmap Scripting Engine)是一个非常强大的渗透工具,它允许用户编写各种网络任务的自动化脚本。脚本基于Lua语言,可以自己编写满足需求的脚本或者修改已有的脚本。目前Nmap集成了600多个脚本,参考:https://nmap.org/nsedoc/
语法:1
2$ nmap --script <filename>
$ nmap -sC # 使用默认脚本集执行脚本扫描,等价于 --script=default
多个脚本使用逗号分隔
NSE脚本类别
NSE 通过 -sC
选项(或--script
)激活,主要包括以下功能:
- 网络发现:扫描目标主机信息、服务等
- 版本检测:检测应用版本
- 漏洞检测:扫描系统漏洞
- 后门检测
- 攻击、利用漏洞
NSE 脚本主要包括以下14类:
- auth:身份认证
- broadcast:广播,通过在本地网络上广播来发现没有列出的主机
- brute:使用暴力破解来猜测远程服务器的身份认证凭据
- default:默认设置的脚本,使用 -sC 或 -A 选项时默认运行,比如identd-owners、http-auth、ftp-anon。
- discovery:通过查询公共注册中心、支持 snmp 的设备、目录服务等来发现更多关于网络的信息
- dos:测试拒绝服务的漏洞
- exploit:主动利用某些漏洞
- external:将数据发送到第三方数据库或其他网络资源,比如whois-ip通过连接到 whois 服务器获取目标地址
- fuzzer:在每个数据包中发送随机字段,可用于发现软件的缺陷和漏洞
- intrusive:可能会消耗目标主机大量资源,风险太高,可能会导致目标系统崩溃
- malware:测试目标平台是否被恶意软件或后门感染
- safe:安全脚本,不攻击,不使用大量网络带宽或其他资源
- version:版本检测:
- vuln:检查特定的已知漏洞,通常只报告发现的结果
NSE脚本示例
discovery
mysql-info:打印mysql服务器版本,协议,进程ID,密码盐度等信息
1 | $ nmap -sV --script=mysql-info 39.99.181.194 |
auth
ssh-auth-methods:返回SSH服务器支持的认证方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$ nmap --script=ssh-auth-methods 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-18 16:03 ?D1ú±ê×?ê±??
Nmap scan report for 39.99.181.194
Host is up (0.069s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
22/tcp open ssh
| ssh-auth-methods:
| Supported authentication methods:
| publickey
| gssapi-keyex
| gssapi-with-mic
|_ password
23/tcp open telnet
3306/tcp open mysql
3389/tcp closed ms-wbt-server
8080/tcp closed http-proxy
Nmap done: 1 IP address (1 host up) scanned in 60.76 seconds
brute
暴力破解
对SSH服务进行暴力破解:
1 | $ nmap -p 22 --script ssh-brute --script-args userdb=users.lst,passdb=pass.lst --script-args ssh-brute.timeout=4s 39.99.181.194 |
ftp暴力破解1
$ nmap --script ftp-brute -p 21 <host>
mysql-enum:获取mysql有效用户1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23$ nmap -p 3306 --script=mysql-enum 39.99.181.194
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-18 16:19 CST
Nmap scan report for 39.99.181.194
Host is up (0.23s latency).
PORT STATE SERVICE
3306/tcp open mysql
| mysql-enum:
| Valid usernames:
| root:<empty> - Valid credentials
| netadmin:<empty> - Valid credentials
| guest:<empty> - Valid credentials
| test:<empty> - Valid credentials
| web:<empty> - Valid credentials
| sysadmin:<empty> - Valid credentials
| administrator:<empty> - Valid credentials
| webadmin:<empty> - Valid credentials
| admin:<empty> - Valid credentials
| user:<empty> - Valid credentials
|_ Statistics: Performed 10 guesses in 1 seconds, average tps: 10.0
Nmap done: 1 IP address (1 host up) scanned in 9.15 seconds
mysql-brute:密码破解1
2
3
4
5
6
7
8
9
10
11
12
13
14$ nmap --script=mysql-brute -p 3306 127.0.0.1
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-22 16:24 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0010s latency).
PORT STATE SERVICE
3306/tcp open mysql
| mysql-brute:
| Accounts:
| admin:admin - Valid credentials
| root:123456 - Valid credentials
|_ Statistics: Performed 40012 guesses in 20 seconds, average tps: 2000.6
Nmap done: 1 IP address (1 host up) scanned in 21.36 seconds
Zenmap可视化
Zenmap是Nmap的图形化界面
总结
本文简要介绍了nmap工具的安装、一些常用扫描命令、NSE脚本以及可视化工具Zenmap的演示。nmap是一个强大的渗透测试工具,提供丰富的命令脚本,可以说是网络的“瑞士军刀”,更多用法可以参考Nmap官网网站:https://nmap.org/ ,上面介绍了Nmap工具的详细信息和更高级的用法。中文文档参考:https://nmap.org/man/zh/
本文标题:Nmap扫描工具介绍
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/penetration-testing-for-nmap-tool/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。