Nmap

https://nmap.org/
Nmap 是一款用于网络发现和安全审计的网络安全工具,它是自由软件。软件名字Nmap是Network Mapper的简称。通常情况下,Nmap用于:

  • 列举网络主机清单
  • 管理服务升级调度
  • 监控主机
  • 服务运行状况

Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 它是网络管理员必用的软件之一,用以评估网络系统安全。

安装:

  • Centos: yum install nmap
  • Ubuntu: apt-get install nmap

核心功能

  • 主机发现
    • 用于发现目标主机是否处于活动状态
  • 端口扫描
    • 用于扫描主机上的端口状态 ``` Open 开放 Closed 关闭 Filtered 过滤 Unfiltered 未过滤 Open|Filtered 开放或过滤 Colsed|filtered 关闭或过滤

默认情况会扫描1660个常用的端口

  1. - 版本侦测
  2. - 用于识别端口上运行的应用程序与版本

目前可以识别数千种应用的签名,检测数百种应用协议。 对于不识别的应用,nmap默认会将应用的指纹(Fingerprint)打印出来,如果用户确知该应用程序,那么用户可以提交到社区,为社区做贡献


- 操作系统侦察
   - 用于识别目标主机的操作系统、版本遍好及设备类型

Nmap目前提供1500个操作系统或设备的指纹数据库,可以识别通用PC系统、路由器、交换机等设备类型。


- 防火墙/IDS规避
   - Nmap提供多种机制来规避防火墙、IDS的屏蔽和检查,便于秘密的探查目标主机的状况

基本的规避包括:分片、IP诱骗、IP伪装、MAC地址伪装


- NSE脚本引擎

NSE是Nmap最强大最灵活的特性之一,可以用于增强主机发现、端口扫描、版本侦测和操作系统侦测等功能,还可以用来扩展高级的功能如web扫描、漏洞发现和漏洞利用等。Nmap使用Lua语言来作为NSE脚本语言,目前的Nmap脚本库已经支持350多个脚本。 ```

扫描方式

  • TCP: -sT
  • SYn: -sS
  • ACK: -sA
  • UDP: -sU
  • RPC: -sR
  • ICMP: -sP
  • Disable Port Scan: -sn

image.png

常见扫描方式

  • 扫描 10000 端口、操作系统、版本

namp -T4 -A

  • 版本探测

nmap -sV

  • 操作系统

namp -O

  • 多个 host 进行端口扫描

nmap 192.168.1.0/24
nmap 192.168.1.2 192.168.1.5
nmap 192.168.1.1-100

  • 扫描特定端口

nmap -p 80 192.168.1.222
nmap -p 80,443 192.168.1.222
nmap -p 80-8000 192.168.1.222

其他技巧

  • —host-tieout 主机超时事件 通常选值:18000
  • —scan-delay 报文时间间隔 通常选值:1000
    • S <源地址> 定义扫描源地址,避免被发现

例子

  • nmap端口扫描
    nmap -A -T4 -p- ip
  • netcat端口扫描
    nc -nvv -w 1 -z ip 1234-2234
  • 在网络上发现活动ip使用ARP
    arp-scan ip/24
  • 主机发现
    netdiscover
  • 从 ARP 了解IP MAC 和 MAC 供应商
    netdiscover -r ip/24
  • 使用 Syn 进行 Nmap 隐身扫描
    nmap -sS ip
  • 使用FIN进行 Nmap 隐身扫描
    nmap -sF ip
  • Nmap OS 指纹
    nmap -O ip
  • Nmap 常规扫描
    nmap ip/24
  • 枚举扫描nmap -p 1-65535 -sV -sS -A -T4 $ip/24 -oN nmap.txt
  • 枚举扫描所有端口 TCP / UDP 并输出到 txt 文件nmap -oN nmap2.txt -v -sU -sS -p- -A -T4 $ip
  • 将 Nmap 输出到文件:nmap -oN nmap.txt -p 1-65535 -sV -sS -A -T4 $ip/24
  • 快速扫描:nmap -T4 -F $ip/24
  • 快速扫描加:nmap -sV -T4 -O -F --version-light $ip/24
  • 快速跟踪路由nmap -sn --traceroute $ip
  • 所有 TCP 和 UDP 端口nmap -v -sU -sS -p- -A -T4 $ip
  • 密集扫描:nmap -T4 -A -v $ip
  • 密集扫描加 UDPnmap -sS -sU -T4 -A -v $ip/24
  • 密集扫描所有 TCP 端口nmap -p 1-65535 -T4 -A -v $ip/24
  • 密集扫描 - 无 Pingnmap -T4 -A -v -Pn $ip/24
  • Ping 扫描nmap -sn $ip/24
  • 慢速全面扫描nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" $ip/24
  • 使用活动连接扫描,以摆脱任何旨在拖曳您的欺骗端口nmap -p1-65535 -A -T5 -sT $ip

