nmap - github pages · 2021. 1. 16. · nmap 用法 作者:break 博客:...

20
www.cnbreak.org nmap 用法 作者:Break 博客:www.cnbreak.org 注:所有操作及演示均是在 VMware 虚拟机环境下进行的!仅供安全测试及安全学习,禁止非法使用! 前言:一眼不懂就动手!本文以 kali linux v2017.1 操作系统为主进行演示!nmap 版本为 v7.40 1、什么是 nmap(取自百度)? nmap 是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断 计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 安装可以参考官网:https://nmap.org/ 2、功能? Nmap 包含四项基本功能: 1. 主机发现(Host Discovery2. 端口扫描(Port Scanning3. 版本侦测(Version Detection4. 操作系统侦测(Operating System Detection而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发 现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基 本功能的基础上,Nmap 提供防火墙与 IDSIntrusionDetection System,入侵检测系统)的规避技巧,可以综合应用到 四个基本功能的各个阶段;另外 Nmap 提供强大的 NSENmap Scripting Language)脚本引擎功能,脚本可以对基 本功能进行补充和扩展。 2.1zenmap Zenmap Nmap 官方提供的图形界面,通常随 Nmap 的安装包发布。Zenmap 是用 Python 语言编写而成的开源免费 的图形界面,能够运行在不同操作系统平台上(Windows/linux/Unix/Mac OS 等)。Zenmap 旨在为 nmap 提供更加简

Upload: others

Post on 29-Jan-2021

4 views

Category:

Documents


2 download

