Nmap是一款网络扫描和主机检测的非常有用的工具。Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。
Nmap是一款非常强大的实用工具,可用于:
1.检测活在网络上的主机(主机发现)
2.检测主机上开放的端口(端口发现或枚举)
3.检测到相应的端口(服务发现)
4.软件版本检测脆弱性的漏洞(Nmap的脚本)
虽然Nmap更新了这么多年依旧没有什么太大的进步,但至今还是信息搜集/主机扫描中的一个有着极其重要地位的工具。
在使用网络扫描之前,需要先理解以下内容:
1、当目标主机上使用了防火墙、路由器、代理服务或其它安全设备时,使用Nmap扫描结果可能会存在一些偏差。或者当扫描的远程目标主机不在本地网络内时,也有可能会出现误导信息。
2、在使用Nmap实施扫描时,一些选项需要提升权限。在Unix和Linux系统中,必须使用root登录或者使用sudo命令执行Nmap命令。
在实施网络扫描时,需要考虑一些法律边界问题。如下所示:
1、在扫描互联网服务提供商网络时(如政府或秘密服务器网站),如果没有被允许的话,不要进行扫描。否则,会惹上法律麻烦。
2、全面扫描某些主机时,可能会导致主机崩溃、停机或数据丢失等不良结果。所以,在扫描关键任务时要小心谨慎。
我们在简单了解过nmap之后,我们就直接切入正题,开始我们的Nmap扫描之旅。
扫描局域网中IP地址为192.168.1.105的主机。执行命令如下所示:
root@localhost:~# nmap 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 18:44 CST
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00010s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
111/tcp open rpcbind
445/tcp open microsoft-ds
MAC Address: 00:0C:29:31:02:17 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.87 seconds
从输出信息中,可以看到目标主机192.168.1.105上开启的端口有21、22、23、111、445,及这些端口所对应的服务。而且,还可以看到该目标主机的MAC地址为00:0C:29:31:02:17。从最后一行信息,可以看出目标主机是活动的(up),并且扫描该目标主机共用了0.87秒。
提示:
Nmap工具默认扫描前1000个端口,即1-1000。如果用户想扫描1000以上端口的话,需要使用-p选项来指定。
使用Nmap工具同时扫描主机192.168.1.1、192.168.1.101和192.168.1.105。执行命令如下所示:
root@localhost:~# nmap 192.168.1.1 192.168.1.101 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-05 19:07 CST
Nmap scan report for localhost (192.168.1.1)
Host is up (0.00094s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
49152/tcp open unknown
MAC Address: 14:E6:E4:84:23:7A (Tp-link Technologies CO.)
Nmap scan report for localhost (192.168.1.101)
Host is up (0.0060s latency).
All 1000 scanned ports on localhost (192.168.1.101) are closed
MAC Address: 14:F6:5A:CE:EE:2A (Xiaomi)
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00038s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
111/tcp open rpcbind
445/tcp open microsoft-ds
MAC Address: 00:0C:29:31:02:17 (VMware)
Nmap done: 3 IP addresses (3 hosts up) scanned in 1.00 seconds
以上输出信息,可以看到共扫描了三台主机,并且依次显示了每台主机的扫描结果。下面分别介绍这三台主机的扫描结果,如下所示:
1、192.168.1.1:从输出信息中可以看到该主机开启了三个端口,MAC地址为14:E6:E4:84:23:7A。根据MAC地址后面括号中的信息,可以推断出该主机是一个Tp-link路由器。
2、192.168.1.101:从输出信息中,可以看到该主机上前1000个端口是关闭的。但是,可以看到该主机的MAC地址为14:F6:5A:CE:EE:2A,设备类型为Xiaomi。由此可以判断出,该主机是一个小米手机设备。
3、192.168.1.105:从输出信息中,可以看到该主机上995个端口是关闭的,五个端口是开启的。其中,MAC地址为00:0C:29:31:02:17,而且是一台VMware(虚拟机)操作系统。
提示:当用户同时指定扫描的目标太多时,可以使用简化符号来获取扫描结果。其中,目标地址之间使用逗号(,)分割。例如,同时扫描以上三台主机,则可以使用如下命令:
nmap 192.168.1.1,101,105
当用户有大量主机需要扫描时,可以将这些主机的IP地址(或主机名)写入到一个文本文件中。然后,使用Nmap工具进行扫描。这样避免在命令行中手工输入目标。其中,语法格式如下所示:
nmap -iL [IP地址列表文件]
以上语法中的-iL选项,就是用来从IP地址列表文件中提取所有地址的。其中,IP地址列表文件中包含了一列被扫描的主机IP地址。并且,在IP地址列表文件中的每个条目必须使用空格、Tab键或换行符分割。
【示例】使用Nmap工具扫描list.txt文件中所有的主机。具体操作步骤如下所示:
(1)创建list.txt文本文件,并将扫描的主机IP地址写入到该文本文件中。如下所示:
root@localhost:~# vi list.txt
192.168.1.1
192.168.1.100
192.168.1.101
以上就是在list.txt文件中,指定将要扫描的目标地址。
(2)扫描list.txt文件中指定的所有主机。执行命令如下所示:
root@localhost:~# nmap -iL list.txt
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-06 10:53 CST
Nmap scan report for localhost (192.168.1.1)
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
1900/tcp open upnp
49152/tcp open unknown
MAC Address: 14:E6:E4:84:23:7A (Tp-link Technologies CO.)
Nmap scan report for localhost (192.168.1.100)
Host is up (0.00023s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
MAC Address: 00:E0:1C:3C:18:79 (Cradlepoint)
Nmap scan report for localhost (192.168.1.103)
Host is up (0.00028s latency).
Not shown: 977 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
8180/tcp open unknown
MAC Address: 00:0C:29:F8:2B:38 (VMware)
Nmap done: 3 IP addresses (3 hosts up) scanned in 1.05 seconds
从输出的信息中,可以看到依次扫描了list.txt文件中的每台主机,并且显示了每台主机的扫描结果。
使用nmap查看一个主机是否在线,执行命令如下:
nmap -sP 192.168.23.25
-sP 参数: ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
当然以上是扫描单个IP,nmap支持扫描多个IP:
扫描整个子网 nmap 192.168.25.1/24
扫描多个主机 namp 192.168.25.2 192.168.25.6
扫描一个小范围 nmap 192.168.25.2-10
扫描txt内的ip列表 nmap -iL text.txt
扫描除某个目标外 nmap 192.168.25.1/24 -exclude 192.168.25.25
加-O参数用于识别操作系统,如:
nmap -O 192.168.24.18
-O参数: 探测目标系统的漏洞,容易误报
nmap能识别windows和linux 但是windows的具体版本的误报率实在是太高了。
nmap -sV 192.168.24.18
-sV 参数: 端口服务及版本
能获取到目标服务器上运行的端口号以及各个端口号对应的服务及版本信息。这样能更好的帮助我们进行渗透,因为使用的组件的版本是含有已知漏洞的那更好了。
在使用Nmap工具实施扫描时,使用不同的选项,则扫描结果不同。用户可以使用不同的选项,单独扫描目标主机上的端口、应用程序版本或操作系统类型等。但是,大部分人又不太喜欢记这些选项。这时候,用户只需要记一个选项-A即可。该选项可以对目标主机实施全面扫描,扫描结果中包括各种类型的信息。其中,实施全面扫描的语法格式如下所示:
nmap -A [目标]
【示例】使用Nmap工具对目标主机192.168.1.105实施全面扫描。则执行命令如下所示:
root@localhost:~# nmap -A 192.168.1.105
Starting Nmap 6.47 ( http://nmap.org ) at 2015-05-06 15:20 CST
Nmap scan report for localhost (192.168.1.105)
Host is up (0.00028s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.2.2 #FTP服务版本为2.2.2,供应商是Vsftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230) #允许匿名登录
|_drwxr-xr-x 2 14 0 4096 Apr 03 06:10 pub #FTP服务的根目录为pub
22/tcp open ssh OpenSSH 5.3 (protocol 2.0) #SSH服务版本是5.3,供应商是OpenSSH
| ssh-hostkey: #SSH服务密钥
| 1024 83:9f:d0:8e:29:3c:7f:d9:11:da:a8:bb:b5:5a:4d:69 (DSA)
|_ 2048 2e:ea:ee:63:03:fd:9c:ae:39:9b:4c:e0:49:a9:8f:5d (RSA)
23/tcp open telnet Linux telnetd #Telnet服务
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo: #RPC详细信息
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 34525/tcp status
|_ 100024 1 51866/udp status
445/tcp open netbios-ssn Samba smbd 3.X (workgroup: MYGROUP)#Samba服务版本为3.X,供应商为smbd
MAC Address: 00:0C:29:31:02:17 (VMware) #目标主机的MAC地址
Device type: general purpose #设备类型
Running: Linux 2.6.X|3.X #正在运行的系统
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3 #操作系统中央处理单元
OS details: Linux 2.6.32 - 3.10 #操作系统详细信息
Network Distance: 1 hop #网络距离
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel #服务信息
Host script results:
| smb-os-discovery: #SMB操作系统发现
| OS: Unix (Samba 3.6.9-151.el6) #操作系统为Unix,Samba版本为3.6.9
| Computer name: router #计算机名
| NetBIOS computer name: #NetBIOS计算机名
| Domain name: #域名
| FQDN: router #完全合格域名(FQDN)
|_ System time: 2015-05-06T15:20:28+08:00 #系统时间
| smb-security-mode:
| Account that was used for smb scripts: <blank>
| User-level authentication
| SMB Security: Challenge/response passwords supported
|_ Message signing disabled (dangerous, but default)
|_smbv2-enabled: Server doesn't support SMBv2 protocol
TRACEROUTE
HOP RTT ADDRESS
1 0.28 ms localhost (192.168.1.105)
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.51 seconds
从以上输出的信息,可以明显看出比前面例子扫描结果更详细。在以上输出信息中,可以看到目标主机上开启的端口、服务器、版本、操作系统版本、内核、系统类型等。根据分析输出的信息,可知目标主机上运行了FTP、SSH、Telnet等服务,并且可以看到各服务的版本及权限信息。而且,还可以知道目标主机的操作系统是Linux,内核版本为2.6.32等。
Nmap不仅用于端口扫描、服务检测,还拥有强大的脚本引擎。利用Nmap Script可以快速探测服务器。
在Nmap安装目录下存在Script文件夹,在Script文件夹中存在许多以“.nse”后缀结尾的文本文件,即Nmap自带的脚本引擎。你也可以自己编写Nmap Script。Nmap Script实现许多不同的功能,其中包括漏洞扫描、漏洞利用、目录扫描等实用功能。
使用Nmap脚本引擎时,只需要添加命令“–script=脚本名称”。Nmap Script有400种之多,本文将介绍几种最常用的,更多信息可以参照 http://nmap.org/nsedoc/。
大家都知道在平时的漏扫中,AWVS、APPSCAN、Netspark、webspectort等漏扫工具扫描出来的漏洞问题往往存在误报,这时我们就需要进行人工手动验证漏洞,这里我们有两种思路:
(1)在漏洞工具中,进行多次的重复测试,AWVS、APPSCAN、Netspark、webspectort中都有重复测试漏洞问题的功能),将得出的多次结果进行分析和统计,确认漏洞是否存在。
(2)对于特定的漏洞,例如Java反序列漏洞、struts2 各种漏洞、openssl、httpd远程拒绝服务、IIS短文件名、各种应用软件版本低等等,我们只能使用特定的工具或者结合多种方式进行验证。本文基于第二种方式,主要使用了nmap 的脚本功能进行漏洞验证。
由于常见的漏洞问题非常多,本文主要介绍漏洞扫描和渗透测试中会经常遇到的一些漏洞,并且尝试使用namp 对这些被扫描工具扫描出来的漏洞进行人工手动验证,这些仅是命令,至于如何根据出现的结果进行判断是否有漏洞,这个在结果中很容易看出,例如出现 vulnerable-有漏洞
; not vulnerable-无漏洞
。 有结果出来-有漏洞;无结果出来-无漏洞,往后在其他测试中,只需要将scanme.nmap.org 替换成带验证的目标IP 或者网站。
1、Http 拒绝服务
nmap --max-parallelism 800--script http-slowloris scanme.nmap.org
nmap -p 8080 --script http-iis-short-name-brute 61.142.64.176
nmap --script mysql-empty-password 203.195.139.153
1 验证http 中开启了put 方法
nmap --script http-put --script-args http-put.url=/uploads/testput.txt,http-put.file=/root/put.txt 218.19.141.16
2 暴力破解telnet
nmap -p 23 --script telnet-brute --script-args userdb=myusers.lst,passdb=mypwds.lst --script-args telnet-brute.timeout=8s 203.195.139.153
3 使用nmap对某主机进行一系列的证书鉴权检查
nmap --script auth 203.195.139.153
4 使用nmap在局域网内探查更多服务开启情况
nmap --script broadcast 10.10.167.6
5 使用nmap 对常见的服务进行暴力破解
nmap --script brute 203.195.139.153
6 使用nmap 进行基本的扫描
nmap --script default 203.195.139.153 或者 #nmap --sC 203.195.139.153
7 使用nmap 进行信息挖掘
nmap --script discovery 203.195.139.153
8 使用nmap 进行拒绝服务攻击
nmap --script dos 203.195.139.153
9 使用nmap 利用已知的漏洞入侵系统
nmap --script exploit 203.195.139.153
10 使用nmap 进行利用第三方的数据库或资源进行信息收集或者攻击
nmap --script external 203.195.139.153
11 使用nmap 进行模糊测试,发送异常的包到目标机,探测出潜在漏洞
nmap --script fuzzer 203.195.139.153
12 使用nmap 进行入侵,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
nmap --script intrusive 203.195.139.153
13 使用nmap 探测目标机是否感染了病毒、开启了后门等信息
nmap --script malware 203.195.139.153
14 使用nmap 对系统进行安全检查
nmap --script safe 203.195.139.153
15 使用nmap 对目标机进行检查是否存在常见的漏洞
nmap --script vuln 203.195.139.153
16 使用nmap 负责增强服务与版本扫描(Version Detection)功能的脚本
nmap --script version 203.195.139.153
nmap脚本主要分为以下几类,在扫描时可根据需要设置–script=类别这种方式进行比较笼统的扫描:
auth: 负责处理鉴权证书(绕开鉴权)的脚本
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
Nmap除了在CMD里面通过命令行执行,还可以通过提供了可视化图形界面的Zenmap执行命令,Nmap脚本的利用同样可在Zenmap里获得方便的操作。
如何使用nmap中脚本,本文建议,在nmap的图形化界面zenmap 中进行:
(1)在zenmap 界面中,依次点击“profile
”—"New Profile or Command
" (快捷键:Ctrl + P)
(2)完成步骤1后,便会弹出了“ Profile Editor
" 界面:
(3)然后点击“Scripting
” ,将会显示下面的界面:
左侧—脚本的名称,点击勾选该脚本名称前面的小方框,即可使用该脚本;下拉选择其他脚本。
中上方框—脚本的名称、使用情景、使用格式、参考结果;中下框—设置脚本的各种参数。
右侧的大方框------每当点击中下框的某个参数时,此处便会显示那个脚本参数的说明。
(4)当选定了XXX脚本后,一定要点击右框下的“ Save Changes
" .
(5)完成上面的步骤后,我们回到zenmap的主界面。
小结
我们在使用nmap的时候往往忽视它最强大的NSE脚本扫描功能,其实这个庞大的脚本集合能够帮助我们进行网络连接故障诊断、网络流量路径分析、服务器的开放情况和运行情况,甚至还能用来进行端口渗透。在渗透测试中,好好利用nmap及其NSE脚本,往往有意想不到的收获。