参考

详细

-iL 从txt导入目标IP进行扫描 nmap -iL iplist.txt
—exclude 后面跟不扫描的IP 例子:nmap -iL iplist.txt —exclude 127.0.0.1
—excludefile 从文件中导入不扫描的ip 例子: nmap -iL iplist.txt —excludefile notip.txt
-sL 仅列举指定目标IP,不进行主机扫描 例子:nmap -sL 127.0.0.1 192.168.3.39|nmap -iL iplist.txt -sL
-sn 只进行主机发现,不进行端口扫描 例子:nmap -sn 192.168.3.39
-Pn 将所有指定的主机视为开启,不进行主机发现 例子:nmap -Pn 192.168.3.39
-PS/PA/PU/PY 使用TCP/SYN/ACK或SCTP INIT/ECHO 方式来发现 例子:nmap -PS 192.168.3.39|nmap -PA 192.168.3.39|nmap -PU 192.168.3.39|nmap -PY 192.168.3.39
-PE/-PP/PM 使用ICMP echo,timestamep,netmask请求包发现主机 例子:nmap -PE 192.168.3.39|nmap -PP 192.168.3.39|nmap -PM 192.168.3.39
-PO 使用IP协议包探测对方主机是否开启 例子:nmap -PO 192.168.3.39
-n/-R -n表示不进行DNS解析:-R表示总是进行DNS解析 例子:nmap -sV -n 127.0.0.1|nmap -R 127.0.0.1
—dns-servers 指定DNS服务器 例子:nmap -R 192.168.3.39 —dns-servers
—system-dns 指定使用系统的DNS服务器 例子:nmap -R 192.168.3.39 —system-dns
—traceroute 追踪每个路由节点 例子:nmap 192.168.3.34 —traceroute
-sS/sT/sA/sW/sM 指定使用:TCP SYN/Connect()/ACK/Window/Maimon scans的方式对目标主机进行扫描
-sU 使用UDP方式扫描UDP端口 例子:nmap -sU 192.168.3.39
-sN/sF/sX 指定使用TCP Null/FIN/Xmas scans秘密扫描的方式协助探测对方的TCP端口状态
—scanflags 定制TCP包flags 例子:nmap -sV 192.168.3.39 —scanflags 1
-sI 指定使用Idle scan的方式扫描目标主机 例子:nmap -sI 空闲主机IP -Pn 目标主机IP
-sY/sZ 使用SCTP INIT/COOKIE-ECHO扫描SCTP协议端口的开放状态
-sO 确定目标主机支持的协议 例子:nmap -sO 192.168.3.39
-b 使用FTP bounce scan扫描方式 例子:nmap -b 192.168.3.39
-p 指定扫描的端口 例子:nmap -p 3389,445 192.168.3.39
-F 快速扫描模式,只扫描TOP100的端口 例子:nmap -F 192.168.3.39
-r 不进行端口打乱的操作,让nmap的扫描不轻易的被对方的防火墙检测到 例子:nmap -p 445,135 -r 192.168.3.39
更多脚本请参考:https://nmap.org/nsedoc/categories
—top-ports 扫描开放概率最高的端口 (Nmap作者曾经做过大规模的扫描,以统计开放概率最高的端口。默认情况下nmap会扫描最有可能的1000个端口) 例子:nmap 192.168.3.39 —top-ports 445
—port-raito 扫描指定频率以上的端口
-sV 指定nmap进行版本探测 例子:nmap -sV 192.168.3.39
—version-intensity 指定版本探测深度(范围:0-9) nmap -sV 192.168.3.39 —version-inensity 9
—version-light 指定轻量级侦探方式(intensity 2)
—version-all 尝试使用所有的probes进行侦测
—version-trace 显示出详细版本侦测过程信息
-A 表示全方面扫描 例子:nmap -A 192.168.3.39
-T 扫描速度 (范围:1-5) 例子 nmap -A-T5 192.168.3.39
-sC 全面收集信息 例子:nmap -sC 192.168.3.39
-sP 判断目标是否存活
-O 判断目标操作系统
-sF 探测目标防火墙状态

