惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Jina AI
Jina AI
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 司徒正美
罗磊的独立博客
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Vercel News
Vercel News
A
About on SuperTechFans
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队

LanYunのBlog

优化macOS Dock栏的显示与隐藏 解决macOS全屏模式下某些情况显示原始鼠标指针的问题 Yarn从Classic迁移到Modern nginx自编译 用santa对二进制进行监控和授权 ESXI 8.0安装黑群晖DSM 7.x openwrt编译过程记录 编译monero For macOS ARM 自建busuanzi不蒜子平台统计平台 浅记博客更新日志 (机翻)Kubo配置文件 修改brew services中服务的启动参数 技术杂记📝 解决Surge模块不能同步问题 为Arch Linux配置邮件服务 自编译NutClient-ESXI,更改邮件逻辑 解决ESXI和群晖使用SSH密钥登录问题 为J4125软路由ESXI中群晖提供UPS服务 在arch linux上搭建rustdesk server 解决虚拟机扩容中GPT PMBR大小不符问题 搭建Tuic V5 优雅地为macOS提供python多版本的支持 修复root路径下文件权限问题 解决macOS 14上利用Whisky运行steam时有关问题 在macOS中用PhpStorm配置Xdebug调试 利用CloudFlare Workers快速自建一个IP获取器 如何自动续期证书? 从0开始速配VPS用于网站等 搭建一个基于ChatGPT的QQ机器人(Yunzai-Bot) For Mac 010 Editor For Mac 13.0.1 Crack 破解
记录一下关于nmap命令
LanYun · 2022-04-11 · via LanYunのBlog

前言&介绍

软件官网Nmap中文参考指南在线工具—–用于匿名化Nmap扫描原理与用法一种避开Nmap操作系统特征识别法的手段nmap端口扫描1nmap端口扫描2

Mac安装: 在终端中输入brew install nmap(如果未安装Homebrew,需在之前输入ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null)

以下介绍来自维基百科:
Nmap**(网络映射器)是一款用于网络发现安全审计网络安全工具,它是自由软件。软件名字Nmap是Network Mapper的简称。通常情况下,Nmap用于:

  • 列举网络主机清单
  • 管理服务升级调度
  • 监控主机
  • 服务运行状况

Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 它是网络管理员必用的软件之一,用以评估网络系统安全。

Nmap 是不少黑客脚本小子爱用的工具 。系统管理员可以利用Nmap来探测工作环境中未经批准使用的服务器,黑客通常会利用Nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Nmap通常用在信息搜集阶段,用于搜集目标机主机的基本状态信息。扫描结果可以作为漏洞扫描漏洞利用权限提升阶段的输入。例如,业界流行的漏洞扫描工具Nessus与漏洞利用工具Metasploit都支持导入Nmap的XML格式结果,而Metasploit框架内也集成了Nmap工具(支持Metasploit直接扫描)。

Nmap不仅可以用于扫描单个主机,也可以适用于扫描大规模的计算机网络(例如,扫描英特网上数万台计算机,从中找出感兴趣的主机和服务)。

核心功能

主机发现

用于发现目标主机是否处于活动状态。
Nmap 提供了多种检测机制,可以更有效地辨识主机。例如可用来列举目标网络中哪些主机已经开启,类似于Ping命令的功能。

端口扫描

用于扫描主机上的端口状态。
Nmap可以将端口识别为开放(Open)、关闭(Closed)、过滤(Filtered)、未过滤(Unfiltered)、开放或过滤(Open|Filtered)、关闭或过滤(Closed|Filtered)。默认情况下,Nmap会扫描1660个常用的端口,可以覆盖大多数基本应用情况。

版本侦测

用于识别端口上运行的应用程序与程序版本。
Nmap目前可以识别数千种应用的签名(Signatures),检测数百种应用协议。而对于不识别的应用,Nmap默认会将应用的指纹(Fingerprint)打印出来,如果用户确知该应用程序,那么用户可以将信息提交到社区,为社区做贡献。

操作系统侦测

