nmap命令说明
平时看到别人的nmap命令都是一大串,根本看不懂为什么,自己只会nmap ip,所以记录下对nmap -h的说明,方便以后的使用。有的指令单独没什么,是要配合其他指令一起使用。
主机发现
1. -iL <inputfilename> 批量扫描指定主机/网络的文件列表
2. -sL <scan List> 仅列出指定目标的ip
3. -sn Ping扫描,只进行主机发现
4. -Pn 将所有主机视为在线,有的主机会禁Ping
5. -PS/PA/PU/PY 给指定端口使用TCP SYN/ACK UDP SCTP 进行发现
6. -PE/PP/PM ICMP 回显、时间戳好网络掩码请求发现
7. -PO 使用IP协议包发现
8. -n/-R 不做DNS解析/总是做DNS解析(默认为有时)
--dns-servers 指定自定义的DNS服务器
--system-dns 使用操作系统的DNS解析器
--traceroute 跟踪每个主机的跃点路径
扫描技术
-sS/sT/sA/sW/sM 使用TCP SYN/Connect()/ACK/Window/Maimon 的方式进行扫描
TCP SYN扫描是在三次握手中收到SYN/ACK后发送RST断开连接,没有建立正常的TCP连接,一般不会留下扫描痕迹,不容易被发现;
Connect()是通过操作系统与目标建立连接,会留下很多连接记录,很容易被发现。
ACK扫描发送一个只设置ACK标志位的数据包,目标主机端口无论是关闭还是开放状态,都会返回RST数据包。但ACK扫描不能确定目标主机的端口状态,可以确定对方主机是否存活,可以发现防火墙规则来确定防火墙的状态。
窗口扫描,在某些系统上,开放端口用正数表示窗口大小,而关闭的窗口大小则为0。窗口扫描,就是通过检查返回RST报文的窗口字段,来判断端口是否开放。
FIN/ACK扫描也被称作Maimon扫描,根据发现者Uriel Maimon命名。其实Maimon扫描与NULL、FIN扫描的原理一样,根据RFC 793,无论端口是关闭还是开放,目标主机都会对FIN+ACK探测数据包,响应RST报文(但许多基于BSD的系统,会丢弃FIN+ACK探测数据包)。
-sU 使用UDP进行扫描
UDP扫描,通常与ICMP相结合进行。在给目标主机发送没有携带任何数据的UDP数据包时,如果返回信息为“ICMP端口不可达”(类型为3,代码为3)的提示,则表示目标端口是关闭的,但主机是存活的;如果某服务响应一个UDP报文,则表明该端口是开放的。
当然,UDP扫描也存在瓶颈,那就是速度。很多主机默认限制发送“ICMP端口不可达”信息,或者限制发包的频率。如Linux2.4.20内核,就只允许一秒钟发送一条目标不可达信息。这样,扫描65535个端口,需要18小时的时间。这是不可接受的,所以加速UDP扫描的方法,通常是并发扫描或先扫描主要端口。
-sN/sF/sX 使用TCP NULL/FIN/Xmas进行扫描 --scanflags <flags>
根据RFC 793,主机发送一个没有任何标志位的TCP包,如果目标主机的对应端口是关闭的话,则会返回一个RST数据包,如果没有响应则表示该端口是开放的。NULL扫描,可以躲过无状态防火墙和报文过滤路由器,且比SYN扫描要隐秘。值得注意的是,并不是所有系统都遵循RFC 793。一些系统不管端口是开放还是关闭,都响应RST数据包。如Cisco设备、BSDI等。也判断是否为Windows系统(不返回)还是Unix(返回)。
与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开发情况。
通过发送带有下列标志位的tcp数据包
URG:指示数据时紧急数据,应立即处理。
PSH:强制将数据压入缓冲区。
FIN:在结束TCP会话时使用。
正常情况下,三个标志位不能被同时设置,但在此种扫描中可以用来判断哪些端口关闭还是开放,与上面的反向扫描情况相同,依然不能判断windows平台上的端口,开放不返回。
真正的Nmap高级用户不需要被这些现成的扫描类型束缚。 --scanflags选项允许指定任意TCP标志位来设计您自己的扫描。 让您的创造力流动,躲开那些仅靠本手册添加规则的入侵检测系统!
-sI <僵尸主机:prot>空闲扫描,让僵尸主机替你扫描,完全隐蔽自己。想知道原理的可以看这个[https://nmap.org/book/idlescan.html]()
-sY/sZ 使用SCTP INIT/COOKIE-ECHO 扫描
流控制传输协议(英语:Stream Control Transmission Protocol,缩写:SCTP)是在2000年由IETF的SIGTRAN工作组定义的一个传输层协议。
SCTP INIT扫描是TCP SYN扫描的SCTP等效物。它可以快速执行,在快速网络上每秒扫描数千个端口,而不受限制性防火墙的限制。与SYN扫描一样,INIT扫描相对不显眼且隐蔽,因为它永远不会完成SCTP关联。它还允许在打开,关闭和过滤状态之间进行清晰,可靠的区分。
SCTP COOKIE ECHO SCAN 是一种更先进的SCTP扫描。 它利用了SCTP实现应该在开放端口上静默丢弃包含COOKIE ECHO块的数据包这一事实,但如果端口关闭则发送ABORT。 这种扫描类型的优点是端口扫描不像INIT扫描那么明显。 此外,可能存在阻止INIT块的非状态防火墙规则集,但不阻止COOKIE ECHO块。 不要误以为这会使端口扫描不可见; 一个好的IDS也能够检测到SCTP COOKIE ECHO扫描。 缺点是SCTP COOKIE ECHO扫描不能区分打开和过滤的端口,在这两种情况下都会打开状态。
-sO 使用IP协议扫描
端口规格和扫描顺序
-p 指定端口 例 -p22; -p 1-65535; -p U:53,111,T:21-25
--exclude-ports 排除指定端口
-F 扫描比默认端口更少的端口
-r 按顺序扫描,nmap默认情况会随机顺序,常用的端口靠前
服务/版本检测
-sV :探测开放端口以确定服务/版本信息 --version-intensity <level>:设置从 0(轻)到 9(尝试所有探针) --version-light:限制最可能的探测(强度 2) --version-all:尝试每一个探测(强度 9) --version-trace:显示详细的版本扫描活动(用于调试)
脚本扫描
-sC 默认是--script=default
Nmap的脚本位置:/usr/share/nmap/scripts/
ls /usr/share/nmap/scripts/ | wc -l 查看脚本的数量(默认是605个)
nmap --script=auth 192.168.123.1 检查弱口令
nmap --script=brute 192.168.123.1 暴力破解
nmap --script=vuln 192.168.123.1 扫描常见漏洞
nmap --script external bbskali.cn whois解析
nmap --script=http-brute 192.168.123.1 HTTP认证爆破
nmap --script=http-ls bbskali.cn 目录扫描
nmap --script-updatedb 更新脚本数据库
(原来有这么多功能,一直当一个端口扫描工具的,看来学好nmap还是很必要的)
操作系统检测
-O 操作系统检测
--osscan-limit 将操作系统检测限制为有希望的目标
--osscan-guess 更积极地猜测操作系统
时间和性能:
-T <0-5> 越高约快
--min-hostgroup/max-hostgroup <size> 设置并行主机扫描组大小
--min-parallelism/max-parallelism <numrobes> 调整探测报文的并行度
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间> 调整探测报文超时
--max-retries <tries>:限制端口扫描探测重传的次数。
--host-timeout <time> 放弃低速目标主机
--scan-delay/--max-scan-delay <time> 调整探测报文的时间间隔(还可以躲闭基于阈值的入侵检测和预防系统(IDS/IPS))
--min-rate <number>:每秒发送数据包不低于 <number>
--max-rate <number>:每秒发送数据包的速度不超过 <number>
防火墙/IDS的逃避和欺骗
-F; --mtu<val> 分片数据包 (没太懂)
-D <decoy1,decoy2[,ME],...> 使用诱饵隐藏扫描
使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,这时可使用 ME选项说明。如果在第6个位置或 更后的位置使用ME选项,一些常用 端口扫描检测器(如Solar Designer's excellent scanlogd)就不会报告 这个真实IP。如果不使用ME选项,Nmap 将真实IP放在一个随机的位置。
注意,作为诱饵的主机须在工作状态,否则会导致目标主机的SYN洪水攻击。 如果在网络中只有一个主机在工作,那就很容易确定哪个主机在扫描。也可 使用IP地址代替主机名(被诱骗的网络就不可能在名字服务器日志中发现)。
诱饵可用在初始的ping扫描(ICMP、SYN、ACK等)阶段或真正的端口扫描 阶段。诱饵也可以用于远程操作系统检测(-O)。在进行版 本检测或TCP连接扫描时,诱饵无效。
使用过多的诱饵没有任何价值,反而导致扫描变慢并且结果不准确。 此外,一些ISP会过滤哄骗的报文,但很多对欺骗IP包没有任何限制。
-S <IP_Address> 欺骗源地址
-e <iface> 使用指定接口
-g/--source-port <portnum> 使用给定的端口号
--proxies <url1,[url2],...> 通过 HTTP/SOCKS4 代理中继连接
--data <hex string> 将自定义有效负载附加到发送的数据包
--data-string <string> 将自定义 ASCII 字符串附加到发送的数据包中
--data-length <num> 将随机数据附加到发送的数据包中
--ip-options <options> 发送带有指定ip选项的数据包
--ttl <val> 设置 IP 生存时间字段
--spoof-mac <mac地址/前缀/供应商名称> 欺骗你的MAC地址
--badsum 发送带有虚假 TCP/UDP/SCTP 校验和的数据包
输出
-oN/-oX/-oS/-oG <file>:输出扫描 正常,XML,脚本小子,Grep
-oA <basename>:一次输出三种主要格式
-v:增加详细程度(使用 -vv 或更多以获得更好的效果)
-d:增加调试级别(使用 -dd 或更多以获得更好的效果)
--reason:显示端口处于特定状态的原因
--open:仅显示打开(或可能打开)的端口
--packet-trace:显示所有发送和接收的数据包
--iflist:打印主机接口和路由(用于调试)
--append-output:附加到而不是破坏指定的输出文件
--resume <文件名>:恢复中止的扫描
--noninteractive:通过键盘禁用运行时交互
--stylesheet <path/URL>:将 XML 输出转换为 HTML 的 XSL 样式表
--webxml:参考 Nmap.Org 的样式表以获得更便携的 XML
--no-stylesheet:防止 XSL 样式表与 XML 输出相关联
杂项
-6:启用 IPv6 扫描
-A:启用操作系统检测、版本检测、脚本扫描和跟踪路由
--datadir <dirname>:指定自定义 Nmap 数据文件位置
--send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送
--privileged:假设用户拥有完全特权
--unprivileged:假设用户缺乏原始套接字权限
-V:打印版本号
-h:打印此帮助摘要页。
知道原理后就也可以用一大串参数达到自己想要的扫描或功能。
***************************转载请注明出处,尊重原创!***************************