Nmap Summary (ESP)
学习并实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家(ARTE)
学习并实践 GCP 黑客技术:
HackTricks 培训 GCP 红队专家(GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fpentest.eu%2FRENDER_WebSec_10fps_21sec_9MB_29042024.gif&width=768&dpr=4&quality=100&sign=bc0743d1&sv=1)
``` nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24 ``` ## 参数
要扫描的IP
<ip>,<net/mask>
: 直接指定IP-iL <ips_file>
: 列出IPs-iR <number>
: 随机IP数量,可以使用--exclude <Ips>
或--excludefile <file>
排除可能的IPs。
设备发现
默认情况下,Nmap启动一个发现阶段,包括:-PA80 -PS443 -PE -PP
-sL
: 非侵入式,列出目标,通过DNS请求解析名称。用于了解例如 www.prueba.es/24 所有IP是否为我们的目标。-Pn
: 无ping。如果您知道它们都是活动的(否则,您可能会浪费很多时间,但此选项也会产生虚假负面结果,表示它们不活动),它可以防止发现阶段。-sn
: 无端口扫描。完成侦察阶段后,不扫描端口。相对隐蔽,允许进行小范围网络扫描。具有特权时,发送一个ACK(-PA)到80端口,一个SYN(-PS)到443端口,以及一个回显请求和一个时间戳请求,没有特权时总是完成连接。如果目标是网络,则仅使用ARP(-PR)。如果与另一个选项一起使用,则仅丢弃另一个选项的数据包。-PR
: ARP Ping。在分析我们网络中的计算机时,默认使用它,比使用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>
: 默认发送SCTP INIT探测到80端口,INIT-ACK(开放)或ABORT(关闭)或无响应或ICMP不可达(不活动)可能会回复。-PO <protocols>
: 在标头中指定协议,默认为1(ICMP),2(IGMP)和4(Encap 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,可以穿透一些防火墙并提取信息。基于符合标准的机器应该用RST回复所有没有SYN、RST或ACK标志的请求:开放/过滤(无响应),关闭(RST),过滤(ICMP不可达)。在Windows、CIsco、BSDI和OS/400上不可靠。在Unix上是可靠的。-sM
: Maimon扫描:发送FIN和ACK标志,用于BSD,目前将所有返回为关闭。-sA, sW
: ACK和Window,用于检测防火墙,了解端口是否被过滤。-sW可以区分开放/关闭,因为开放的端口会用不同的窗口值回复:开放(带有非0窗口的RST),关闭(窗口=0的RST),过滤(ICMP不可达或无响应)。并非所有计算机都按此方式工作,因此如果全部关闭,则不起作用,如果有一些开放,则正常工作,如果有许多开放和少数关闭,则反向工作。-sI
: 空闲扫描。对于存在主动防火墙但我们知道它不会过滤到某个IP的情况(或者当我们只是想要匿名时),我们可以使用僵尸扫描器(适用于所有端口),要查找可能的僵尸,我们可以使用脚本ipidseq或exploit auxiliary/scanner/ip/ipidseq。此扫描器基于IP数据包的IPID编号。--badsum
: 发送错误的校验和,计算机将丢弃数据包,但防火墙可能会回复,用于检测防火墙。-sZ
: “奇怪”的SCTP扫描器,通过发送带有cookie回显片段的探测,如果开放则应该被丢弃,如果关闭则应该回复ABORT。可以通过无法通过init的防火墙,不好的是它不能区分过滤和开放。-sO
: 协议IP扫描。发送错误和空标头,有时甚至无法区分协议。如果收到ICMP不可达协议,则为关闭,如果收到不可达端口,则为开放,如果收到其他错误,则为过滤,如果没有收到任何内容,则为开放|过滤。-b <server>
: FTPhost--> 用于从另一台主机扫描主机,通过连接另一台机器的ftp,并要求其向您要扫描的端口发送文件,根据答复我们将知道它们是否开放。 [<user>:<password>@]<server>[:<port>] 几乎所有ftp服务器现在不允许您这样做,因此实用性很小。
集中分析
-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] 分析nmap-services中包含的端口直到1024。--port-ratio <ratio> 分析常见端口,比率必须介于0和1之间。
-sV 版本扫描,可以调整强度从0到9,默认为7。
--version-intensity <numero> 调整强度,较低的强度只会发送最可能的探测,而不是全部。这样可以大大缩短UDP扫描时间。
-O 操作系统检测
--osscan-limit 要正确扫描主机,至少需要一个端口开放和一个关闭,如果不满足此条件并且已设置此选项,则不会尝试进行操作系统预测(节省时间) --osscan-guess 当操作系统检测不完美时,这会增加工作量
脚本
--script <filename>|<category>|<directory>|<expression>[,...]
要使用默认的脚本,只需使用-sC或--script=default
可用的类型有:auth,broadcast,default,discovery,dos,exploit,external,fuzzer,intrusive,malware,safe,version和vuln
Auth: 运行所有可用于身份验证的脚本
Default: 运行工具的默认基本脚本
Discovery: 检索目标或受害者的信息
External: 用于使用外部资源的脚本
Intrusive: 使用被认为对受害者或目标具有侵入性的脚本
Malware: 检查是否存在恶意代码或后门打开的连接
Safe: 运行非侵入性脚本
Vuln: 发现最常见的漏洞
All: 运行所有可用的NSE扩展脚本
搜索脚本:
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 ScriptName target --> 输入脚本将同时运行脚本和扫描器,因此也可以添加扫描器选项,可以添加 “safe=1” 以仅运行安全脚本。
时间控制
Nmap可以调整时间单位为秒、分钟、毫秒: --host-timeout arguments 900000ms, 900, 900s, and 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-5)
-T0 --> 一次只扫描一个端口,等待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
防火墙和入侵检测系统(IDS)阻止端口通信并分析数据包。
-f 用于分片数据包,默认在头部后分片为8字节,要指定大小使用..mtu(不要与-f一起使用),偏移必须是8的倍数。版本扫描器和脚本不支持分片
-D decoy1,decoy2,ME Nmap发送扫描器,但使用其他IP地址作为源,以隐藏您的真实IP地址。如果在列表中放置ME,Nmap会将您放在那里,最好在您之前放置5或6个以完全掩盖您的身份。可以使用RND:<number>生成随机IP。不适用于无TCP连接的版本检测。如果在网络内部,最好使用活动IP地址,否则很容易发现您是唯一活动的。
要使用随机IP地址:nmap-D RND: 10 Ip_target
-S IP 当Nmap无法获取您的IP地址时,您需要使用此选项提供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, and Cisco --proxies <逗号分隔的代理URL列表> 有时代理无法保持nmap所需的连接数,因此需要调整并行性:--max-parallelism
-sP 通过ARP发现网络中的主机
许多管理员在防火墙中创建规则,允许通过特定端口(如20、53和67)传递所有数据包,我们可以告诉nmap从这些端口发送我们的数据包:nmap --source-port 53 Ip
输出
-oN file 普通输出
-oX file XML输出
-oS file Script kiddies输出
-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_TO_SCAN
使用特定数据库:sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST_TO_SCAN
加快Nmap服务扫描速度 x16
根据此帖子,您可以通过修改**/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
**的值,可以编辑parsing code,使得nmap-service-probes
文件中的这些值完全被忽略。
Last updated