用于识别目标主机的操作系统类型、版本编号及设备类型。
Nmap目前提供1500个操作系统或设备的指纹数据库,可以识别通用PC系统、路由器、交换机等设备类型。

防火墙/IDS规避和哄骗

Nmap提供多种机制来规避防火墙、IDS的的屏蔽和检查,便于秘密地探查目标主机的状况。
基本的规避方式包括:数据包分片、IP诱骗、IP伪装、MAC地址伪装。

NSE脚本引擎

NSE是Nmap最强大最灵活的特性之一,可以用于增强主机发现、端口扫描、版本侦测和操作系统侦测等功能,还可以用来扩展高级的功能如web扫描、漏洞发现和漏洞利用等。Nmap使用Lua语言来作为NSE脚本语言,目前的Nmap脚本库已经支持350多个脚本。

  • Nmap 基本指令
1
nmap [ <扫描类型> ...] [ <选项> ] { <扫描目标说明> }
  • 全方位扫描(包括Host Discovery、端口扫描、端口服务版本扫描、OS类型扫描及默认脚本扫描):
1
nmap -A target_ip
  • Ping扫描:
1
nmap -sn target_ip
  • 快速端口扫描(前100个常用端口):
1
nmap -F target_ip
  • 版本扫描:
1
nmap -sV target_ip 
  • 作业系统类型扫描:
1
nmap -O target_ip
  • 运行标记为safe的nse script
1
nmap -sC target_ip
  • 运行完整tcp握手扫描(虽然nmap默认使用tcp半开放扫描,即选项-sS。但却容易被今日大多信息安全厂商入侵侦测系统发现,因此使用“完整握手扫描-sT”还比“隐形扫描-sS”来得更隐匿)
1
nmap -sT target_ip
  • 发送碎片数据包,躲避ids侦测和绕过防火墙(8-bytes为单位),但实际上碎片数据包特征过于明显,不建议于实际红队攻击中使用
1
nmap -f target_ip
  • 使用同网段上闲置主机(zombie_host)作为跳板扫描
1
nmap -sI zombie_host:zombie_port target_ip
  • 使用大量虚假的源地址,混淆被扫描方日后鉴识、分析的能力,即诱饵扫描
1
nmap -D ip1,ip2,ip3,... target_ip  

1
nmap -D RND:10 target_ip (随机产生10组ipv4掩护)

如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了改选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描。

命令形式:

nmap –T4 –A –v targethost

其中-A选项用于使用进攻性(Aggressive)方式扫描;-T4指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况良好的情况推荐使用T4;-v表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态.(使用-vv可以获得更好的效果)

主机发现的探测方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。

-sn: Ping Scan 只进行主机发现,不进行端口扫描。

-Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。

-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。

-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启。

-n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。

--dns-servers <serv1[,serv2],...>: 指定DNS服务器。

--system-dns: 指定使用系统的DNS服务器

--traceroute: 追踪每个路由节点

其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。

默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。

Nmap通过探测将端口划分为6个状态:

  1. open:端口是开放的。
  2. closed:端口是关闭的。
  3. filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
  4. unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
  5. open|filtered:端口是开放的或被屏蔽。
  6. closed|filtered :端口是关闭的或被屏蔽。

扫描方式选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描。

-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。

--scanflags <flags>: 定制TCP包的flags。

-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)

-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。

-sO: 使用IP protocol 扫描确定目标机支持的协议类型。

-b <FTP relay host>: 使用FTP bounce scan扫描方式

TCP连接扫描-sT

使用操作系统的网络连接系统调用 connect(),对目标主机发起 TCP 三路握手,待完成后 Nmap 立即中断此次连接。

Nmap 通过获取每个尝试连接的状态信息来判定侦测端口的状态

SYN扫描-sS

Nmap 产生一个 SYN 数据报文,如果侦测端口开放并返回 SYN-ACK 响应报文

Nmap 据此发送 RST 报文给侦测端口结束当前连接,这样做的好处在于缩短了端口扫描时间

UDP扫描-sU

UDP 本身是无连接的协议,Nmap 向目标主机的端口发送 UDP 探测报文

