1、常见的扫描结果
在开启了防火墙的win7 sp1个人系统上用-A 参数扫描几乎无法扫描出任何信息。
端口状态全是:Filtered。关闭防火墙后可以扫描出开放端口及服务版本信息。由此可见对于个来电脑来说开启防护墙是非常重要的。
端口状态:filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。
扫描一个常见的服务器一般情况下结果类似这样:
xx.xx.com的扫描结果
root@kali:~# nmap xx.xx.xx.85
Starting Nmap 7.70 ( https://nmap.org ) at 2019-0x-31 21:30 EST
Nmap scan report for xx.xx.xx.85
Host is up (0.0099s latency).
Not shown: 996 filtered ports
PORT STATE SERVICE
80/tcp open http
113/tcp closed ident
443/tcp open https
9999/tcp open abyss
2、扫描参数与绕过防火墙
默认情况下,Nmap执行一个TCP的 SYN扫描,它还支持其他可能发现更多开放端口的选项扫描方式。没有经验的用户和刚入门者总是用默认的SYN扫描解决每个问题。 既然Nmap是免费的,掌握端口扫描的唯一障碍就是知识。
关于如何使用nmap 绕过防火墙,还是得多观察流量包的情况,及时调整绕过策略,组合多种策略。
调整扫描参数的意义在于:1、绕过安全措施发现更多开发端口信息
- 更快的得到需要的主机或端口信息。
除使用防火墙限止网络的行为外,使用入侵检测系统(IDS)的公司也不断增加。由于Nmap 常用于攻击前期的扫描,因此所有主流的IDS都包含了检测Nmap扫描的规则。 现在,这些产品变形为入侵预防系统(IPS),可以主 动地阻止可疑的恶意行为。不幸的是,网络管理员和IDS厂商通过分析报文 来检测恶意行为是一个艰苦的工作,有耐心和技术的攻击者,在特定Nmap选项 的帮助下,常常可以不被IDS检测到。同时,管理员必须应付大量的误报结果, 正常的行为被误判而被改变或阻止。
Nmap 官方手册中提到Nmap不提供检测和破坏防火墙及IDS系统的魔弹(或Nmap选项),它使用的是技术和经验,这超出了本参考手册的范围,但手册中描述了相关的选项和完成的工作。
3、脚本引擎NSE
NSE NMAP脚本引擎是最重要的功能之一它不仅可以漏洞检测还可以漏洞利用。
- -sc 选型是采用一个默认脚本来扫描网络
- nmap --script=default 192.168.137.* 或者 nmap -sC 192.168.137.*默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击
- -sP --script discovery 会尝试所有所有可能的方法来扫描,这样我将得到更多有趣的信息。
- --script-trace: 查看脚本执行过程
- -A: 同时进行版本探测和脚本扫描
- 为了不进行主机发现也不进行端口扫描,直接使用自定义的脚本探测。可以使用下面的选项:-Pn -sn --script
- 可根据需要设置--script=类别这种方式进行比较笼统的扫描
类别如下:https://nmap.org/book/nse-usage.html#nse-categories
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
每个脚本的实现中会有categories = {"vuln", "safe", "external"} 类似的一行代码表明脚本属于哪个类别。
脚本位置/usr/share/nmap/script/ 脚本信息查看:可以通过查看script.db
- nmap --script=mysql-* 192.168.137.4 对某应用/服务的所有脚本扫描
- --script-args=x=x,y=y: 为脚本提供参数
- --script-args-file=filename: 使用文件来为脚本提供参数
- --script-trace: 显示脚本执行过程中发送与接收的数据
- --script-updatedb: 更新脚本数据库
- --script-help=<Lua scripts>: 显示脚本的帮助信息
您也可以使用布尔表达式来选择脚本,这些表达式可以使用和 , 或者和非运算符来构建。 布尔表达式中的名称可以是一个类别,一个来自script.db的文件名,或者全部。
例如:要加载所有脚本,并忽略vuln类别中的脚本,请在终端上运行此命令。
$ nmap --script "not vuln" 192.168.56.10
找到所有的NSE脚本的最简单方法是使用find命令如下所示。
find / -name ‘*.nse’ 或者locate *.nse
下载一个新脚本如http-google-email.nse之后,我们需要手动更新脚本数据库,执行如下的命令:
Nmap -script-updatedb
更新完成后,就可以运行脚本了。Nmap -p80 –script http-google-email <目标>
Nmap提供5种不同的输出格式包括方便程序利用的xml和html格式
Github上的一些较有针对性Nmap脚本,可自行搜索、下载。
写自己的NSE脚本,请查看本指南: https : //nmap.org/book/nse-tutorial.html
4、利用nmap-vulners.nse和vulscan.nse两个脚本发现CVE漏洞
nmap-vulners NSE 脚本(以红色突出显示)报告了过去几年中披露的十几个 CVE。显示时按严重性排序,"9.3" 开始最严重,位于列表顶部,因此值得深入研究。vulscan NSE 脚本(以蓝色突出显示)还报告了十多个与 OpenSSH v4.3 相关的有趣漏洞。
这两个 NSE 脚本在显示与易受攻击的服务相关的有用信息方面做得非常出色。每次我们使用 NSE 脚本时,Nmap-vulners 都会查询Vulners exploit 数据库。另一方面,Vulscan 会在我们的计算机上查询当我们第一次下载 vulscan 时预先配置的本地数据库。
安装这些脚本:
1 安装 Nmap-Vulners
要安装 nmap-vulners 脚本,我们首先使用cd切换到 Nmap 脚本目录
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 支持许多优秀的漏洞数据库。这是一个完整的列表:
· scipvuldb.csv
· cve.csv
· osvdb.csv
· securityfocus.csv
· securitytracker.csv
· xforce.csv
· expliotdb.csv
· openvas.csv
为确保数据库完全保持最新,我们可以使用 vulscan /utilities/updater/ 目录中的 updateFiles.sh 脚本。通过在终端中输入以下命令更改到更新程序目录。
cd vulscan/utilities/updater/
然后,使用下面的命令确保该文件具有在计算机上执行的适当权限。
chmod+x updateFiles.sh
然后,我们可以通过在我们的终端中输入以下命令来执行和运行脚本。
./updateFiles.sh
3 使用 Nmap-Vulners 进行扫描
使用 NSE 脚本很简单。我们所要做的就是将– script 参数添加到我们的 Nmap 命令中,并告诉 Nmap 使用哪个 NSE 脚本。要使用 nmap-vulners 脚本,我们将使用下面的命令。
nmap --script nmap-vulners -sV
该 -sV 是绝对必要的。使用 -sV,我们告诉 Nmap 探测版本信息的目标地址。如果 Nmap 不生成版本信息,nmap-vulners 将不会有任何数据来查询 Vulners 数据库。使用这些 NSE 脚本时始终使用 -sV。
4、使用 Vulscan 进行扫描
我们可以像 nmap-vulners 一样使用 vulscan NSE 脚本:
nmap --script vulscan -sV
默认情况下,vulscan 会一次查询所有前面提到的数据库!正如我们在上面的图片中看到的那样,消化的信息量非常大。这比我们需要的信息要多得多。我强烈建议一次只查询一个数据库。我们可以通过将 vulscandb 参数添加到我们的 Nmap 命令并指定数据库来实现此目的,如下面的示例所示。
nmap --script vulscan --script-args vulscandb = exploitdb.csv -sV
5、合并为一个命令
nmap --script nmap-vulners,vulscan --script-args vulscandb = scipvuldb.csv -sV -p22 192.XX.XX.XX