Nmap Summary (ESP)
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
<ip>,<net/mask>
: 直接指示 IP
-iL <ips_file>
: list_IPs
-iR <number>
: 随机 IP 的数量,可以使用 --exclude <Ips>
或 --excludefile <file>
排除可能的 IP。
默认情况下,Nmap 启动一个发现阶段,包括:-PA80 -PS443 -PE -PP
-sL
: 这不是侵入性的,它列出目标并发出 DNS 请求以解析名称。它有助于了解例如 www.prueba.es/24 是否所有 IP 都是我们的目标。
-Pn
: 不 ping。如果你知道它们都是活动的,这很有用(如果不是,你可能会浪费很多时间,但这个选项也会产生假阴性,表示它们不活动),它会阻止发现阶段。
-sn
: 不端口扫描。完成侦察阶段后,不扫描端口。它相对隐蔽,并允许小规模网络扫描。具有权限时,它向 80 发送 ACK (-PA),向 443 发送 SYN(-PS) 和回声请求以及时间戳请求,若没有权限则始终完成连接。如果目标是网络,它仅使用 ARP(-PR)。如果与其他选项一起使用,则仅丢弃其他选项的数据包。
-PR
: Ping ARP。在分析我们网络中的计算机时默认使用,它比使用 ping 更快。如果不想使用 ARP 数据包,请使用 --send-ip
。
-PS <ports>
: 向端口发送 SYN 数据包,如果回应 SYN/ACK 则表示开放(回应 RST 以避免结束连接),如果回应 RST 则表示关闭,如果没有回应则表示不可达。如果没有权限,则自动使用完全连接。如果未给出端口,则默认为 80。
-PA <ports>
: 与前一个相似,但使用 ACK,结合使用可以获得更好的结果。
-PU <ports>
: 目标相反,发送到预期关闭的端口。一些防火墙仅检查 TCP 连接。如果关闭,则回应端口不可达,如果回应其他 ICMP 或没有回应,则视为目标不可达。
-PE, -PP, -PM
: ICMP PINGS: 回声回复、时间戳和地址掩码。它们被发出以确定目标是否活动。
-PY<ports>
: 默认向 80 发送 SCTP INIT 探测,回应可能是 INIT-ACK(开放)、ABORT(关闭)或无回应或 ICMP 不可达(不活动)。
-PO <protocols>
: 在头部指示协议,默认 1(ICMP)、2(IGMP)和 4(封装 IP)。对于 ICMP、IGMP、TCP(6)和 UDP(17)协议,发送协议头,对于其他协议仅发送 IP 头。这样做的目的是由于头部的畸形,回应协议不可达或同一协议的响应以了解其是否活动。
-n
: 不使用 DNS
-R
: 始终使用 DNS
-sS
: 不完成连接,因此不会留下痕迹,如果可以使用则非常好。(需要权限)这是默认使用的。
-sT
: 完成连接,因此会留下痕迹,但可以确保使用。默认情况下没有权限。
-sU
: 较慢,针对 UDP。主要:DNS(53)、SNMP(161,162)、DHCP(67 和 68),(-sU53,161,162,67,68):开放(回应),关闭(端口不可达),过滤(其他 ICMP),开放/过滤(无回应)。在开放/过滤的情况下,-sV 发送大量请求以检测 nmap 支持的任何版本,并可以检测真实状态。会大大增加时间。
-sY
: SCTP 协议未能建立连接,因此没有日志,工作方式类似于 -PY
-sN,-sX,-sF
: Null、Fin、Xmas,可以穿透某些防火墙并提取信息。它们基于标准合规机器应对所有没有 SYN、RST 或 ACK 的请求以 RST 响应的事实,延迟:开放/过滤(无回应),关闭(RST),过滤(ICMP 不可达)。在 Windows、Cisco、BSDI 和 OS/400 上不可靠。在 Unix 上是可靠的。
-sM
: Maimon 扫描:发送 FIN 和 ACK 标志,适用于 BSD,目前将所有返回为关闭。
-sA, sW
: ACK 和窗口,用于检测防火墙,以了解端口是否被过滤。-sW 确实区分开放/关闭,因为开放的响应具有不同的窗口值:开放(RST,窗口不为 0),关闭(RST,窗口 = 0),过滤(ICMP 不可达或无回应)。并非所有计算机都以这种方式工作,因此如果全部关闭,则不工作,如果有几个开放,则工作正常,如果有很多开放和少量关闭,则工作方式相反。
-sI
: Idle 扫描。对于存在活动防火墙但我们知道它不过滤特定 IP 的情况(或当我们只是想要匿名时),可以使用僵尸扫描器(适用于所有端口),要查找可能的僵尸,可以使用脚本 ipidseq 或利用辅助扫描器 auxiliary/scanner/ip/ipidseq。该扫描器基于 IP 数据包的 IPID 编号。
--badsum
: 发送错误的和,计算机会丢弃数据包,但防火墙可能会回应某些内容,用于检测防火墙。
-sZ
: “奇怪”的 SCTP 扫描器,当发送带有 cookie 回声片段的探测时,如果开放则应丢弃,如果关闭则应回应 ABORT。它可以穿透 init 无法穿透的防火墙,坏处是它无法区分过滤和开放。
-sO
: 协议 IP 扫描。发送错误和空头,有时甚至无法区分协议。如果 ICMP 不可达协议到达,则表示关闭,如果不可达端口到达,则表示开放,如果到达其他错误,则表示过滤,如果没有到达,则表示开放|过滤。
-b <server>
: FTPhost--> 用于从另一台主机扫描主机,通过连接另一台机器的 ftp 并请求其将文件发送到要从另一台机器扫描的端口,根据回应我们将知道它们是否开放。 [<user>:<password>@]<server>[:<port>] 几乎所有 ftps 服务器不再允许这样做,因此实用性不大。
-p: 用于指定要扫描的端口。要选择 65335 个端口:-p- 或 -p all。Nmap 根据其流行程度有一个内部分类。默认使用 1000 个主要端口。使用 -F(快速扫描)分析 100 个主要端口。使用 --top-ports <number> 分析该数量的主要端口(从 1 到 65335)。检查端口的顺序是随机的,为了避免这种情况使用 -r。我们还可以选择端口:20-30,80,443,1024- 这意味着从 1024 开始查看。我们还可以按协议对端口进行分组:U:53,T:21-25,80,139,S:9。我们还可以选择在 nmap 的流行端口中选择一个范围:-p [-1024] 分析到 1024 的端口,这些端口包含在 nmap-services 中。--port-ratio <ratio> 分析比率在 0 和 1 之间的最常见端口。
-sV 版本扫描,可以将强度调节为 0 到 9,默认值为 7。
--version-intensity <number> 调节强度,数值越低仅会发出最可能的探测,但不是全部。这样可以大大缩短 UDP 扫描的时间。
-O 操作系统检测
--osscan-limit 要正确扫描主机,至少需要有 1 个开放端口和 1 个关闭端口,如果不满足此条件并且我们设置了此选项,则不会尝试进行操作系统预测(节省时间)。
--osscan-guess 当操作系统检测不完美时,这会使其更加努力。
脚本
--script <filename>|<category>|<directory>|<expression>[,...]
要使用默认的脚本,只需使用 -sC 或 --script=default。
可用的类型包括:auth、broadcast、default、discovery、dos、exploit、external、fuzzer、intrusive、malware、safe、version 和 vuln。
Auth: 执行所有可用的身份验证 scripts
Default: 执行工具的基本默认 scripts
Discovery: 从 target 或受害者处检索信息
External: 用于使用外部资源的 script
Intrusive: 使用被认为对受害者或 target 具有侵入性的 scripts
Malware: 检查是否有恶意代码或后门(backdoors)打开的连接
Safe: 执行不具侵入性的 scripts
Vuln: 发现最常见的漏洞
All: 执行所有可用的 NSE 扩展 scripts
要查找脚本:
nmap --script-help="http-*" -> 以 http- 开头的脚本
nmap --script-help="not intrusive" -> 所有非侵入性的脚本
nmap --script-help="default or safe" -> 在一个或另一个或两个中的脚本
nmap --script-help="default and safe" --> 在两个中的脚本
nmap --script-help="(default or safe or intrusive) and not http-*"
--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}
--script-args-file <filename>
--script-help <filename>|<category>|<directory>|<expression>|all[,...]
--script-trace ---> 提供脚本运行的信息
--script-updatedb
要使用脚本,只需输入:nmap --script 脚本名称 目标 --> 输入脚本后,将同时执行脚本和扫描器,因此也可以添加扫描器的选项,我们可以添加 “safe=1” 以仅执行安全的脚本。
时间控制
Nmap 可以修改时间为秒、分钟、毫秒: --host-timeout arguments 900000ms、900、900s 和 15m 都是相同的。
Nmap 将要扫描的主机总数分成组,并以块的方式分析这些组,直到所有主机都被分析完毕,才会进入下一个块(用户在此期间也不会收到任何更新),因此,Nmap 使用大组更为高效。默认情况下,在 C 类中使用 256。
可以通过 --min-hostgroup <numhosts> 和 --max-hostgroup <numhosts> 来更改。
可以控制并行扫描的探测器数量,但最好不要这样做(nmap 已根据网络状态自动控制):--min-parallelism <numprobes> 和 --max-parallelism <numprobes>。
我们可以修改 RTT 超时,但通常不需要:--min-rtt-timeout <time>、--max-rtt-timeout <time>、--initial-rtt-timeout <time>。
我们可以修改重试次数:--max-retries <numtries>。
我们可以修改主机扫描的时间:--host-timeout <time>。
我们可以修改每次测试之间的时间以减慢速度:--scan-delay <time> 和 --max-scan-delay <time>。
我们可以修改每秒的数据包数量:--min-rate <number> 和 --max-rate <number>。
许多端口在被过滤或关闭时响应缓慢,如果我们只关心开放的端口,可以使用:--defeat-rst-ratelimit 来加快速度。
要定义 Nmap 的攻击性:-T paranoid|sneaky|polite|normal|aggressive|insane
-T (0-1)
-T0 --> 仅扫描 1 个端口,并在下一个端口之前等待 5 分钟。
-T1 和 T2 --> 非常相似,但在每次测试之间仅等待 15 和 0.4 秒。
-T3 --> 默认操作,包括并行处理。
-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms。
-T5 --> --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --max-scan-delay 5ms。
防火墙/IDS
不允许通过端口并分析数据包。
-f 用于分割数据包,默认情况下在头部后分割为 8 字节,要指定该大小使用 ..mtu(使用此选项时,不要使用 -f),偏移量必须是 8 的倍数。版本扫描器和脚本不支持分割。
-D decoy1,decoy2,ME Nmap 发送扫描器,但使用其他 IP 地址作为源,这样可以隐藏你自己。如果在列表中放入 ME,nmap 会将你放在那儿,最好在你之前放 5 或 6 个,以便完全掩盖你。可以使用 RND:<number> 生成随机 IP:生成 <number> 个随机 IP。对于没有 TCP 连接的版本检测器无效。如果你在网络内,最好使用活动的 IP,因为否则很容易发现你是唯一的活动者。
要使用随机 IP:nmap -D RND: 10 目标 IP。
-S IP 当 Nmap 无法获取你的 IP 地址时,你需要使用此选项提供它。它也可以用来让人认为有另一个目标正在扫描他们。
-e <interface> 用于选择接口。
许多管理员会打开入口端口以确保一切正常,这样更容易,而不是寻找其他解决方案。这些可能是 DNS 或 FTP 端口... 为了寻找这个漏洞,nmap 包含:--source-port <portnumber> 和 -g <portnumber> 是等效的。
--data <hex string> 用于发送十六进制文本: --data 0xdeadbeef 和 --data \xCA\xFE\x09。
--data-string <string> 用于发送普通文本: --data-string "Scan conducted by Security Ops, extension 7192"。
--data-length <number> Nmap 仅发送头部,通过此选项可以添加额外的字节数(将随机生成)。
要完全配置 IP 数据包,请使用 --ip-options。
如果希望查看发送和接收的数据包中的选项,请指定 --packet-trace。有关使用 Nmap 的 IP 选项的更多信息和示例,请参见 http://seclists.org/nmap-dev/2006/q3/52。
--ttl <value>
--randomize-hosts 使攻击不那么明显。
--spoof-mac <MAC address, prefix, or vendor name> 用于更改 MAC 示例:Apple、0、01:02:03:04:05:06、deadbeefcafe、0020F2 和 Cisco。
--proxies <Comma-separated list of proxy URLs> 用于使用代理,有时代理无法保持与 nmap 想要的那么多连接,因此需要修改并行性: --max-parallelism。
-sP 用于通过 ARP 发现我们所在网络中的主机。
许多管理员在防火墙中创建规则,允许来自特定端口(如 20、53 和 67)的所有数据包通过,我们可以告诉 nmap 从这些端口发送我们的数据包:nmap --source-port 53 IP。
输出
-oN file 正常输出。
-oX file XML 输出。
-oS file 脚本小子输出。
-oG file 可 grep 输出。
-oA file 除 -oS 外的所有输出。
-v level 详细程度。
-d level 调试。
--reason 主机和状态的原因。
--stats-every time 每隔该时间告诉我们进展如何。
--packet-trace 查看发送的数据包,可以指定过滤器,如: --version-trace 或 --script-trace。
--open 显示开放的、开放|过滤的和未过滤的。
--resume file 提供摘要。
杂项
-6 允许 ipv6。
-A 等同于 -O -sV -sC --traceroute。
运行时
在 nmap 运行时,我们可以更改选项:
v / V 增加 / 减少详细程度。
d / D 增加 / 减少调试级别。
p / P 开启 / 关闭数据包跟踪。
? 打印运行时交互帮助屏幕。
Vulscan
Nmap 的脚本,查看在离线数据库中获取的服务版本(从其他重要数据库下载)并返回可能的漏洞。
它使用的数据库有:
Scipvuldb.csv | http://www.scip.ch/en/?vuldb
Cve.csv | http://cve.mitre.org
Osvdb.csv | http://www.osvdb.org
Securityfocus.csv | http://www.securityfocus.com/bid/
Securitytracker.csv | http://www.securitytracker.com
Xforce.csv | http://xforce.iss.net
Exploitdb.csv | http://www.exploit-db.com
Openvas.csv | http://www.openvas.org
要下载并安装到 Nmap 文件夹中:
wget http://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar -czvf nmap_nse_vulscan-2.0.tar.gz vulscan/ && sudo cp -r vulscan/ /usr/share/nmap/scripts/
还需要下载数据库的包并将其添加到 /usr/share/nmap/scripts/vulscan/。
使用:
要使用所有:sudo nmap -sV --script=vulscan HOST_A_ESCANEAR。
要使用特定数据库:sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_A_ESCANEAR。
根据 这篇文章,可以通过将 /usr/share/nmap/nmap-service-probes
中的所有 totalwaitms
值修改为 300 和 tcpwrappedms
修改为 200 来加速 nmap 服务分析。
此外,没有特定定义的 servicewaitms
的探测使用默认值 5000
。因此,我们可以为每个探测添加值,或者我们可以 自己编译 nmap 并在 service_scan.h 中更改默认值。
如果你不想在 /usr/share/nmap/nmap-service-probes
文件中更改 totalwaitms
和 tcpwrappedms
的值,可以编辑 解析代码,使得这些值在 nmap-service-probes
文件中完全被忽略。
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践 GCP 黑客技术: HackTricks Training GCP Red Team Expert (GRTE)