网络嗅探和安全审核工具nmap

对于nmap,相信很多安全运维人员并不陌生,它曾经在电影《黑客帝国》中出现过,是黑客和网络安全人员经常用到的工具。

nmap是一款开源免费的网络发现工具,通过它能够找出网络上在线的主机,并测试主机上哪些端口处于监听状态,接着通过端口确定主机上运行的应用程序类型与版本信息,最后利用它还能侦测出操作系统的类型和版本,由此可见,nmap是一个功能非常强大的网络探测工具,同时也成为网络黑客的最爱,因为nmap所实现的这些功能正是黑客入侵网络的一个基本过程。站在安全运维的角度,只有了解了黑客入侵的基本方式和过程,才能有目的、有针对性地进行安全防护,这也正是我们重点介绍nmap这个网络嗅探工具的原因。

一、namp的快速安装使用

从官方网站www.nmap.org下载源码包,然后编译安装即可,编译安装过程无需额外参数,操作如下:

[root@localhost ~]# tar jxvf nmap-7.70.tar.bz2
[root@localhost ~]# cd nmap-7.70
[root@localhost nmap-7.70]# ./configure
[root@localhost nmap-7.70]# make
[root@localhost nmap-7.70]# make install

至此,源码方式安装nmap完成。当然也可以yum方式在线安装:

[root@localhost ~]# yum install nmap

yum方式安装的nmap版本会比较老,大家根据爱好,各取所求即可。

二、nmap的典型用法

nmap主要包含四个方面的功能:主机发现、端口扫描、应用程序及版本侦测、操作系统及版本侦测,在详细介绍每个功能点之前,首先介绍下nmap的典型用法。最简单的nmap命令形式如下:

namp 目标主机

通过这个命令,可以确定目标主机的在线情况和端口的监听状态,如下图所示。

网络嗅探和安全审核工具nmap插图

由输出可知,目标主机172.16.213.51处于“up”状态,并且此主机上开放了22、111、5900、5901等端口,同时还侦测到了每个端口对应的服务,在最后还给出了目标主机网卡的MAC信息。并猜测给出了目标服务器品牌,厉害吧。

这只是nmap最基础的用法,如果希望了解目标主机更多的信息,可以通过完全扫描的方式实现,nmap命令内置了“-A”选项,可以实现对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统识别等完整全面的扫描,命令形式如下:

nmap  -T4  -A  -v 目标主机

其中,“-A”选项用于开启全面扫描;“-T4”指定扫描过程中使用的时序模板,总共有6个等级(0~5),等级越高,扫描速度越快,但也越容易被防火墙或者入侵检测设备发现并屏蔽,所以选择一个适当的扫描等级非常重要,这里推荐使用“-T4”;“-v”参数可显示扫描细节。下图是nmap对某主机的全面扫描过程。

网络嗅探和安全审核工具nmap插图2

从上图中可以看出,整个扫描过程非常详细:第一部分是对主机是否在线进行扫描;第二部分是对端口进行扫描,在默认情况下nmap会扫描1000个最有可能开放的端口,由于只扫描到22、80、3306三个端口处于打开状态,所以在输出中会有“997 closed ports”的描述;第三部分是对端口上运行的应用服务以及版本号进行统计,可以看到,扫描结果非常详细的记录了软件的版本信息;第四部分是对操作系统类型和版本进行探测,从扫描结果来看,还是非常准确的;最后一部分是对目标主机的路由跟踪信息。

看到了吧,nmap真的非常厉害,同时也侧面反映了网络安全的重要性,如果你的服务器没有做安全防护,那么要获取你的信息,真的太容易了。

三、通过nmap对远程主机进行端口扫描

端口扫描是nmap最核心的功能,通过端口扫描可以发现目标主机上TCP、UDP端口的开放情况。nmap在默认状态下会扫描1000个最有可能开放的端口,并将侦测到的端口状态分为6类,分别是:

  • open,表示端口是开放的。
  • closed,表示端口是关闭的。
  • filtered,表示端口被防火墙屏蔽,无法进一步确定状态。
  • unfiltered,表示端口没有被屏蔽,但是否处于开放状态,还需要进一步确定。
  • open|filtered,表示不确定状态,端口可能是开放的,也可能被屏蔽的。
  • closed|filtered,表示不确定状态,端口可能是关闭的,也可能被屏蔽的。

废话不说,直接上例子,看看怎么用nmap执行端口扫描。下面以探测www.abc.com 主机的信息为例,简单演示端口扫描的使用方法。首先,在联网的服务器上执行如下命令:

[root@localhost ~]# nmap -sU -sS -F www.abc.com

执行结果如下图所示:

网络嗅探和安全审核工具nmap插图4

在上图中,参数“-sS”表示使用TCP SYN方式扫描TCP端口,“-sU”表示使用UDP扫描方式扫描目标主机的UDP端口状况,“-F”表示使用快速扫描模式,扫描最可能开放的前100个端口(TCP和UDP各100个端口),由输出可知,有21个端口处于开放或者屏蔽状态,其他179个端口处于关闭状态。

