Nmap是一款应用最广泛的安全扫描工具,备受渗透人员和黑客的青睐,在对目标服务器进行扫描的时候,能够快速识别潜在的漏洞。NSE(Nmap Scripting Engine)作为Nmap的一部分,具有强大灵活的特性,允许使用者编写自己的脚本来完成各种各样的网络扫描任务。Nmap本身内置有丰富的NSE脚本,可以非常方便的利用起来,当然也可以使用定制化的脚本完成个人的需求。今天就要讲讲如何利用Nmap的Scripts检测CVE漏洞。
Nmap有一个少为人知的部分是NSE脚本引擎,NSE是Nmap的最强大和灵活的功能之一。它允许用户编写(并共享)简单的脚本来
自动执行各种网络任务。Nmap内置了全面的NSE脚本集合,用户可以轻松使用这些Nse脚本或者创建自定义Nse脚本以满足他们的个性化需求。
1 | 1. nmap -sS -T2 -p 1-500 192.168.1.1 -oN metscan.txt |
使用NSE脚本更快地查找更多漏洞
在这里,我将一次演示两个NSE脚本,nmap-vulners和vulscan。这两种脚本的设计都是为了增强Nmap的版本检测,为特定服务(如SSH,RDP,SMB等)生成相关的CVE信息。CVE或通用漏洞披露是安全研究人员使用的一种方法,它利用数据库对单个漏洞进行编目和引用。
例如,漏洞利用数据库是公开披露的漏洞的流行数据库。Exploit-DB使用CVE编制与特定版本的服务(如“SSH v7.2”)相关的单个漏洞和漏洞。以下是Exploit-DB的屏幕截图…请注意分配给此特定SSH漏洞的CVE编号。
nmap-vulners和vulscan都可以使用CVE记录来增强Nmap的版本检测。Nmap将识别已扫描服务的版本信息。NSE脚本将获取这些信息并生成可用于利用该服务的已知CVE。这使查找漏洞变得更简单。
下面是不使用NSE脚本的Nmap版本检测示例。Nmap使用版本“OpenSSH 4.3”在端口22上发现了一个SSH服务。
使用NSE脚本的服务器的例子。我们可以看到现在有更多的信息输出。
nmap-vulners NSE脚本(以红色突出显示)报告了过去几年中披露的十几个CVE。nmap-vulners CVEs按严重性组织,“9.3”开始最严重,位于列表顶部,因此值得深入研究。vulscan NSE脚本(以蓝色突出显示)还报告了十多个与OpenSSH v4.3相关的有趣漏洞。
这两个NSE脚本在显示与易受攻击的服务相关的有用信息方面做得非常出色。每次我们使用NSE脚本时,Nmap-vulners都会查询Vulners exploit数据库。另一方面,Vulscan会在我们的计算机上查询当我们第一次下载vulscan时预先配置的本地数据库。
现在,在上面的屏幕截图中有很多内容,所以让我们先来学习如何在使用它们之前安装这些NSE脚本。
安装NSE脚本
步骤1 安装Nmap-Vulners
要安装nmap-vulners脚本,我们首先使用cd切换到Nmap脚本目录
1 | cd /usr/share/nmap/scripts/ |
然后,通过在终端中输入以下命令来克隆nmap-vulners GitHub存储库。
git clone https://github.com/vulnersCom/nmap-vulners.git
nmap-vulners安装后不需要配置
第2步 安装Vulscan
要安装vulscan,我们还需要将GitHub存储库克隆到Nmap脚本目录中。键入下面的命令来执行此操作。
git clone https://github.com/scipag/vulscan.git
如前所述,vulscan利用本地存储在我们计算机上的预配置数据库。我们可以在vulscan目录的根目录中查看这些数据库。运行以下命令列出可用的数据库。
ls vulscan/*.csv
Vulscan支持许多优秀的漏洞数据库。这是一个完整的列表:
· cve.csv
为确保数据库完全保持最新,我们可以使用vulscan /utilities/updater/目录中的updateFiles.sh脚本。通过在终端中输入以下命令更改到更新程序目录。
1 | cd vulscan/utilities/updater/ |
然后,使用下面的命令确保该文件具有在计算机上执行的适当权限。
chmod+x updateFiles.sh
然后,我们可以通过在我们的终端中输入以下命令来执行和运行脚本。
1 | ./updateFiles.sh |
步骤3 使用Nmap-Vulners进行扫描
使用NSE脚本很简单。我们所要做的就是将–script参数添加到我们的Nmap命令中,并告诉Nmap使用哪个NSE脚本。要使用nmap-vulners脚本,我们将使用下面的命令。
1 | nmap --script nmap-vulners -sV <目标IP> |
该-sV是绝对必要的。使用-sV,我们告诉Nmap探测版本信息的目标地址。如果Nmap不生成版本信息,nmap-vulners将不会有任何数据来查询Vulners数据库。使用这些NSE脚本时始终使用-sV。
步骤4使用Vulscan进行扫描
我们可以像nmap-vulners一样使用vulscan NSE脚本:
1 | nmap --script vulscan -sV <目标IP> |
默认情况下,vulscan会一次查询所有前面提到的数据库!正如我们在上面的图片中看到的那样,消化的信息量非常大。这比我们需要的信息要多得多。我强烈建议一次只查询一个数据库。我们可以通过将vulscandb参数添加到我们的Nmap命令并指定数据库来实现此目的,如下面的示例所示。
1 | nmap --script vulscan --script-args vulscandb = database_name -sV <目标IP> |
第5步 合并为一个命令
NSE脚本作为安全扫描器显着提高了Nmap的多功能性,范围。为了充分利用Nmap的版本扫描,我们可以在一个命令中使用nmap-vulners和vulscan。要执行此操作,请在终端中输入以下命令。
1 | nmap --script nmap-vulners,vulscan --script-args vulscandb = scipvuldb.csv -sV <目标IP> |
通过以上的介绍我们知道了如何利用vulscan和nmap-vulners进行服务漏洞扫描,能够快速的帮我们找到存在漏洞的服务,及时进行修复,保证服务的安全性
使用系列的nmap NSE 进行检查
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)
Nmap提供的脚本命令行参数如下:
-sC: 等价于--script=default,使用默认类别的脚本进行扫描。
--script=<Lua scripts>: <Lua scripts>
使用某个或某类脚本进行扫描,支持通配符描述
--script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数
--script-args-file=filename: 使用文件来为脚本提供参数
--script-trace: 显示脚本执行过程中发送与接收的数据
--script-updatedb: 更新脚本数据库
--script-help=<Lua scripts>
: 显示脚本的帮助信息,其中<Lua scripts>
部分可以逗号分隔的文件或脚本类别。
1 |
|
如何新建一个nmap 脚本扫描
至于如何使用nmap中脚本,本文建议,在nmap的图形化界面zenmap 中进行:
1 在zenmap 界面中,依次点击“profile”---"New Profile or Command" (快捷键:Ctrl + P)
2 完成步骤1后,便会弹出了“ Profile Editor" 界面:
3 然后点击” Scripting“ ,将会显示下面的界面:
左侧---脚本的名称,点击勾选该脚本名称前面的小方框,即可使用该脚本;下拉选择其他脚本。
中上方框---脚本的名称、使用情景、使用格式、参考结果;中下框---设置脚本的各种参数。
右侧的大方框------每当点击中下框的某个参数时,此处便会显示那个脚本参数的说明。
4 当选定了XXX脚本后,一定要点击右框下的” Save Changes" .
5 完成上面的步骤后,我们回到zenmap的主界面,
Metasploit结合Nmap(lua语言)
nmap -sS -p 3389 -oG- 221.0.90.0/24 | grep open 显示3389端口开放的主机
nmap --script=default 192.168.211.137 搜集各种应用服务的信息
nmap --script=vuln 192.168.211.137
nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.211.137 smb已知几个严重漏洞
nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.137.4 xp_cmdshell 执行命令
nmap -p 1433 --script ms-sql-dump-hashes.nse --script-args mssql.username=sa,mssql.password=sa 192.168.137.4 dumphash值
nmap -p3306 --script=mysql-users.nse --script-args=mysqluser=root 192.168.137.4 列出所有mysql用户
nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target MAC地址欺骗
nmap -p80 --script http-brute --script-args http-brute.path=/admin/
nmap -p80 --script http-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt
nmap --script http-brute --script-args brute.mode=user
nmap --script http-brute --script-args brute.mode=pass
nmap -p80 --script http-default-accounts
nmap -p80 --script http-wordpress-brute --script-args http-wordpressbrute.threads=5
nmap -p80 --script http-joomla-brute
nmap -p80 --script http-waf-detect --script-args=”http-waf-detect.aggro”
nmap -p80 --script http-unsafe-output-escaping
nmap -p80 --script http-sql-injection
nmap -p80 --script http-sql-injection --script-args http.useragent=”Mozilla 42″
nmap -sV --script=mysql-databases --script-args mysqluser=root,mysqlpass=toor 192.168.195.130 列出数据库名称
nmap -sV --script=mysql-users 192.168.195.130 用户审计
sudo nmap --script mysql-empty-password 192.168.195.130 检查root空口令
nmap --script=mysql-brute localhost 暴力破解
nmap --script=mysql-info localhost Mysql信息
nmap -p25 -Pn --script smtp-brute target 暴力破解SMTP密码
nmap -p80 --script=http-email-harvest target 谷歌搜索发现有效的电子邮件帐户
nmap –script=mysql-vuln-cve2012-2122 localhost 使用CVE-2012-2122
漏洞银行
nmap --script=struts_02-045.nse --script-args filename=***.jsp 192.168.211.137 查看某个网页有没有shell
nmap -p80,139,445 --script=smb-vul*
开始扫描→→主机发现→→端口扫描→→版本侦查→→OS侦测(系统)
主机发现:采用不同判断方式
端口扫描:通过正则匹配对比指纹
版本侦测:通过侦测banner(也就是状态码)
OS侦测 :nmap-os-db
Nmap Engine
开始扫描→→主机发现→→端口扫描→→nse脚本→→动作处理
嘶吼
cd /usr/share/nmap/scripts/ Nmap脚本目录
ls vulscan/*.csv vulscan目录的根目录中查看这些数据库
cd /usr/share/nmap/scripts/utilities/updater/ ./updateFiles.sh 更新数据库
nmap --script nmap-vulners -sV <目标IP> Nmap-Vulners进行扫描
nmap --script vulscan -sV <目标IP> 使用Vulscan进行扫描
nmap --script vulscan --script-args vulscandb=database_name -sV <目标IP>
nmap --script vulscan --script-args vulscandb=scipvuldb.csv -sV <目标IP>
nmap --script vulscan --script-args vulscandb=exploitdb.csv -sV <目标IP>
nmap --script vulscan --script-args vulscandb=securitytracker.csv -sV <目标IP>
nmap --script=http-vuln-cve2017-5638.nse 192.168.211.137
nmap常见漏洞检测
1 | ## |