0x00 前言
大家都知道在平时的漏扫中,AWVS、APPSCAN、Netspark、webspectort 等漏扫工具扫描出来的漏洞问题往往存在误报,这时我们就需要进行人工手动验证漏洞,这里我们有两种思路:
一是在漏洞工具中,进行多次的重复测试,AWVS、APPSCAN、Netspark、webspectort 中都有重复测试漏洞问题的功能),将得出的多次结果进行分析和统计,确认漏洞是否存在。
二是对于特定的漏洞,例如 Java 反序列漏洞、struts2 各种漏洞、openssl、httpd 远程拒绝服务、IIS 短文件名、各种应用软件版本低等等,我们只能使用特定的工具或者结合多种方式进行验证。本文基于第二种方式,主要使用了 nmap 的脚本功能进行漏洞验证
0x01 nmap 的介绍
Nmap 是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
在长达 3.5 年之后,Fyodor 终于发布了著名开源网络检索工具的最新版本 Nmap7。Nmap 是最受欢迎的开源网络映射器之一此外,Nmap7 这款自动化的扫描器能够轻易检测到 Heartbleed、POODLE、FREAK 等严重漏洞。Nmap7 中对 ssl-enum-ciphers(SSL 枚举密码)脚本替换了新的实现算法,使得它能够通过枚举 SSL/TLS 协议版本和密码套件来快速分析 TLS 连接,它还能够迅速识别部署问题。另外,使用 Nmap7 能够轻易发现包含漏洞的服务器,Nmap7 中包含了对提速和扫描实现的改进。这个工具的新版本包括一个更新、更快的 Nmap 脚本引擎(Nmap Scripting Engine,NSE),同时它还允许用户编写 Lua 脚本。
0x02 使用 nmap 检测多种漏洞
由于常见的漏洞问题非常多,本文主要介绍漏洞扫描和渗透测试中会经常遇到的一些漏洞,并且尝试使用 namp 对这些被扫描工具扫描出来的漏洞进行人工手动验证,这些仅是命令,至于如何根据出现的结果进行判断是否有漏洞,这个在结果中很容易看出,例如出现 vulnerable- 有漏洞;not vulnerable- 无漏洞。有结果出来 - 有漏洞;无结果出来 - 无漏洞,往后在其他测试中,只需要将 scanme.nmap.org 替换成带验证的目标 IP 或者网站。
1 http 拒绝服务
nmap –max-parallelism 800–script http-slowloris scanme.nmap.org
2 IIS 短文件泄露
nmap -p 8080 –script http-iis-short-name-brute 61.142.64.176
3 ftp 弱口令暴力破解
nmap –script ftp-brute –script-args brute.emptypass=true,ftp-brute.timeout=30,userdb=/root/dirtionary/usernames.txt,brute.useraspass=true,passdb=/root/dirtionary/passwords.txt,brute.threads=3,brute.delay=6 203.195.139.153
4 检测 CVE-2011-2523 中的 ftp-vsftpd-backdoor
nmap -T2 –script ftp-vsftpd-backdoor 211.139.201.240
5 验证 http 中开启的 -methods 方法
nmap -T3 –script http-methods –script-args http.test-all=true,http.url-path=/www.haoshangjia.com
6 验证 HTTP.sys 远程代码执行
nmap -sV –script http-vuln-cve2015-1635 203.195.139.153
7 验证 SSL POODLE information leak
nmap -sV -p 443 –version-light –script ssl-poodle 218.19.141.16
8 验证 http 中开启了 put 方法
nmap –script http-put –script-args http-put.url=/uploads/testput.txt,http-put.file=/root/put.txt 218.19.141.16
9 验证 mysql 匿名访问
nmap –script mysql-empty-password 203.195.139.153
10 验证 cve2015-1427 漏洞
nmap –script http-vuln-cve2015-1427 –script-args command=ls 203.195.139.153
11 验证 cve2014-8877 漏洞
nmap -Pn –script http-vuln-cve2014-8877 –script-args http-vuln-cve2014-8877.cmd=dir,http-vuln-cve2014-8877.uri=/wordpress 42.96.170.128
12 验证 Cisco ASA 中的 CVE-2014-2126,CVE-2014-2127,CVE-2014-21,CVE-2014-2129 漏洞
nmap -p 443 –script http-vuln-cve2014-2126,http-vuln-cve2014-2127,http-vuln-cve2014-2128,http-vuln-cve2014-2129 203.195.139.153
13 验证低安全的 SSHv1,sslv2 协议
nmap –script sshv1,sslv2 www.haoshangjia.com
14 验证 CVE-2014-0224 ssl-ccs-injection
nmap -Pn –script ssl-ccs-injection 203.195.139.153
15 验证 ssl-cert 证书问题
nmap -v -v –script ssl-cert 203.195.139.153
16 验证 SSL 证书的有限期
nmap -Pn –script ssl-date www.haoshangjia.com
17 验证 CVE-2014-0160 OpenSSL Heartbleed bug
nmap -p 443 –script ssl-heartbleed,ssl-known-key 203.195.139.153
18 验证 Debian OpenSSL keys
nmap -p 443 –script ssl-known-key 203.195.139.153
18 验证弱加密 SSL 套件
nmap –script ssl-enum-ciphers 203.195.139.153
20 验证 CVE 2015-4000
nmap –script ssl-dh-params www.haoshangjia.com
21 验证多种 SSL 漏洞问题
nmap 203.195.139.153 –vv –script sshv1,ssl-ccs-injection,ssl-cert,ssl-date,ssl-dh-params,ssl-enum-ciphers,ssl-google-cert-catalog,ssl-heartbleed,ssl-known-key,sslv2
22 在网络中检测某主机是否存在窃听他人流量
nmap –script sniffer-detect 10.10.167.5
23 暴力破解 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
24 验证 telnet 是否支持加密
nmap –script telnet-encryption 203.195.139.153
25 精准地确认端口上运行的服务
nmap -sV –script unusual-port 42.96.170.128
26 收集 VNC 信息
nmap –script vnc-info 203.195.139.153
27 暴力破解 VNC
nmap –script vnc-brute –script-args brute.guesses=6,brute.emptypass=true,userdb=/root/dictionary/user.txt,brute.useraspass=true,passdb=/root/dictionary/pass.txt,brute.retries=3,brute.threads=2,brute.delay=3 42.96.170.128
# 这个脚本挺长的,很多详细的参数,请参阅脚本的具体参数。
0x03 使用系列的 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 –script auth 203.195.139.153
2 使用 nmap 在局域网内探查更多服务开启情况
nmap –script broadcast 10.10.167.6
3 使用 nmap 对常见的服务进行暴力破解
nmap –script brute 203.195.139.153
4 使用 nmap 进行基本的扫描
nmap –script default 203.195.139.153
#nmap –sC 203.195.139.153
5 使用 nmap 进行信息挖掘
nmap –script discovery 203.195.139.153
6 使用 nmap 进行拒绝服务攻击
nmap –script dos 203.195.139.153
7 使用 nmap 利用已知的漏洞入侵系统
nmap –script exploit 203.195.139.153
8 使用 nmap 进行利用第三方的数据库或资源进行信息收集或者攻击
nmap –script external 203.195.139.153
9 使用 nmap 进行模糊测试,发送异常的包到目标机,探测出潜在漏洞
nmap –script fuzzer 203.195.139.153
10 使用 nmap 进行入侵,此类脚本可能引发对方的 IDS/IPS 的记录或屏蔽
nmap –script intrusive 203.195.139.153
11 使用 nmap 探测目标机是否感染了病毒、开启了后门等信息
nmap –script malware 203.195.139.153
12 使用 nmap 对系统进行安全检查
nmap –script safe 203.195.139.153
13 使用 nmap 对目标机进行检查是否存在常见的漏洞
nmap –script vuln 203.195.139.153
14 使用 nmap 负责增强服务与版本扫描(Version Detection)功能的脚本
nmap –script version 203.195.139.153
0x04 如何新建一个 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 的主界面,
0x05 结论
本文首先介绍使用 nmap 的基本背景和知识,对它有个基本全面的了解;然后详细说明了在使用 nmap 进行验证多种常见漏洞,这些漏洞验证都是我们在漏扫和渗透测试中经常见到的;接着我们介绍使用一组 nmap 脚本进行基线检查,简单批量地使用一系列的脚本对系统进行信息收集和漏洞检测;最后我们详细介绍了如何使用新建和使用一个 nmap 的脚本,帮助读者自己独立使用 NSE。
我们在使用 nmap 的时候往往忽视它最强大的 NSE 脚本扫描功能,其实这个庞大的脚本集合能够帮助我们进行网络连接故障诊断、网络流量路径分析、服务器的开放情况和运行情况,甚至还能用来进行端口渗透。在渗透测试中,好好利用 nmap 及其 NSE 脚本,往往有意想不到的收获。