如果端口没有开放,被侦测主机将会发送一个 ICMP 端口不可到达的消息

Nmap 根据这个消息确定端口闭合(closed)或者被过滤 (unfiltered)

通常没有回复意味着端口是开放(open)状态.

ACK扫描-sA

这种扫描比较特殊,它不能确切知道端口的基本状态,而是主要用来探测防火墙是否存在以及其中设定的过滤规则

FIN扫描-sF

和 SYN 扫描相比,这种方式更为隐蔽,因此能够穿过防火墙的过滤

关闭(closed)端口将会返回合适的 RST 报文,而开放端口将忽略这样的侦测报文

具备类似防火墙不敏感特性的还有 -sN NULL 扫描,-sX X-mas 扫描.

端口参数与扫描顺序

1
2
3
4
5
6
7
8
9
10
11
-p <port ranges>: 扫描指定的端口

实例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP协议、U代表UDP协议、S代表SCTP协议)

-F: Fast mode – 快速模式,仅扫描TOP 100的端口

-r: 不进行端口随机打乱的操作(如无该参数,nmap会将要扫描的端口以随机顺序方式扫描,以让nmap的扫描不易被对方防火墙检测到)。

--top-ports <number>:扫描开放概率最高的number个端口(nmap的作者曾经做过大规模地互联网扫描,以此统计出网络上各种端口可能开放的概率。以此排列出最有可能开放端口的列表,具体可以参见文件:nmap-services。默认情况下,nmap会扫描最有可能的1000个TCP端口)

--port-ratio <ratio>: 扫描指定频率以上的端口。与上述--top-ports类似,这里以概率作为参数,让概率大于--port-ratio的端口才被扫描。显然参数必须在在0到1之间,具体范围概率情况可以查看nmap-services文件。

以扫描局域网内192.168.1.100主机为例。

命令如下:

nmap –sS –sU –T4 –top-ports 300 192.168.1.100

参数-sS表示使用TCP SYN方式扫描TCP端口;-sU表示扫描UDP端口;-T4表示时间级别配置4级;–top-ports 300表示扫描最有可能开放的300个端口(TCP和UDP分别有300个端口)。

版本侦测主要分为以下几个步骤:

  1. 首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
  2. 如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比。查找对应应用程序的名字与版本信息。
  3. 如果通过“Welcome Banner”无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
  4. 如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配。根据结果对比分析出UDP应用服务类型。
  5. 如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
  6. 如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

命令行选项:

1
2
3
4
5
6
7
8
9
-sV: 指定让Nmap进行版本侦测

--version-intensity <level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

--version-light: 指定使用轻量侦测方式 (intensity 2)

--version-all: 尝试使用所有的probes进行侦测 (intensity 9)

--version-trace: 显示出详细的版本侦测过程信息。

OS侦测的用法简单,Nmap提供的命令比较少。

1
2
3
4
5
-O: 指定Nmap进行OS侦测。

--osscan-limit: 限制Nmap只对确定的主机的进行OS探测(至少需确知该主机分别有一个open和closed的端口)。

--osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

规避用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-f; --mtu <val>: 指定使用分片、指定数据包的MTU.

-D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。

-S <IP_Address>: 伪装成其他IP地址

-e <iface>: 使用特定的网络接口

-g/--source-port <portnum>: 使用指定源端口

--data-length <num>: 填充随机数据让数据包长度达到Num。

--ip-options <options>: 使用指定的IP选项来发送数据包。

--ttl <val>: 设置time-to-live时间。

--spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址

--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

规避演示

使用命令:

nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1

其中,-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;192.168.1.1是被扫描的目标IP地址。

Nmap提供不少脚本使用的命令行参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
-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>: 显示脚本的帮助信息,其中<Luascripts>部分可以逗号分隔的文件或脚本类别。

eg:

1
2
nmap 目标ip -p1-65535 -Pn -sV -sC -A 
sudo nmap -p1-65535 -T4 -Pn -sV -O -sF -A -vv 目标ip

参数链接

使用介绍(较乱)