TRANSCRIPT

  • www.cnbreak.org

    nmap 用法 作者:Break 博客:www.cnbreak.org

    注:所有操作及演示均是在 VMware 虚拟机环境下进行的!仅供安全测试及安全学习,禁止非法使用!

    前言:一眼不懂就动手!本文以 kali linux v2017.1 操作系统为主进行演示!nmap 版本为 v7.40

    1、什么是 nmap(取自百度)?

    nmap 是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断

    计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

    安装可以参考官网:https://nmap.org/

    2、功能?

    Nmap 包含四项基本功能:

    1. 主机发现(Host Discovery)

    2. 端口扫描(Port Scanning)

    3. 版本侦测(Version Detection)

    4. 操作系统侦测(Operating System Detection)

    而这四项功能之间,又存在大致的依赖关系(通常情况下的顺序关系,但特殊应用另外考虑),首先需要进行主机发

    现,随后确定端口状况,然后确定端口上运行具体应用程序与版本信息,然后可以进行操作系统的侦测。而在四项基

    本功能的基础上,Nmap 提供防火墙与 IDS(IntrusionDetection System,入侵检测系统)的规避技巧,可以综合应用到

    四个基本功能的各个阶段;另外 Nmap 提供强大的 NSE(Nmap Scripting Language)脚本引擎功能,脚本可以对基

    本功能进行补充和扩展。

    2.1、zenmap

    Zenmap 是 Nmap 官方提供的图形界面,通常随 Nmap 的安装包发布。Zenmap 是用 Python 语言编写而成的开源免费

    的图形界面,能够运行在不同操作系统平台上(Windows/linux/Unix/Mac OS 等)。Zenmap 旨在为 nmap 提供更加简

  • www.cnbreak.org

    单的操作方式。简单常用的操作命令可以保存成为 profile,用户扫描时选择 profile 即可;可以方便地比较不同的扫描

    结果;提供网络拓扑结构(NetworkTopology)的图形显示功能。

    3、选项(取自 nmap 官网)?

    以 Nmap 7.40 为演示版本。

    3.1、用法:nmap [扫描类型] [选项] {目标规格}

    3.2、目标规格:

    可以通过主机名,IP 地址,网络等

    例如:scanme.nmap.org,microsoft.com/24,192.168.0.1; 10.0.0-255.1-254

    -iL :从主机/网络列表输入

    -iR :选择随机目标

    --exclude :排除主机/网络

    --excludefile :从文件中排除列表

  • www.cnbreak.org

    3.3、主机发现:

    -sL:列表扫描 - 只需列出要扫描的目标

    -sn:Ping 扫描 - 禁用端口扫描

    -Pn:将所有主机视为在线 - 跳过主机发现

    -PS / PA / PU / PY [portlist]:向给定端口发送 TCP SYN / ACK,UDP 或 SCTP

    -PE / PP / PM:ICMP 回显,时间戳和网络掩码请求发现探测

    -PO [协议列表]:IP 协议 Ping

    -n / -R:不要做 DNS 解析/总是解决[默认:有时]

    --dns-servers :指定自定义 DNS 服务器

    --system-dns:使用操作系统的 DNS 解析器

    --traceroute:跟踪每个主机的跳转路径

    3.4、扫描技术:

    -sS / sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon 扫描

    -sU:UDP 扫描

    -sN / sF / sX:TCP Null,FIN 和 Xmas 扫描

    --scanflags :自定义 TCP 扫描标志

    -sI :空闲扫描

    -sY / sZ:SCTP INIT / COOKIE-ECHO 扫描

    -sO:IP 协议扫描

    -b :FTP 反弹扫描

    3.5、端口规格和扫描订单:

    -p :仅扫描指定的端口

    例如:-p22 -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9

    --exclude-ports :从扫描中排除指定的端口

    -F:快速模式 - 扫描比默认扫描少的端口

    -r:连续扫描端口 - 不要随机化

    --top-ports :扫描最常用的端口

    --port-ratio :扫描端口比更常见

    3.6、服务/版本检测:

    -sV:探测打开端口以确定服务/版本信息

    --version-intensity :从 0(亮)到 9(尝试所有探针)

    - 变换光:极限探测器(强度 2)

    --version-all:尝试每一个探针(强度 9)

    --version-trace:显示详细的版本扫描活动(用于调试)

    3.7、脚本扫描:

    -sC:相当于--script = default

    --script = :是一个逗号分隔的列表目录,脚本文件或脚本类

    --script-args = :为脚本提供参数

    --script-args-file = filename:在文件中提供 NSE 脚本参数

    --script-trace:显示发送和接收的所有数据

  • www.cnbreak.org

    --script-updatedb:更新脚本数据库。

    --script-help = :显示有关脚本的帮助。

    是逗号分隔的脚本文件列表脚本的类别。

    3.8、操作系统检测:

    -O:启用操作系统检测

    --osscan-limit:将操作系统检测限制为有希望的目标

    - 可以猜测:猜测操作系统更积极

    3.9、时间和性能:

    采取的选项以秒为单位,或追加“ms”(毫秒)

    '(秒),'m'(分钟)或'h'(小时)到该值(例如 30m)。

    -T :设置时间模板(越高越好)

    --min-hostgroup / max-hostgroup :并行主机扫描组大小

    --min-parallelism / max-parallelism :探针并行化

    --min-rtt-timeout / max-rtt-timeout / initial-rtt-timeout :指定探测往返时间。

    --max-retries :端口扫描探测重传的 Caps number。

    --host-timeout :在此之后放弃目标

    --scan-delay / - max-scan-delay :调整探测器之间的延迟

    --min-rate :发送速度慢于每秒

    --max-rate :发送数据包速度不超过每秒的

    3.10、防火墙/ IDS 逃避和 SPOOFING:

    -F; --mtu :片段数据包(可选地,给定 MTU)

    -D :用诱惑遮掩扫描

    -S :欺骗源地址

    -e :使用指定的接口

    -g / - source-port :使用给定的端口号

    --proxies :通过 HTTP / SOCKS4 代理的中继连接

    --data :向发送的数据包附加自定义的有效负载

    --data-string :将自定义 ASCII 字符串附加到发送的数据包

    --data-length :将随机数据附加到发送的数据包

    --ip-options :使用指定的 ip 选项发送数据包

    --ttl :设置 IP 时间到达字段

    --spoof-mac :欺骗您的 MAC 地址

    --badsum:发送具有假 TCP / UDP / SCTP 校验和的数据包

    3.11、OUTPUT:

    -oN / -oX / -oS / -oG :正常输出扫描,XML,s |

  • www.cnbreak.org

    --open:仅显示打开(或可能打开)的端口

    --packet-trace:显示发送和接收的所有数据包

    --iflist:打印主机接口和路由(用于调试)

    --append-output:追加而不是 clobber 指定的输出文件

    --resume :恢复中止的扫描

    --stylesheet :将 XML 输出转换为 HTML 的 XSL 样式表

    --webxml:来自 Nmap.Org 的引用样式表,用于更多的便携式 XML

    --no-stylesheet:防止 XSL 样式表与 XML 输出关联

    3.12、MISC:

    -6:启用 IPv6 扫描

    -A:启用操作系统检测,版本检测,脚本扫描和跟踪路由

    --datadir :指定自定义 Nmap 数据文件位置

    --send-eth / - send-ip:使用原始以太网帧或 IP 数据包发送

    --privileged:假设用户是完全特权的

    --unprivileged:假设用户缺少原始套接字权限

    -V:打印版本号

    -h:打印此帮助摘要页面。

    4、Nmap 基本扫描方法(取自 aspirationflow 的 CSDN 博客):

    Nmap 主要包括四个方面的扫描功能,主机发现、端口扫描、应用与版本侦测、操作系统侦测。在详细讲解每个

    具体功能之前,首先可以看看 Nmap 的典型用法。

    4.1、用法引入 如果直接针对某台计算的 IP 地址或域名进行扫描,那么 Nmap 对该主机进行主机发现过程和端口扫描。该方式执

    行迅速,可以用于确定端口的开放状况。

    命令形式:

    nmap targethost

    可以确定目标主机在线情况及端口基本状况。

  • www.cnbreak.org

    4.2、完整全面的扫描

    如果希望对某台主机进行完整全面的扫描,那么可以使用 nmap 内置的-A 选项。使用了改选项,nmap 对目标主

    机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认 NSE 脚本扫描。

    命令形式:

    nmap -T4 -A -v targethost

    其中-A 选项用于使用进攻性(Aggressive)方式扫描;-T4 指定扫描过程使用的时序(Timing),总有 6 个级别

    (0-5),级别越高,扫描速度越快,但也容易被防火墙或 IDS 检测并屏蔽掉,在网络通讯状况良好的情况推荐使

    用 T4;-v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,从而让用户了解当前的扫描状态。

    break@kali:~$ nmap -T4 -A -v 10.10.10.130 Starting Nmap 7.40 ( https://nmap.org ) at 2017-06-17 14:14 EDT NSE: Loaded 143 scripts for scanning. NSE: Script Pre-scanning. Initiating NSE at 14:14 Completed NSE at 14:14, 0.00s elapsed Initiating NSE at 14:14 Completed NSE at 14:14, 0.00s elapsed Initiating Ping Scan at 14:14 Scanning 10.10.10.130 [2 ports] Completed Ping Scan at 14:14, 0.00s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 14:14 Completed Parallel DNS resolution of 1 host. at 14:14, 0.02s elapsed Initiating Connect Scan at 14:14 Scanning 10.10.10.130 [1000 ports] Discovered open port 445/tcp on 10.10.10.130

  • www.cnbreak.org

    Discovered open port 1025/tcp on 10.10.10.130 Discovered open port 135/tcp on 10.10.10.130 Discovered open port 80/tcp on 10.10.10.130 Discovered open port 139/tcp on 10.10.10.130 Discovered open port 21/tcp on 10.10.10.130 Discovered open port 6002/tcp on 10.10.10.130 Discovered open port 8099/tcp on 10.10.10.130 Discovered open port 1026/tcp on 10.10.10.130 Discovered open port 777/tcp on 10.10.10.130 Discovered open port 1521/tcp on 10.10.10.130 Discovered open port 1031/tcp on 10.10.10.130 Discovered open port 7002/tcp on 10.10.10.130 Discovered open port 1027/tcp on 10.10.10.130 Discovered open port 7001/tcp on 10.10.10.130 Completed Connect Scan at 14:14, 0.06s elapsed (1000 total ports) Initiating Service scan at 14:14 Scanning 15 services on 10.10.10.130 Completed Service scan at 14:16, 141.14s elapsed (15 services on 1 host) NSE: Script scanning 10.10.10.130. Initiating NSE at 14:16 Completed NSE at 14:16, 15.18s elapsed Initiating NSE at 14:16 Completed NSE at 14:16, 1.01s elapsed Nmap scan report for 10.10.10.130 Host is up (0.00032s latency). Not shown: 985 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp Microsoft ftpd |_ftp-anon: Anonymous FTP login allowed (FTP code 230) 80/tcp open http Microsoft IIS httpd 6.0 | http-methods: | Supported Methods: OPTIONS TRACE GET HEAD POST |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/6.0 |_http-title: Under Construction 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds Windows Server 2003 3790 microsoft-ds 777/tcp open multiling-http? 1025/tcp open msrpc Microsoft Windows RPC 1026/tcp open msrpc Microsoft Windows RPC 1027/tcp open msrpc Microsoft Windows RPC 1031/tcp open msrpc Microsoft Windows RPC 1521/tcp open oracle-tns Oracle TNS Listener 10.2.0.1.0 (for 32-bit Windows) 6002/tcp open http SafeNet Sentinel Protection Server httpd 7.3 | http-methods: |_ Supported Methods: GET |_http-title: Sentinel License Monitor 7001/tcp open afs3-callback? 7002/tcp open http SafeNet Sentinel Keys License Monitor httpd 1.0 (Java Console) | http-methods: |_ Supported Methods: GET |_http-title: Sentinel Keys License Monitor 8099/tcp open http Microsoft IIS httpd 6.0 |_http-server-header: Microsoft-IIS/6.0 |_http-title: The page must be viewed over a secure channel

  • www.cnbreak.org

    1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port777-TCP:V=7.40%I=7%D=6/17%Time=594571B0%P=x86_64-pc-linux-gnu%r(Ker SF:beros,5,"\x01\0\t\xe0\x06")%r(SMBProgNeg,5,"\x01\0\t\xe0\x06")%r(Termin SF:alServer,A,"\x01\0\t\xe0\x06\x01\0\t\xe0\x06")%r(WMSRequest,5,"\x01\0\t SF:\xe0\x06"); Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2003 Host script results: | nbstat: NetBIOS name: ROOT-TVI862UBEH, NetBIOS user: , NetBIOS MAC: 00:0c:29:1a:e7:0d (VMware) | Names: | ROOT-TVI862UBEH Flags: | WORKGROUP Flags: | SNTL_ROOT-TVI86 Flags: | ROOT-TVI862UBEH Flags: | WORKGROUP Flags: | WORKGROUP Flags: |_ \x01\x02__MSBROWSE__\x02 Flags: | smb-os-discovery: | OS: Windows Server 2003 3790 (Windows Server 2003 5.2) | OS CPE: cpe:/o:microsoft:windows_server_2003::- | Computer name: root-tvi862ubeh | NetBIOS computer name: ROOT-TVI862UBEH\x00 | Workgroup: WORKGROUP\x00 |_ System time: 2017-06-18T02:16:33+08:00 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) |_smbv2-enabled: Server doesn't support SMBv2 protocol NSE: Script Post-scanning. Initiating NSE at 14:16 Completed NSE at 14:16, 0.00s elapsed Initiating NSE at 14:16 Completed NSE at 14:16, 0.00s elapsed Read data files from: /usr/bin/../share/nmap Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 157.96 seconds

    从扫描得出的结果我们可以看出目标开放的端口上运行的具体的应用程序和版本信息,还有操作系统的版本等等等等

    信息。

    4.3、主机发现的用法

    通常主机发现并不单独使用,而只是作为端口扫描、版本侦测、OS 侦测先行步骤。而在某些特殊应用(例如确定大型

    局域网内活动主机的数量),可能会单独专门适用主机发现功能来完成。

    不管是作为辅助用法还是专门用途,用户都可以使用 Nmap 提供的丰富的选项来定制主机发现的探测方式。

    -sL: List Scan 列表扫描,仅将指定的目标的 IP 列举出来,不进行主机发现。

    -sn: Ping Scan 只进行主机发现,不进行端口扫描。

    -Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。

  • www.cnbreak.org

    -PS/PA/PU/PY[portlist]: 使用 TCPSYN/ACK 或 SCTP INIT/ECHO 方式进行发现。

    -PE/PP/PM: 使用 ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用 IP 协议包

    探测对方主机是否开启。

    -n/-R: -n 表示不进行 DNS 解析;-R 表示总是进行 DNS 解析。

    --dns-servers : 指定 DNS 服务器。

    --system-dns: 指定使用系统的 DNS 服务器

    --traceroute: 追踪每个路由节点

    探测局域网内活动主机

    扫描局域网 192.168.1.100-192.168.1.120 范围内哪些 IP 的主机是活动的。

    命令如下:

    nmap -sn 10.10.10.1/24

    从结果中,可以看到这个 IP 范围内有三台主机处于在线状态。

    4.4、端口扫描原理

    端口扫描是 Nmap 最基本最核心的功能,用于确定目标主机的 TCP/UDP 端口的开放情况。

    默认情况下,Nmap 会扫描 1000 个最有可能开放的 TCP 端口。

    Nmap 通过探测将端口划分为 6 个状态:

    1. open:端口是开放的。

    2. closed:端口是关闭的。

    3. filtered:端口被防火墙 IDS/IPS 屏蔽,无法确定其状态。

    4. unfiltered:端口没有被屏蔽,但是否开放需要进一步确定。

    5. open|filtered:端口是开放的或被屏蔽。

    6. closed|filtered :端口是关闭的或被屏蔽。

    4.4.1、TCP SYN SCANNING

    这是 Nmap 默认的扫描方式,通常被称作半开放扫描(Half-open scanning)。该方式发送 SYN 到目标端口,

    如果收到 SYN/ACK 回复,那么判断端口是开放的;如果收到 RST 包,说明该端口是关闭的。如果没有收到回复,那

  • www.cnbreak.org

    么判断该端口被屏蔽(Filtered)。因为该方式仅发送 SYN 包对目标主机的特定端口,但不建立的完整的 TCP 连接,

    所以相对比较隐蔽,而且效率比较高,适用范围广。

    TCP SYN 探测到端口关闭:

    TCP SYN 探测到端口开放:

    4.4.2、TCP connect scanning

    TCP connect 方式使用系统网络 API connect 向目标主机的端口发起连接,如果无法连接,说明该端口关闭。

    该方式扫描速度比较慢,而且由于建立完整的 TCP 连接会在目标机上留下记录信息,不够隐蔽。所以,TCP connect

    是 TCP SYN 无法使用才考虑选择的方式。

    TCP connect 探测到端口关闭:

    TCP connect 探测到端口开放:

  • www.cnbreak.org

    4.4.3、TCP ACK scanning

    向目标主机的端口发送 ACK 包,如果收到 RST 包,说明该端口没有被防火墙屏蔽;没有收到 RST 包,说明被

    屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,可以辅助 TCP SYN 的方式来判断目标主机防火墙的状况。

    TCP ACK 探测到端口被屏蔽:

    TCP ACK 探测到端口未被屏蔽:

    4.4.4、TCP FIN/Xmas/NULL scanning

    这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN 扫描向目标主机的端口发送的

    TCP FIN 包或 Xmas tree 包/Null 包,如果收到对方 RST 回复包,那么说明该端口是关闭的;没有收到 RST 包说明端

    口可能是开放的或被屏蔽的(open|filtered)。

    其中 Xmas tree 包是指 flags 中 FIN URG PUSH 被置为 1 的 TCP 包;NULL 包是指所有 flags 都为 0 的 TCP 包。

    TCP FIN 探测到主机端口是关闭的:

    TCP FIN 探测到主机端口是开放或屏蔽的:

  • www.cnbreak.org

    4.4.5、UDP scanning

    UDP 扫描方式用于判断 UDP 端口的情况。向目标主机的 UDP 端口发送探测包,如果收到回复“ICMP port

    unreachable”就说明该端口是关闭的;如果没有收到回复,那说明 UDP 端口可能是开放的或屏蔽的。因此,通过反

    向排除法的方式来断定哪些 UDP 端口是可能出于开放状态。

    UDP 端口关闭:

    UDP 端口开放或被屏蔽:

    4.5、版本侦测

    版本侦测,用于确定目标主机开放端口上运行的具体的应用程序及版本信息。

    Nmap 提供的版本侦测具有如下的优点:

    高速。并行地进行套接字操作,实现一组高效的探测匹配定义语法。

    尽可能地确定应用名字与版本名字。

    支持 TCP/UDP 协议,支持文本格式与二进制格式。

    支持多种平台服务的侦测,包括 Linux/Windows/Mac OS/FreeBSD 等系统。

    如果检测到 SSL,会调用 openSSL 继续侦测运行在 SSL 上的具体协议(如 HTTPS/POP3S/IMAPS)。

    如果检测到 SunRPC 服务,那么会调用 brute-force RPC grinder 进一步确定 RPC 程序编号、名字、版本号。

    支持完整的 IPv6 功能,包括 TCP/UDP,基于 TCP 的 SSL。

    通用平台枚举功能(CPE)

    广泛的应用程序数据库(nmap-services-probes)。目前 Nmap 可以识别几千种服务的签名,包含了 180 多种不

    同的协议。

  • www.cnbreak.org

    4.5.1、版本侦测原理

    简要的介绍版本的侦测原理。

    版本侦测主要分为以下几个步骤:

    1. 首先检查 open 与 open|filtered 状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。

    2. 如果是 TCP 端口,尝试建立 TCP 连接。尝试等待片刻(通常 6 秒或更多,具体时间可以查询文件 nmap-

    services-probes 中 Probe TCP NULL q||对应的 totalwaitms)。通常在等待时间内,会接收到目标机发送的

    “WelcomeBanner”信息。nmap 将接收到的 Banner 与 nmap-services-probes 中 NULL probe 中的签名进行对

    比。查找对应应用程序的名字与版本信息。

    3. 如果通过“Welcome Banner”无法确定应用程序版本,那么 nmap 再尝试发送其他的探测包(即从 nmap-

    services-probes 中挑选合适的 probe),将 probe 得到回复包与数据库中的签名进行对比。如果反复探测都无法

    得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。

    4. 如果是 UDP 端口,那么直接使用 nmap-services-probes 中探测包进行探测匹配。根据结果对比分析出 UDP 应用

    服务类型。

    5. 如果探测到应用程序是 SSL,那么调用 openSSL 进一步的侦查运行在 SSL 之上的具体的应用类型。

    6. 如果探测到应用程序是 SunRPC,那么调用 brute-force RPC grinder 进一步探测具体服务。

    4.5.2、版本侦测的用法

    版本侦测方面的命令行选项比较简单。

    -sV: 指定让 Nmap 进行版本侦测

    --version-intensity : 指定版本侦测强度(0-9),默认为 7。数值越高,探测出的服务越准确,但是运行时间会

    比较长。

    --version-light: 指定使用轻量侦测方式 (intensity 2)

    --version-all: 尝试使用所有的 probes 进行侦测 (intensity 9)

    --version-trace: 显示出详细的版本侦测过程信息。

    4.5.3、版本侦测的演示

    命令:

    nmap -sV 10.10.10.130

  • www.cnbreak.org

    对主机 10.10.10.130 进行版本侦测。

    从结果我们可以看出,共有 985 个端口处于关闭状态,从 135、139、445 中检测到微软特定的应用服务,所以推断出

    对方运行的 Windows 的操作系统

    4.6、OS 侦测

    操作系统侦测用于检测目标主机运行的操作系统类型及设备类型等信息。

    Nmap 拥有丰富的系统数据库 nmap-os-db,目前可以识别 2600 多种操作系统与设备类型。

    4.6.1、OS 侦测原理

    Nmap 使用 TCP/IP 协议栈指纹来识别不同的操作系统和设备。在 RFC 规范中,有些地方对 TCP/IP 的实现并

    没有强制规定,由此不同的 TCP/IP 方案中可能都有自己的特定方式。Nmap 主要是根据这些细节上的差异来判断操作

    系统的类型的。

    具体实现方式如下:

    1. Nmap 内部包含了 2600 多已知系统的指纹特征(在文件 nmap-os-db 文件中)。将此指纹数据库作为进行指纹对

    比的样本库。

    2. 分别挑选一个 open 和 closed 的端口,向其发送经过精心设计的 TCP/UDP/ICMP 数据包,根据返回的数据包生成

    一份系统指纹。

    3. 将探测生成的指纹与 nmap-os-db 中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系

    统。

    4.6.2、OS 侦测用法

    OS 侦测的用法简单,Nmap 提供的命令比较少。

    -O: 指定 Nmap 进行 OS 侦测。

    --osscan-limit: 限制 Nmap 只对确定的主机的进行 OS 探测(至少需确知该主机分别有一个 open 和 closed 的端口)。

    --osscan-guess: 大胆猜测对方的主机的系统类型。由此准确性会下降不少,但会尽可能多为用户提供潜在的操作系统。

  • www.cnbreak.org

    4.6.3、OS 侦测演示

    命令:

    nmap -O 10.10.10.130

    从上图中可看到,指定-O 选项后先进行主机发现与端口扫描,根据扫描到端口来进行进一步的 OS 侦测。获取的

    结果信息有设备类型,操作系统类型,操作系统的 CPE 描述,操作系统细节,网络距离等。

    4.7、NMAP 高级用法

    4.7.1、防火墙/IDS 规避 防火墙与 IDS 规避为用于绕开防火墙与 IDS(入侵检测系统)的检测与屏蔽,以便能够更加详细地发现目标主机

    的状况。

    Nmap 提供了多种规避技巧,通常可以从两个方面考虑规避方式:数据包的变换(Packet Change)与时序变换

    (Timing Change)。

    4.7.1.1、规避原理

    4.7.1.1.1、分片(Fragmentation) 将可疑的探测包进行分片处理(例如将 TCP 包拆分成多个 IP 包发送过去),某些简单的防火墙为了加快

    处理速度可能不会进行重组检查,以此避开其检查。

    4.7.1.1.2、IP 诱骗(IP decoys) 在进行扫描时,将真实 IP 地址和其他主机的 IP 地址(其他主机需要在线,否则目标主机将回复大量数据

    包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或 IDS 追踪检查大量的

  • www.cnbreak.org

    不同 IP 地址的数据包,降低其追查到自身的概率。注意,某些高级的 IDS 系统通过统计分析仍然可以追踪出扫描

    者真实 IP 地址。

    4.7.1.1.3、IP 伪装(IP Spoofing) 顾名思义,IP 伪装即将自己发送的数据包中的 IP 地址伪装成其他主机的地址,从而目标机认为是其他主

    机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的 IP 需要位于统一局域网内。另外,如

    果既希望隐蔽自己的 IP 地址,又希望收到目标主机的回复包,那么可以尝试使用 idle scan 或匿名代理(如 TOR)

    等网络技术。

    4.7.1.1.4、指定源端口 某些目标主机只允许来自特定端口的数据包通过防火墙。例如 FTP 服务器配置为:允许源端口为 21 号的

    TCP 包通过防火墙与 FTP 服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定

    Nmap 将发送的数据包的源端口都设置特定的端口。

    4.7.1.1.5、扫描延时 某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例

    如,Solaris 系统通常会限制每秒钟只能产生一个 ICMP 消息回复给 UDP 扫描),所以,定制该情况下发包的频

    率和发包延时可以降低目标主机的审查强度、节省网络带宽。

    4.7.1.1.6、其他技术 Nmap 还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定

    发包的 MTU、指定 TTL、指定伪装的 MAC 地址、使用错误检查和(badchecksum)。

    更多信息 http://nmap.org/book/man-bypass-firewalls-ids.html

    4.7.1.2、规避用法

    -f; --mtu : 指定使用分片、指定数据包的 MTU.

    -D : 用一组 IP 地址掩盖真实地址,其中 ME 填入自己的 IP 地址。

    -S : 伪装成其他 IP 地址

    -e : 使用特定的网络接口

    -g/--source-port : 使用指定源端口

    --data-length : 填充随机数据让数据包长度达到 Num。

    --ip-options : 使用指定的 IP 选项来发送数据包。

    --ttl : 设置 time-to-live 时间。

    --spoof-mac : 伪装 MAC 地址

    --badsum: 使用错误的 checksum 来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来

    自防火墙或 IDS/IPS)。

  • www.cnbreak.org

    4.7.1.3、规避演示

    使用命令:

    nmap -v -F -Pn -D 10.10.10.100,10.10.10.102,ME -e eth0 -g 3355 10.10.10.130

    其中,-F 表示快速扫描 100 个端口;-Pn 表示不进行 Ping 扫描;-D 表示使用 IP 诱骗方式掩盖自己真实 IP(其

    中 ME 表示自己 IP);-e eth0 表示使用 eth0 网卡发送该数据包;-g 3355 表示自己的源端口使用 3355;

    10.10.10.130 是被扫描的目标 IP 地址。

    4.7.2、NSE 脚本引擎

    NSE 脚本引擎(Nmap Scripting Engine)是 Nmap 最强大最灵活的功能之一,允许用户自己编写脚本来执行

    自动化的操作或者扩展 Nmap 的功能。

    NSE 使用 Lua 脚本语言,并且默认提供了丰富的脚本库,目前已经包含 14 个类别的 350 多个脚本。

    NSE 的设计初衷主要考虑以下几个方面:

    网络发现(Network Discovery)

    更加复杂的版本侦测(例如 skype 软件)

    漏洞侦测(Vulnerability Detection)

    后门侦测(Backdoor Detection)

    漏洞利用(Vulnerability Exploitation)

    4.7.2.1、NSE 创建脚本方法

    下面以 daytime.nse 脚本为例说明一下 NSE 格式。

  • www.cnbreak.org

    NSE 的使用 Lua 脚本,并且配置固定格式,以减轻用户编程负担。通常的一个脚本分为几个部分:

    description 字段:描述脚本功能的字符串,使用双层方括号表示。

    comment 字段:以--开头的行,描述脚本输出格式

    author 字段:描述脚本作者

    license 字段:描述脚本使用许可证,通常配置为 Nmap 相同的 license

    categories 字段:描述脚本所属的类别,以对脚本的调用进行管理。

    rule 字段:描述脚本执行的规则,也就是确定触发脚本执行的条件。在 Nmap 中有四种类型的规则,

    prerule 用于在 Nmap 没有执行扫描之前触发脚本执行,这类脚本并不需用到任何 Nmap 扫描的结果;

    hostrule 用在 Nmap 执行完毕主机发现后触发的脚本,根据主机发现的结果来触发该类脚本;portrule 用

    于 Nmap 执行端口扫描或版本侦测时触发的脚本,例如检测到某个端口时触发某个脚本执行以完成更详细的

    侦查。postrule 用于 Nmap 执行完毕所有的扫描后,通常用于扫描结果的数据提取和整理。在上述实例中,

    只有一个 portrule,说明该脚本在执行端口扫描后,若检测到 TCP 13 号端口开放,那么触发该脚本的执行。

    action 字段:脚本执行的具体内容。当脚本通过 rule 字段的检查被触发执行时,就会调用 action 字段定义

    的函数。

    4.7.2.2、NSE 脚本用法

    Nmap 提供不少脚本使用的命令行参数。

    -sC: 等价于 --script=default,使用默认类别的脚本进行扫描。

  • www.cnbreak.org

    --script=: 使用某个或某类脚本进行扫描,支持通配符描述

    --script-args=: 为脚本提供默认参数

    --script-args-file=filename: 使用文件来为脚本提供参数

    --script-trace: 显示脚本执行过程中发送与接收的数据

    --script-updatedb: 更新脚本数据库

    --script-help=: 显示脚本的帮助信息,其中部分可以逗号分隔的文件或脚本类别。

    4.7.2.3、NSE 用法演示 配合脚本扫描 192.168.1.1,查看能否获得有用的信息。

    命令如下:

    nmap -sV -p 80 -v --script http-default-accounts 10.10.10.130

  • www.cnbreak.org

    从返回的信息可以看出目标使用的是 IIS6.0,然后你就可以搜索 IIS6.0 的漏洞进一步渗透测试了。

    5、结束语:

    非常好用的一款扫描工具,使用方便,文档完整,功能强大,简直就是我的侦察兵,不过在实际运用中还是要根

    据实际情况去配置合适的参数进行扫描。

    6、参考资料:

    Nmap 官网:https://nmap.org/book/man-briefoptions.html

    网络安全技术修炼:http://blog.csdn.net/aspirationflow/article/details/7694274

    nmap用法1、什么是nmap(取自百度)?2、功能?2.1、zenmap3、选项(取自nmap官网)?3.1、用法:nmap [扫描类型] [选项] {目标规格}3.2、目标规格:3.3、主机发现:3.4、扫描技术:3.5、端口规格和扫描订单:3.6、服务/版本检测:3.7、脚本扫描:3.8、操作系统检测:3.9、时间和性能:3.10、防火墙/ IDS逃避和SPOOFING:3.11、OUTPUT:3.12、MISC:4、Nmap基本扫描方法(取自aspirationflow的CSDN博客):4.1、用法引入4.2、完整全面的扫描4.3、主机发现的用法4.4、端口扫描原理4.4.1、TCP SYN scanning4.4.2、TCP connect scanning4.4.3、TCP ACK scanning4.4.4、TCP FIN/Xmas/NULL scanning4.4.5、UDP scanning4.5、版本侦测4.5.1、版本侦测原理4.5.2、版本侦测的用法4.5.3、版本侦测的演示4.6、OS侦测4.6.1、OS侦测原理4.6.2、OS侦测用法4.6.3、OS侦测演示4.7、Nmap高级用法4.7.1、防火墙/IDS规避4.7.1.1、规避原理4.7.1.1.1、分片(Fragmentation)4.7.1.1.2、IP诱骗(IP decoys)4.7.1.1.3、IP伪装(IP Spoofing)4.7.1.1.4、指定源端口4.7.1.1.5、扫描延时4.7.1.1.6、其他技术4.7.1.2、规避用法4.7.1.3、规避演示4.7.2、NSE脚本引擎4.7.2.1、NSE创建脚本方法4.7.2.2、NSE脚本用法4.7.2.3、NSE用法演示5、结束语:6、参考资料: