关于nmap的学习笔记(1)

nmap

写在前面的话

  nmap是一款用于探测计算机网路上主机和服务的安全扫描器。通过nmap我们可以知道发现我们要扫描的网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及其他的一堆功能。

软件安装

  访问http://nmap.org/download.html即可下载最新版的nmap。这里提供了各个系统所需的安装包。安装完之后,你会发现多了一个图形化界面的nmap,zenmap。

zennmap

  在命令框里面输入nmap,会出现nmap的帮助信息。

1
2
Nmap 6.49BETA4 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}

下面以scanme.nmap.org为目标进行学习。

基础测试

  最简单的测试莫过于直接输入

1
nmap scanme.nmap.org

  输出信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.18s latency).
Not shown: 992 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
4444/tcp filtered krb524
9929/tcp open nping-echo

Nmap done: 1 IP address (1 host up) scanned in 7.34 seconds

注:
open:端口是开放的。
closed:端口是关闭的。
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。
open|filtered:端口是开放的或被屏蔽。
closed|filtered :端口是关闭的或被屏蔽。

  添加参数:

  1. 简单扫描,将结果详细输出

    1
    nmap -vv scanme.nmap.org
  2. 对指定ip进行自定义端口扫描

    1
    2
    nmap -p1-65535 192.168.1.1 #端口范围扫描
    nmap -p80,443,22,21,8080 192.168.1.1(也可以访问整个网段) #进行某些端口的扫描
  3. 使用ping检测192.168.1.0/24这个网段的存活主机

    1
    nmap -sP 192.168.1.0/24(也可以只检测一个ip)
  4. 路由跟踪

    1
    nmap --traceroute 8.8.8.8(googledns服务器ip)
  5. 操作系统类型探测
      nmap可以通过目标开放的端口来探测主机所运行的操作系统类型。

    1
    nmap -O 192.168.1.2
  6. nmap的万能开关
      这个选项设置了1-10000端口的ping扫描,操作系统扫描,脚本扫描,路由跟踪和服务探测。

    1
    nmap -A scanme.nmap.org

nmap命令详解

  1. 主机名,ip,网段的表达方式

    1
    2
    3
    4
    -iL filename		从文件中读取待检测的目标,文件中的表示方法支持机名,ip,网段**(文本中ip地址之间需要用回车隔开,不能用逗号或分号)**
    -iR hostnum 随机选取,进行扫描.如果-iR指定为0,则是无休止的扫描
    --exclude host1, host2 从扫描任务中需要排除的主机
    --excludefile exclude_file 排除文件中的IP,格式和-iL指定扫描文件的格式相同

  2. 主机发现

    1
    2
    3
    4
    5
    6
    7
    -sL	仅仅是显示,扫描的IP数目,不会进行任何扫描
    -sn ping扫描,即主机发现
    -Pn 不检测主机存活
    -PS/PA/PU/PY[portlist] TCP SYN Ping/TCP ACK Ping/UDP Ping发现
    -PE/PP/PM 使用ICMP echo, timestamp and netmask 请求包发现主机
    -PO[prococol list] 使用IP协议包探测对方主机是否开启
    -n/-R 不对IP进行域名反向解析/为所有的IP都进行域名的反响解析

  3. 扫描技巧

    1
    2
    3
    4
    5
    6
    7
    8
    -sS/sT/sA/sW/sM	TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon扫描
    -sU UDP扫描
    -sN/sF/sX TCP NullFINand Xmas扫描
    --scanflags 自定义TCP包中的flags
    -sI zombie host[:probeport] Idlescan
    -sY/sZ SCTP INIT/COOKIE-ECHO 扫描
    -sO 使用IP protocol 扫描确定目标机支持的协议类型
    -b “FTP relay host” 使用FTP bounce scan

  4. 指定端口和扫描顺序

    1
    2
    3
    4
    5
    6
    -p	特定的端口 -p80,443 或者 -p1-65535
    -p U:PORT 扫描udp的某个端口, -p U:53
    -F 快速扫描模式,比默认的扫描端口还少
    -r 不随机扫描端口,默认是随机扫描的
    --top-ports "number" 扫描开放概率最高的number个端口,默认扫前1000
    --port-ratio "ratio" 扫描指定频率以上的端口

  5. 服务版本识别

    1
    2
    3
    4
    5
    -sV	开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
    --version-intensity "level" 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。默认是7
    --version-light 打开轻量级模式,为--version-intensity 2的别名
    --version-all 尝试所有探测,为--version-intensity 9的别名
    --version-trace 显示出详细的版本侦测过程信息

  6. 脚本扫描

    1
    2
    3
    4
    5
    6
    7
    -sC	根据端口识别的服务,调用默认脚本
    --script=”Lua scripts” 调用的脚本名
    --script-args=n1=v1,[n2=v2] 调用的脚本传递的参数
    --script-args-file=filename 使用文本传递参数
    --script-trace 显示所有发送和接收到的数据
    --script-updatedb 更新脚本的数据库
    --script-help=”Lua script” 显示指定脚本的帮助

  7. OS识别

    1
    2
    3
    -O	启用操作系统检测,-A来同时启用操作系统检测和版本检测
    --osscan-limit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个openclosed的端口)
    --osscan-guess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配
  8. 防火墙/IDS躲避和哄骗

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -f; --mtu value	指定使用分片、指定数据包的MTU.
    -D decoy1,decoy2,ME 使用诱饵隐蔽扫描
    -S IP-ADDRESS 源地址欺骗
    -e interface 使用指定的接口
    -g/ --source-port PROTNUM 使用指定源端口
    --proxies url1,[url2],... 使用HTTP或者SOCKS4的代理

    --data-length NUM 填充随机数据让数据包长度达到NUM
    --ip-options OPTIONS 使用指定的IP选项来发送数据包
    --ttl VALUE 设置IP time-to-live域
    --spoof-mac ADDR/PREFIX/VEBDOR MAC地址伪装
    --badsum 使用错误的checksum来发送数据包

  9. Nmap 输出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    -oN	将标准输出直接写入指定的文件
    -oX 输出xml文件
    -oS 将所有的输出都改为大写
    -oG 输出便于通过bash或者perl处理的格式,非xml
    -oA BASENAME 可将扫描结果以标准格式、XML格式和Grep格式一次性输出
    -v 提高输出信息的详细度
    -d level 设置debug级别,最高是9
    --reason 显示端口处于带确认状态的原因
    --open 只输出端口状态为open的端口
    --packet-trace 显示所有发送或者接收到的数据包
    --iflist 显示路由信息和接口,便于调试
    --log-errors 把日志等级为errors/warings的日志输出
    --append-output 追加到指定的文件
    --resume FILENAME 恢复已停止的扫描
    --stylesheet PATH/URL 设置XSL样式表,转换XML输出
    --webxml 从namp.org得到XML的样式
    --no-sytlesheet 忽略XML声明的XSL样式表

  10. 其他nmap选项

    1
    2
    3
    4
    5
    6
    7
    8
    -6	开启IPv6
    -A OS识别,版本探测,脚本扫描和traceroute
    --datedir DIRNAME 说明用户Nmap数据文件位置
    --send-eth / --send-ip 使用原以太网帧发送/在原IP层发送
    --privileged 假定用户具有全部权限
    --unprovoleged 假定用户不具有全部权限,创建原始套接字需要root权限
    -V 打印版本信息
    -h 输出帮助

参考网站

  1. NMAP 基础教程
  2. Nmap扫描原理与用法
  3. Nmap参考指南(Man Page)
  4. nmap脚本使用总结
  5. Nmap速查手册
  6. Nmap Cheat Sheet