本文最后更新于 2024-06-17,文章内容可能已经过时。

NMAP使用心得总结

一 概述

enter image description here

​ nmap是一个网络探测和安全扫描工具,系统管理者和个人可以使用这个软件扫描大型的网络,获取
那台主机正在运行以及提供什么服务等信息。

nmap可用于

  • 检测活在网络上的主机(主机发现)。

  • 检测主机上开放的端口(端口发现)。

  • 检测到相应的端口(服务发现)的软件和版本

  • 检测操作系统,硬件地址,以及软件版本

  • 检测脆弱性的漏洞(Nmap的脚本)

总结:NMAP用于渗透测试中的信息收集

二 NAMP常用语法

扫描常见漏洞

Nmap的默认脚本目录:

/usr/share/nmap/scripts/

用法

/usr/share/nmap/scripts nmap --script=vuln [ip地址]

Nmap具有漏洞扫描的功能.可以检查主机或网段是否存在常见的漏洞

nmap --script=vuln [ip地址]

image-20231115224131498

如图所示,存在CVE-2007-6750漏洞

检测windows 7 系统是否存在ms17-010

这个命令将扫描目标IP地址的445端口,并使用smb-vuln-ms17-010脚本来检测是否存在ms17-010漏洞。如果目标系统存在该漏洞,则输出将显示漏洞的详细信息。如果目标系统没有该漏洞,则输出将显示相应的消息。

nmap -p 445 --script smb-vuln-ms17-010 <目标IP地址>

鉴权扫描:

使用–script=auth可以对目标主机或目标主机所在网段进行应用脚本开放端口检测

nmap --script=auth [ip地址]

image-20231115222042813

暴力破解攻击

nmap具有暴力破解的功能,对数据库.SMB,SNMP等进行简单密码爆破

nmap --script=brute [ip地址]

设置扫描时间间隔

nmap -T【0-5】 时间参数模板
-T0 非常慢,用于IDS逃逸
-T1 比较慢,用于IDS逃逸
-T2 降低速度以降低对宽带的消耗
-T3 默认,根据目标反应时间自动调整
-T4 快速扫描,常用,需要要在很好的网络环境下扫描,请求可能会淹没目标
-T5 极速扫描,牺牲准确性
-sS 半开放扫描。nmap发送SYN包到远程主机,它不会产生任何会话不需要通过完整的握手,就能获取主机的信息,因此不会在主机上产生任何日志记录
-sT TCP connect扫描,需要完成三次握手,只用于找到TCP和UDP端口
-O 检测操作系统,开放的端口
-sA 用于穿越防火墙,速度慢
-sV 端口服务及信息
-v 显示扫描进程的详细信息
-P0 扫描之前不使用ping,适用于防火墙禁止ping
-A 包含了-sV -O ,全面系统检测

三 NMAP扫描案例

1 主机探测

image-20240104150351399

2 扫描主机开放的端口

在nmap后面直接跟主机IP (默认扫描1000个常用端口)

nmap 192.172.10.25

3 扫描指定端口

nmap 192.172.10.25 -p 80
nmap 192.172.10.25 -p 80,3306
nmap 192.172.10.25 -p 1-65535

​ 扫描全部端口

nmap 192.168.92.138 -p-   

nmap 192.168.92.138 -p1-65535

4 指定扫描方式

TCP扫描 -sT

nmap -sT 192.172.10.23

image-20240104154003411

SYN半连接扫描 -sS

nmap -sT 192.172.10.23

image-20240104154028256

image-20240104175615298

隐秘扫描

只适用于Linux

nmap -sF 192.172.10.23  # scan FIN
nmap -sN 192.172.10.23	# scan None协议
nmap -sX 192.172.10.23	# xmax tree包 FIN URG PSH三个协议

image-20240104154240359

服务版本识别扫描

nmap -sV 192.172.10.23 

image-20240104155430368

本质上-sV使用的就是telnet,来获取的指纹信息。