四、通过nmap探测远程主机上运行服务的版本信息

nmap的版本侦测功能主要是用来确定目标主机开放的端口上运行的应用程序及版本信息,nmap的版本侦测支持TCP/UDP协议,支持多种平台的服务侦测,支持IPV6功能,并能识别几千种服务签名,下面介绍下nmap版本侦测的使用方法。

这里以探测172.16.213.120主机上运行的应用程序的版本信息为例,简单演示版本侦测的使用方法。首先,在联网的服务器上执行如下命令:

nmap  -sV  172.16.213.120

其中,“-sV”表示设置nmap进行版本侦测,执行结果如下图所示:

网络嗅探和安全审核工具nmap插图6

从上图中nmap的输出可以看到每个端口对应的服务名称以及详细的版本信息,通过对服务器上运行服务的了解,以及对服务版本的探测,基本能判断出来此服务器是否存在软件漏洞,进而提醒运维管理人员进行端口关闭或升级软件等操作,尽早应对可能出现的安全威胁。

五、nmap操作系统侦测

操作系统侦测主要是对目标主机运行的操作系统类型及版本信息进行检测。nmap拥有丰富的系统指纹库,目前可以识别近3000种操作系统与设备类型。下面介绍下nmap操作系统侦测的使用方法。

下面以探测某外网主机的操作系统类型为例,简单演示操作系统侦测的使用方法。首先,在联网的服务器上执行如下命令:

nmap -O --osscan-guess  118.18.8.188

执行结果如下图所示:

网络嗅探和安全审核工具nmap插图8

上图中nmap指定了两个选项,含义如下:

  • “-O”选项:表示设置nmap进行操作系统侦测.
  • –osscan-guess选项:表示猜测目标主机的操作系统类型,nmap会给出可能性的比率,用户可以根据提供的比率综合判断操作系统类型。

nmap命令首先执行了主机发现操作,接着执行了端口扫描操作,然后根据端口扫描的结果进行操作系统类型的侦探,获取到的信息有设备类型、操作系统版本、操作系统的CPE描述、操作系统的细节和网络距离.如果不能确定操作系统的版本,会猜测每个系统版本的可能性比率,例如对于扫描的此主机,nmap给出最可能的操作系统版本是Microsoft Windows Vista|7|2008,而事实上,此主机确实安装了Microsoft Windows 2008 server这个版本的系统。由此可见,nmap的操作系统侦测功能是多么的强大。

六、nmap通过脚本进行扫描渗透

nmap默认自带了很多应用脚本,这些脚本可以完成暴力破解、拒绝服务攻 击、通过已知的漏洞入 侵系统、探测目标机是否感染了病毒等功能。通过脚本扫描时需要设置“–script”参数这种方式进行比较扫描,常见的脚本参数有如下几个:

  • -sC:等价于–script=default,使用默认类别的脚本进行扫描 可更换其他类别
  • –script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
  • –script=all 调用所有脚本扫描

下面看几个例子:

1、检查mysql空密码

[root@localhost ~]# nmap --script=mysql-empty-password localhost

如下图所示:

网络嗅探和安全审核工具nmap插图10

2、尝试破解mysql密码

如果不是空密码,则可以使用自带的暴力破解功能尝试破解:

[root@localhost ~]# nmap -T5 -p 3306 --script=mysql-brute.nse  172.16.213.236

其中,mysql-brute.nse是一个nmap自带的暴力破解脚本,nmap安装好后,默认在/usr/local/share/nmap/scripts/(源码安装方式后的路径)目录下有nmap自带的所有脚本。扫描结果如下图所示:

网络嗅探和安全审核工具nmap插图12
可以看出,因为172.16.213.236密码太简单,已经被破解了。

3、获取远程主机mysql库信息

如果知道了用户名与密码,就可以做很多事情了,例如可以枚举数据库中的库信息、用户信息:

[root@localhost ~]#nmap -sV --script=mysql-databases --script-args mysqluser=root,mysqlpass=123456  172.16.213.236
网络嗅探和安全审核工具nmap插图14

从上图可以看到,已经获取了此数据库中的所有库信息,继续操作,查看系统这个mysql中有哪些用户,执行如下命令:

[root@localhost ~]#nmap -T5 -p 3306 --script=mysql-users.nse --script-args mysqluser=root,mysqlpass=123456 172.16.213.236
网络嗅探和安全审核工具nmap插图16

从上图可以看出,mysql库中的用户都扫描查询出来了。

最后,nmap还支持通配符描述,对同一应用的所有脚本扫描,可这样执行:

[root@localhost ~]# nmap --script=mysql-*  172.16.213.236

这里我们以扫描mysql为例做了一些nmap的高级功能介绍,其实除了mysql,还能对各种常见应用,例如redis、telnet、oracle、ftp、smtp、pop3、ms-sql、pqsql等各种常见的软件进行扫描和测试,用法和mysql完全相同。大家不妨都动手测试一下,顺便检查一下自己的应用是否存在漏洞和安全威胁。

发表评论