常用的扫描方式:

nmap 192.168.3.39
nmap 192.168.3.0/24 扫描网段
nmap -A -T5 192.168.3.35
nmap -sV -T5 192.168.3.39
nmap -sC 192.168.3.39
nmap -sS 192.168.3.39
nmap -sC -n -sV —version-inensity 9 -T5 192.168.3.39
nmap -iL iplist.txt —exclude 127.0.0.1
nmap -iL iplist.txt —excludefile notip.txt
nmap -p 135,445,3389 192.168.3.39
nmap —traceroute 192.168.3.39
nmap -O 192.168.3.39
nmap -sF 192.168.3.39

常见6种nmap端口状态及协议

open 开放的
filetered 被过滤的,表示端口被防火墙或其他网络设备阻止,不能访问
close 关闭的
unfiltered 未被过滤的,表示nmap无法确定端口所在状态,需进一步探测
open/filetered 开放的或被过滤的,nmap不能识别
close/filetered 关闭的或被过滤的,nmap不能识别

Nmap进阶:

nmap的默认脚本存放在/xx/nmap/scripts的文件夹下
nmap的脚本主要分为以下几类
Auth 负责处理鉴权处理
Broadcast 在局域网内探查更多服务的开启情况,如DHCP/DNS/SQLserver
Brute 针对常见的应用提供暴力破解方式,如HTTP/SMTP等
Default 针对-sC或-A选项提供默认脚本,提供基本脚本的扫描能力
Discovery 对网络进行更多的扫描,如SMB枚举,SNMP查询等
Dos 用于进行拒绝服务攻击
Exploit 利用已知的漏洞入侵系统
External 利用第三方数据库或资源,例如:进行whois解析
Fuzzer 模糊测试脚本,发送异常包给目标机,探测潜在漏洞
Intrusive 入侵性脚本,此类脚本可能会引起对方的IDS/IPS的记录等
Malware 探测目标机是否感染了病毒,开启了后门信息等
Safe 此类脚本与Intrusive相反,属于安全脚本
Version 负责增强服务与版本扫描功能的脚本
Vuln 负责检查目标机是否有常见的漏洞如MS17-010
脚本使用方法 例子:nmap —script=auth(脚本名称) IP

常用脚本:

用户还可以根据配置—script=类别进行扫描,常用参数如下表示
-sC/—script=Default 使用默认的脚本进行扫描
—script= 使用某个脚本进行扫描
—script-args=key1=value1,key2=value2 该参数用于传递脚本里的参数,key1是参数名,该参数对应value1这个值。如果还有更多参数逗号连接
—script-args-file=filename 使用文件为脚本提供参数
—script-trace 如果设置参数,则显示脚本执行过程中发送与接收数据
—script-updatedb 在nmap的scripts目录中有一个script.db文件,该文件保存了当前nmap可用的脚本,类似于一个小型的数据库,如果我们开启nmap并调用了此参数,就会进行脚本更新
—script-help 输出对应脚本的使用参数,以及详细的介绍信息 用法:nmap —script-help auth