参考资料

https://blog.csdn.net/Jeanphorn/article/details/45419237
nmap功能:
- 主机发现功能
- 端口扫描功能
- 服务及版本探测
- 操作系统检测
- 漏洞扫描
- waf检测
- …..
主机发现
常用参数
-sn 只进行主机发现,不进行端口扫描
-Pn 关闭主机发现
-PR 使用ARP协议进行内网主机发现
-PE 使用ICMP的Echo Ping扫描
-PP 使用ICMP的时间戳主机发现
-PM 使用ICMP地址掩码主机发现
-PS 使用TCP的 SYN包进行扫描
-PA 使用TCP的 ACK包进行扫描(响应为RST)
-PU使用UDP协议进行扫描
-PY 使用SCTP协议进行扫描(不常用,支持这种协议的主机不多)
-PO 使用IP数据包进行扫描(-PO = -PO 1,2,4 默认使用ICMP IGMP IP-in-IP)
-n 取消域名解析
-R 解析域名 (可以使用–dns-servers [server1,server2..] 指定DNS服务器)
--data-length在数据包中添加随机数据。
端口扫描

STATE列展示端口的状态
open:如果目标端口的状态为open,这表明在该端口有应用程序接收TCP连接或者UDP报文closed:如果目标端口的状态为closed,这里要注意closed并不意味着没有任何反应,状态为closed的端口是可访问的,这种端口可以接收Nmap探测报文并做出响应。相比较而言,没有应用程序在open上监听。filtered:产生这种结果的原因主要是存在目标网络数据包过滤,由于这些设备过滤了探测数据包,导致Nmap无法确定该端口是否开放。这种设备可能是路由器、防火墙甚至专门的安全软件。unfiltered:这种结果很少见,它表明目标端口是可以访问的,但是Nmap却无法判断它到底是open还是closed的。通常只有在进行ACK扫描时才会出现这种状态。open | filtered:无法确定端口是开放的还是被过滤了,开放的端口不响应就是一个例子。closed|filtered:无法确定端口是关闭的还是被过滤了。只有在使用idle扫描时才会发生这种情况
参数
-p [port] 指定端口 格式为[a-b] / [a,b,c,d]
-F 指定 100 个常用的端口
-p U:[port],P:[port] 使用协议指定扫描端口
-p * 扫描所有端口
--top-ports 常见端口扫描
对目标192.168.153.131的53端口进行UDP扫描,25端口进行TCP扫描,命令如下。
nmap -sU -sT -p U:53,T:80,22 102.111.111.33
TCP扫描

-sT 进行完整的TCP三次握手
-sS 发送syn数据包进行端口扫描
-sF 发送一个FIN数据包 , 若没关闭,会响应一个RST标志
-sN NULL扫描 按照RFC793的规定,对于所有关闭的端口,目标系统应该返回RST标志。
-sX 向目标端口发送一个含有FIN、URG和PUSH标志的数据包。按照RFC 793的规定,对于所有关闭的端口,目标系统应该返回RST标志
UDP扫描

-sU 发送UDP数据包进行扫描
IDLE扫描(空闲扫描)
nmap -sI 僵尸主机IP 目标主机IP
原理介绍:
1. 首先向僵尸主机发送SYN/ACK数据包,获取僵尸主机的 RST数据包ID (假设值为`a`)
2. 发送带有僵尸主机IP的伪地址SYN数据包给目标主机
3. 如果目标端口不开放,会响应一个RST包,如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文(`a+1`),此时IPID号开始增长。
4. 向僵尸主机发送另一个SYN/ACK报文并检查僵尸主机RST报文中的IPID是否为`a+2`,若是则开放,若为`a+1`则未开放
操作系统与服务检测
操作系统探测
通过向目标发送探针,然后根据目标的回应来猜测系统。
这个探针大都是以TCP和UDP数据包的形式,检查的细节包括初始序列号(ISN)、TCO选项、IP标识符(ID)数字时间戳、显示拥塞通知(ECN)、窗口大小等。每个操作系统对于这些探针都会做出不同的响应,这些工具提取出这些响应中的特征,然后记录在一个数据库中。
Nmap进行识别的探针和响应对应的关系保存在Nmap-os-db文件中。
Nmap会尝试验证如下参数。
- 供应商的名字:操作系统的供应商的名字,比如微软或者SUN。▯ 操作系统:操作系统的名字,比如Windows、Mac OS X、Linux等。
- 操作系统的版本:比如Windows XP、Windows 2000、Windows2003、Windows 2008等。
- 当前设备的类型:比如通用计算机、打印服务器、媒体播放器、路由器、WAP或者电力装置等。
除了这些参数以外,操作系统检测还提供了关于系统运行时间和TCP序列可预测性信息的分类
在命令行中使用-O参数通过端口扫描来完成对操作系统的扫描
--osscan-limit 只对满足”至少分别有一个状态为open和closed的端口” 条件的主机进行操作系统探测
--osscan-guss 猜测最接近目标的操作系统
--max-retries 对操作系统尝试的次数,默认为5
端口服务探测
-sV 进行服务和版本检测
-A 同时打开操作系统和版本探测
其他参数
-f 使用-f选项可以对Nmap发送的探测数据包进行分段。这样将原来的数据包分成几个部分,目标网络的防御机制例如包过滤、防火墙等在对这些数据包进行检测的时候就会变得更加困难。另外必须谨慎使用这个选项,一些老旧的系统在处理分段的包时经常会出现死机的情况。
-mtu(使用指定的MTU)
-D <decoy1 [, decoy2][, ME], ...> 指定源IP,进行伪装
-oN xxx.txt 192.168.1.1 扫描结果保存为txt文件
-oX xxx.xml 192.168.1.1 扫描结果保存为xml文件
-oG xxx.xml 192.168.1.1 扫描结果保存为grep文件
-iL 从指定文件 中获得目标
-sC利用default(默认)分类中所有脚本对目标进行检测。这个分类中的脚本一般不会对目标系统造成任何危害。但是有些脚本可能会引起目标系统上的安全防御措施的警报。普通的用户权限并不能发送原始套接字,这样将会导致扫描的过程变得很慢。而root权限的用户在使用Nmap时,默认的扫描方式就是SYN扫描。
--script 使用指定的脚本对目标进行扫描
--script-args 指定脚本的参数
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1944270374@qq.com