nmap使用

  1. 参考资料
  2. nmap功能:
  3. 主机发现
    1. 常用参数
  4. 端口扫描
    1. 参数
  5. 操作系统与服务检测
    1. 操作系统探测
    2. 端口服务探测
  6. 其他参数

参考资料

image-20210421195723482

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在数据包中添加随机数据。

端口扫描

image-20210421195324513

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扫描

image-20210421200030004

-sT 进行完整的TCP三次握手

-sS 发送syn数据包进行端口扫描

-sF 发送一个FIN数据包 , 若没关闭,会响应一个RST标志

-sN NULL扫描 按照RFC793的规定,对于所有关闭的端口,目标系统应该返回RST标志。

-sX 向目标端口发送一个含有FIN、URG和PUSH标志的数据包。按照RFC 793的规定,对于所有关闭的端口,目标系统应该返回RST标志

UDP扫描

image-20210421200322812

-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