操作系统版本扫描

nmap  192.172.10.23 -O

image-20240104155913557

全扫描

nmap -A 192.172.10.23            

5 持久化

1)将扫描的结果导出为文本文件

nmap 192.172.10.23 -p 3306 -oN result.txt

2)将扫描结果导出为xml文件

nmap 192.172.10.23 -p 3306 -oX result.txt

四 NMAP端口状态解析

端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。

open: 开发的端口
closed :关闭的端口,对于nmap也是可访问的,它接收 nmap探测报文并作出响应。但没有应用程序在其上监听。
filtered : 被防火墙过滤的端口,由于包过滤阻止探测报文到达端口,nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则或者主机上的软件防火墙。
unfiltered :未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。只有用于映射防火墙规则集的ACK扫描才会把端口分类到这个状态。
open | filtered :无法确定端口是开放还是被过滤,开放的端口不响应就是- 个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP, IP协议,FIN, Null等扫描会引起。
closed | filtered: (关闭或者被过滤的)无法确定端口是关闭的还是被过滤的。

五 常用内置脚本

可以使用内置脚本进行功能扩展,命令语法为: nmap --script=brute 192.168.80.149

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

所有扫描脚本,可以查看Kali下的目录:/usr/share/nmap/scripts,具体各个脚本的用法及参数,参考:https://nmap.org/nsedoc/

脚本实战

auth 负责处理鉴权证书(绕开鉴权)的脚本

