引言
在网络安全领域,无论是进行系统保护还是进行安全测试,网络扫描工具都扮演着重要角色。其中,NMAP是一个功能强大且广泛使用的网络扫描和安全审计工具。在本文中,我们将进一步探索NMAP的高级使用技巧,并深入研究如何使用NMAP进行漏洞扫描和发现。
NMAP概述
nmap 是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap 支持很多扫描技术,例如: UDP、TCPconnect0、TCP SYN(半开扫描)、ftp 代理(bounce 攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN 扫描和 null扫描。还可以探测操作系统类型。
下载地址:https://nmap.org
nmap应用
- 检测活在网络上的主机(主机发现)
- 检测主机上开放的端口(端口发现或枚举)
- 检测到相应的端口(服务发现)的软件和版本
- 检测操作系统,硬件地址,以及软件版本
- 检测脆弱性的漏洞(Nmap的脚本)
NMAP端口状态解析
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。
open: 应用程序在该端口接收 TCP 连接或者 UDP 报文
closed:关闭的端口对于 nmap 也是可访问的, 它接收nmap 探测报文并作出响应。但没有应用程序在其上监听
filtered:由于包过滤阻止探测报文到达端口,nmap 无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙。
unfiltered:未被过滤状态意味着端口可访问,但是 nmap 无法确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK 扫描才会把端口分类到这个状态。
open| filtered :无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP 协议,FIN,Null 等扫描会引起。
closed| filtered:(关闭或者被过滤的): 无法确定端口是关闭的还是被过滤的。
NMAP高级使用技巧
复杂的扫描技术
NMAP的高级扫描技术如IP协议扫描和FTP bounce扫描为用户提供更多灵活性。IP协议扫描通过发送空的IP头来确定目标主机支持哪些IP协议。如果目标主机不发送ICMP不可达消息,则认为该协议是支持的。而FTP bounce扫描是一种欺骗性的扫描技术,通过发送特殊构造的FTP命令到脆弱的FTP服务器,使其代替NMAP连接目标主机的端口。
灵活的输出选项
NMAP允许用户以各种方式来输出扫描结果。使用”-oN”选项可以生成普通的可读文本文件,”-oX”选项则可以生成XML格式的输出,这种格式可以方便地被其他工具或程序进一步处理。如果需要同时输出多种格式,可以使用”-oA”选项。
NMAP脚本扫描
NMAP的脚本扫描功能是其最强大的工具之一,它通过NMAP脚本引擎 (NSE) 运行脚本。脚本扫描可以用来完成各种复杂的任务,包括但不限于高级版本检测、服务识别、安全审计和漏洞扫描。例如,使用”ssl-enum-ciphers”脚本可以列出目标主机支持的SSL密码套件,使用”smb-enum-shares”脚本则可以枚举SMB服务上的共享。
复杂的扫描技术
nmap支持很多扫描技术,例如:UDP、TCP connect().TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。还可以探测操作系统类型。
1. 复杂的扫描技术
当然,这里有一些基本和高级Nmap扫描的例子:
基本的TCP SYN扫描:
nmap -sS 192.168.1.1
这个命令将会对IP地址为192.168.1.1的主机进行TCP SYN扫描。UDP扫描:
nmap -sU 192.168.1.1
这个命令将会对192.168.1.1进行UDP扫描。版本探测:
nmap -sV 192.168.1.1
这个命令将会对192.168.1.1进行版本探测,尝试发现运行在开放端口上的服务的版本信息。操作系统探测:
nmap -O 192.168.1.1
这个命令将会尝试判断192.168.1.1的操作系统类型和版本。使用脚本的扫描:
nmap --script=http-title 192.168.1.1
这个命令将会运行http-title脚本,尝试获取192.168.1.1上运行的web服务的标题。复杂的扫描:
nmap -sS -sV -O -v 192.168.1.1
这个命令将会对192.168.1.1进行SYN扫描,并尝试进行版本探测和操作系统探测,同时输出详细的扫描过程信息。
灵活的输出选项
2. 灵活的输出选项
标准输出:这是Nmap的默认输出选项。Nmap将会在控制台显示扫描结果,以人类可读的形式展现。
例如:
nmap -sS 192.168.1.1
输出到文件:通过
-oN
选项,Nmap可以将扫描结果输出到一个文件,文件的格式与标准输出相同。例如:
nmap -sS -oN output.txt 192.168.1.1
XML输出:通过
-oX
选项,Nmap可以将扫描结果以XML格式输出到一个文件,这使得用户可以用其他工具对扫描结果进行进一步的处理和分析。例如:
nmap -sS -oX output.xml 192.168.1.1
grep输出:通过
-oG
选项,Nmap可以将扫描结果以grepable格式输出到一个文件,这使得用户可以用grep或其他文本处理工具对扫描结果进行过滤和分析。例如:
nmap -sS -oG output.gnmap 192.168.1.1
所有格式输出:通过
-oA
选项,Nmap可以将扫描结果以所有上述格式输出到不同的文件。例如:
nmap -sS -oA output 192.168.1.1
NMAP脚本扫描
3. NMAP脚本扫描
Nmap脚本引擎(NSE)是Nmap中一个强大的功能,它可以使用Lua编写的脚本来执行各种复杂的网络任务,如高级版本检测、操作系统检测、漏洞检测等。
HTTP服务标题获取:http-title脚本会访问目标主机上的HTTP服务,并尝试获取和返回网页的标题。
例如:
nmap --script=http-title 192.168.1.1
HTTP服务漏洞扫描:http-vuln-cve2014-3704脚本会检查目标主机上的Drupal CMS是否存在CVE-2014-3704漏洞。
例如:
nmap --script=http-vuln-cve2014-3704 192.168.1.1
SSL心脏滴血漏洞检测:ssl-heartbleed脚本会检查目标主机的SSL服务是否存在心脏滴血漏洞。
例如:
nmap --script=ssl-heartbleed 192.168.1.1
执行多个脚本:你可以一次执行多个脚本,只需要将它们用逗号分隔即可。
例如:
nmap --script=http-title,http-vuln-cve2014-3704 192.168.1.1
执行脚本分类:Nmap的脚本被分为多个分类,如默认、安全、版本、发现等。你可以使用脚本的分类名来执行一组脚本。
例如:
nmap --script=default,safe 192.168.1.1
使用ssl-enum-ciphers脚本
要列出目标主机支持的SSL密码套件,可以使用”ssl-enum-ciphers”脚本。例如,检查目标主机192.168.1.1的443端口支持的密码套件:
nmap --script ssl-enum-ciphers -p 443 192.168.1.1
使用smb-enum-shares脚本
要枚举SMB服务上的共享,可以使用”smb-enum-shares”脚本。例如,枚举目标主机192.168.1.1的SMB共享:
nmap --script smb-enum-shares 192.168.1.1
漏洞扫描示例
CVE-2014-3704漏洞
使用http-vuln-cve2014-3704脚本扫描Drupal CMS的CVE-2014-3704漏洞:
nmap --script=http-vuln-cve2014-3704 192.168.1.1
root@kali:~# nmap --script=http-vuln-cve2014-3704 192.168.1.1 Starting Nmap ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.00050s latency). Not shown: 998 closed ports PORT STATE SERVICE 80/tcp open http | http-vuln-cve2014-3704: | VULNERABLE: | Drupal HTTP Parameter Key/Value SQL Injection | State: VULNERABLE | IDs: CVE:CVE-2014-3704 | Risk factor: High CVSSv2: 7.5 (HIGH) (AV:N/AC:L/Au:N/C:P/I:P/A:P) | Drupal 7.x versions prior to 7.32 are vulnerable to a SQL injection flaw in the expandArguments function of the database abstraction API. | | Disclosure date: 2014-10-15 | References: | http://cvedetails.com/cve/2014-3704/ | https://www.sektioneins.de/en/blog/14-10-15-drupal-sql-injection-vulnerability.html |_ https://www.drupal.org/SA-CORE-2014-005 MAC Address: 08:00:27:53:8B:CC (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 7.60 seconds
心脏滴血漏洞
使用ssl-heartbleed脚本扫描SSL服务的心脏滴血漏洞:
nmap --script=ssl-heartbleed 192.168.1.1
root@kali:~# nmap --script=ssl-heartbleed 192.168.1.1 Starting Nmap ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.00051s latency). Not shown: 998 closed ports PORT STATE SERVICE 443/tcp open https | ssl-heartbleed: | VULNERABLE: | The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. This weakness allows stealing the information protected, under normal conditions, by the SSL/TLS encryption used to secure the Internet | State: VULNERABLE | Risk factor: High | OpenSSL versions 1.0.1 through 1.0.1f (inclusive) are vulnerable | | References: | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160 | http://www.openssl.org/news/secadv_20140407.txt |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160 MAC Address: 08:00:27:53:8B:CC (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 7.70 seconds
MS17-010(永恒之蓝)漏洞
使用smb-vuln-ms17-010脚本扫描SMB服务的MS17-010(永恒之蓝)漏洞:
nmap --script=smb-vuln-ms17-010 192.168.1.1
root@kali:~# nmap --script=smb-vuln-ms17-010 192.168.1.1 Starting Nmap ( https://nmap.org ) Nmap scan report for 192.168.1.1 Host is up (0.00051s latency). Not shown: 998 closed ports PORT STATE SERVICE 445/tcp open microsoft-ds | smb-vuln-ms17-010: | VULNERABLE: | Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010) | State: VULNERABLE | IDs: CVE:CVE-2017-0143 | Risk factor: HIGH | A critical remote code execution vulnerability exists in Microsoft SMBv1 | servers (ms17-010). | | References: | https://technet.microsoft.com/en-us/library/security/ms17-010.aspx | https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/ |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143 Nmap done: 1 IP address (1 host up) scanned in 7.70 seconds
DNMAP集群简介
dnmap 是一个用 python 写的进行分布式扫描的nmap 扫描框架,我们可以用dnmap 来通过多个台机器发起一个大规模的扫描,dnmap 采用 C/S 结构,执行大量扫描任务时非常便捷,扫描结果可以统一管理。
使用场景
使用dnmap进行大规模的网络扫描,你需要设置一个dnmap服务器,这将作为所有扫描任务的中心。然后,在每个要参与扫描的客户端系统上安装dnmap客户端。在这种设置中,服务器发送扫描命令给所有的客户端,然后收集并管理扫描结果。
- 在服务器上安装并设置dnmap:
apt-get install dnmap
mkdir /var/dnmap_server/
dnmap_server -f -l /var/dnmap_server/dnmap.log -w /var/dnmap_server/dnmap.output
-f
标志表示dnmap服务器将运行在前台模式,-l
标志指定日志文件的位置,-w
标志指定扫描结果的输出文件。
- 在每个客户端系统上安装并运行dnmap客户端:
apt-get install dnmap
dnmap_client -s server_ip
-s
标志后面跟着的是dnmap服务器的IP地址。
- 在服务器上,通过添加扫描命令到dnmap文件中来开始一个新的扫描任务:
echo "nmap -Pn -p 80 -oX - 10.0.0.0/8" > /var/dnmap_server/dnmap.commands
在这个示例中,服务器将扫描10.0.0.0/8网络的所有主机的80端口,并将结果以XML格式输出。
结论
通过本文的深入探讨,我们可以看到NMAP作为一个强大的网络扫描和安全审计工具的价值。从基本的网络扫描到高级的扫描技术,再到漏洞扫描和发现,NMAP都能为我们提供强大的支持。了解并熟练掌握NMAP的使用,无疑会在网络安全领域中大大提高我们的工作效率和准确性。同时,也要时刻提醒自己,任何强大的工具都应在法律和道德的框架内使用,保护网络安全,也是保护我们自己。