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脚本,往往有意想不到的收获。