┌──(root㉿kali)-[~]
└─# nmap --script=auth  192.172.10.25 -p22
Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-04 16:48 CST
Nmap scan report for 192.172.10.25
Host is up (0.00044s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-publickey-acceptance: 
|_  Accepted Public Keys: No public keys accepted
| ssh-auth-methods: 
|   Supported authentication methods: 
|     publickey
|     gssapi-keyex
|     gssapi-with-mic
|_    password
MAC Address: 00:0C:29:11:1D:82 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 8.37 seconds

brute爆破

指定爆破脚本或爆破文件

nmap --script ssh-brute  192.172.10.25 -p22

指定字典爆破

map -p3306 --script=brute --script-args 'userdb=./usertest.txt,passdb=./password-3000.txt' 192.168.112.188

vuln扫描常见漏洞

nmap --script=vuln  ip

扫描当前系统的登录方式

nmap --script=auth 192.168.92.145 -p22
└─# nmap --script=auth 192.168.92.145 -p22
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-03 14:09 CST
Nmap scan report for 192.168.92.145
Host is up (0.00033s latency).

PORT   STATE SERVICE
22/tcp open  ssh
| ssh-auth-methods: 
|   Supported authentication methods: 
|     publickey
|     gssapi-keyex
|     gssapi-with-mic
|_    password
| ssh-publickey-acceptance: 
|_  Accepted Public Keys: No public keys accepted
MAC Address: 00:0C:29:D4:E3:F0 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 7.55 seconds

爆破

用于爆破目标系统上的一些服务 :比如 :mysql、redis 等

比如mysql : 爆破时,他的用户必须是允许远程连接的,否则是无法爆破 。

image-20240603141756744

create user 'wugd' @'localhost' identified by '123456';
grant all privileges on *.* to "wgd"@"%" identified by "123456";
flush privileges;
nmap --script=mysql-brute --script-args userdb=/tmp/user.txt,passdb=/tmp/pass.txt 192.168.92.145 -p3306
nmap -p3306 --script=brute --script-args 'userdb=/tmp/user.txt,passdb=/tmp/pass.txt' 192.168.92.145
─# nmap --script=mysql-brute --script-args userdb=/tmp/user.txt,passdb=/tmp/pass.txt 192.168.92.145 -p3306
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-03 15:18 CST
Nmap scan report for 192.168.92.145
Host is up (0.00023s latency).

PORT     STATE SERVICE
3306/tcp open  mysql
| mysql-brute: 
|   Accounts: 
|     wgd:123456 - Valid credentials
|     dong:123456 - Valid credentials
|     wugd:123456 - Valid credentials
|_  Statistics: Performed 3 guesses in 1 seconds, average tps: 3.0
MAC Address: 00:0C:29:D4:E3:F0 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 2.03 seconds

nmap绕过防火墙的一些技巧

1.碎片化 Nmap发送8个字节的数据包绕过防火墙/IDS/IPS。在防火墙配置不当的时候有用。

nmap -f [ip地址]

image-20240617020314933

MTU,最大传输单元,它是碎片化的别名,我们可以指定它的大小(8的倍数)。

nmap --mtu 16 [地址]

image-20240617020331435

2.诱饵 这种类型的扫描是非常隐蔽且无法察觉。目标由多个假冒或伪造IP地址进行扫描。这样防火墙就会认为攻击或扫描是通过多个资源或IP地址进行,于是就绕过了防火墙。

诱饵在初始的ping扫描(使用ICMP,SYN,ACK等)使用,在实际的端口扫描阶段使用。诱饵在远程操作系统检测(-O)期间也使用。诱饵不在版本检测工作或TCP连接扫描中使用。

这实际上在目标看来是由多个系统同时扫描,这使得防火墙更难追查扫描的来源。

有两种方式来执行诱饵扫描:

nmap –D RND:10 [ip地址]

image-20240617020419038

nmap –D decoy1,decoy2,decoy3 [IP地址]

image-20240617020446226

3.空闲扫描 攻击者将首先利用一个空闲的系统并用它来扫描目标系统。

扫描的工作原理是利用某些系统中采用可预见的IP序列ID生成。为了使空闲扫描成功,僵尸主机的系统必须是在扫描时间处于闲置状态。 在这种技术中会隐藏攻击者的IP地址。

nmap –P0 -sI zombie [ip地址]

4.选项–source-port 每个TCP数据包带有源端口号。默认情况下Nmap会随机选择一个可用的传出源端口来探测目标。该–source-port选项将强制Nmap使用指定的端口作为源端口。这种技术是利用了盲目地接受基于特定端口号的传入流量的防火墙的弱点。端口21(FTP),端口53(DNS)和67(DHCP)是这种扫描类型的常见端口。

nmap --source-port [端口] [ip地址]

image-20240617020626269

5.随机数据长度 附加随机数据长度,我们也可以绕过防火墙。许多防火墙通过检查数据包的大小来识别潜伏中的端口扫描。这是因为许多扫描器会发送具有特定大小的数据包。为了躲避那种检测,我们可以使用命令–data-length增加额外的数据,以便与默认大小不同。在下图中,我们通过加入25多个字节改变数据包大小。

nmap --data-length [数据包长度] [IP地址]

image-20240617020705360

6.随机顺序扫描目标: 选项–randomize-host用于随机 顺序扫描指定目标。–randomize-host有助于防止因连续 扫描多个目标而防火墙和入侵检测系统检测到。

nmap --randomize-hosts [IP地址]

7.MAC地址欺骗 每台机器都有自己独特的mac地址。因此这也是绕过防火墙的另一种方法,因为某些防火墙是基于MAC地址启用规则的。 特别是–spoof-MAC选项能从一个特定的供应商选择一个MAC地址,选择一个随机的MAC地址,或者设定您所选择的特定MAC地址。 MAC地址欺骗的另一个优点是,你让你的扫描隐蔽,因为你的实际MAC地址就不会出现在防火墙的日志文件。

nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff [IP地址]

0 #随机MAC
MAC地址 #指定的MAC地址
供应商名字 #从指定运营商

image-20240617020931035

8、发送错误校验

在某些防火墙和IDS / IPS,只会检查有正确校验包的数据包。因此,攻击者通过发送错误校验欺骗IDS / IPS。

nmap --badsum target

image-20240617020831355