Nmap渗透指南

发布时间 2023-12-11 16:32:19作者: 取到小饼干

Nmap渗透测试指南

简介:nmap(Network Mapper)意思是网络映射器

nmap TCP/IP协议栈指纹

  T1   发送TCP数据包(Flag=SYN)到开放TCP端口
  T2   发送空TCP数据包到开放的TCP端口
  T3   发送TCP数据包(Flag=SYN,URG,PSH,FIN)到开放的TCP端口
  T4   发送TCP数据包(Flag=ACK)到开放的TCP端口
  T5   发送TCP数据包(Flag=SYN)到关闭的TCP端口
  T6   发型TCP数据包(Flag=ACK)到关闭的TCP端口
  T7   发送TCP数据包(Flag=URG,PSH,FIN)到关闭的TCP端口

语法

nmap -a(协议或参数或选项) 127.0.0.1(目标)
全面扫描   -A
指定段扫描   在目标连接的最后段用-连接   192.168.126.1-200

nmap命令大全

-sP Ping扫描

-P0 无Ping扫描 穿透防火墙,也可以避免被防火墙发现
nmap -P0 【协议1、协议2】 【目标】 如果没有指定协议,默认使用协议1,2,4,如果想知道这些协议是如何判断目标主机是否存活可以使用--packet-trace选项
TCP协议编号6,ICMP协议编号1,IGMP协议编号2,UDP协议编号17
nmap -P0 6,17,2 --packet-trace scanme.nmap.org

-PS TCP SYN Ping扫描
发送一个设置了SYN标志位的空TCP报文,当目标主机的防火墙阻止这些请求时,我们可以使用该扫描选项来进行对目标主机存活的判断

-PA TCP ACK Ping扫描 原理同上类似,两个选项可以同时使用

-PU UDP Ping扫描 发送一个空的UDP报文到指定端口,默认40125

-PE;-PP;-PM ICMP Ping Types扫描
ICMP协议是Internet控制报文协议,是TCP/IP协议的一个子协议,用于传递控制消息(检测网络、主机、路由等网络本身消息是否流通),不传输用户数据
-PE通过向目标发送ICMP Echo数据包来探测目标主机是否在线
-PP是ICMP时间戳ping扫描
-PM是进行ICMP地址掩码ping扫描。

-PR ARP ping扫描
该选项通常在扫描局域网的时候使用。地址解析协议,主机将ARP请求广播到网络上的所有主机,并接受返回消息,确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存。改扫描选项是对目标进行ARP ping的过程,尤其在内网的情况下,ARP扫描时最为有效的,在本地局域网中防火墙不会禁止ARP请求。在默认情况下,如果nmap发现目标主机就在它所在的局域网上,会进行ARP扫描(即使用-PI -PS也会默认扫描ARP),如果不想使用ARP扫描,可以指定--send-ip。

-sL 列表扫描
仅仅列出指定网络上的每台主机,不发送任何报文到目标主机。默认情况下,nmap仍然对主机进行反向域名解析以获取它们的名字

-n 禁止反向域名解析
永远不对目标IP地址作反向域名解析

-R 反向域名解析
永远对目标IP地址作反向域名解析

--system-dns 使用系统域名解析器
nmap直接发送查询到您主机上配置的域名服务器来解析域名

-6 扫描一个IPv6地址
nmap -6 fe80::20c::29ff::fee0::2e76

--traceroute 路由跟踪
此选项可以查出从本地计算机到目标之间经过的网络节点,并可以看到通过各个节点的时间

1、Intense scan (nmap -T4 -A -v) 一般扫描
-T4 加快执行速度
-A 操作系统及版本探测
-v 显示详细的输出

2、Intense scan plus UDP (nmap -sS -sU -T4 -A -v) UDP扫描
-sS TCP SYN 扫描
-sU UDP 扫描

3、Intense scan,all TCP ports (nmap -p 1-65536 -T4 -A -v)
扫描所有TCP端口,范围在1-65535,试图扫描所有端口的开放情况,速度比较慢。
-p 指定端口扫描范围

4、Intense scan,no ping (nmap -T4 -A -v -Pn) 非ping扫描 -Pn 非ping扫描

5、Ping scan (nmap -sn) Ping 扫描 -sn ping扫描

优点:速度快。 缺点:容易被防火墙屏蔽,导致无扫描结果

6、Quick scan (nmap -T4 -F) 快速的扫描 -F 快速模式。

7、Quick scan plus (nmap -sV -T4 -O -F --version-light) 快速扫描加强模式
-sV 探测端口及版本服务信息。
-O 开启OS检测
--version-light 设定侦测等级为2。

8、Quick traceroute (nmap -sn --traceroute) 路由跟踪
-sn Ping扫描,关闭端口扫描
-traceroute 显示本机到目标的路由跃点。

9、Regular scan 规则扫描

10、Slow comprehensive scan 慢速全面扫描
(nmap -sS -sU -T4 -A -v -PE -PP -PS80,443,-PA3389,PU40125 -PY -g 53 --script all)

探索网络
端口扫描方式中,所有的扫描选项都是以-s的形式出现
比如ACK扫描 -sA ,UDP扫描-sU

-T 时序选项
-T0 非常慢,用于IDS逃避
-T1 慢,用于IDS逃避
-T2 比较慢,降低速度以降低对带宽的消耗(很少用)
-T3 默认,根据目标的反应自动调整时间
-T4 快速扫描,常用的扫描方式,需要在很好的网络环境下进行扫描,请求可能会淹没目标
-T5 极速扫描,该方式以牺牲准确度来提升扫描速度

--scanflags 自定义TCP扫描
-sI 空闲扫描,是nmap的高级用法,允许端口完全欺骗扫描。可以使攻击者能够不使用自己的IP向目标主机发送数据包,它可以利用不活跃的僵尸主机反弹给攻击者一个旁通信道,从而进行端口扫描。
nmap -sI www.0day.co:80 192.168.126.131
如上,如果有IDS,IDS会认为是前者进行的扫描

-sO IP协议扫描

指纹识别与探测

-sV 版本探测
-sV的附加选项
加上-A 进行操作系统版本探测
--allports 全端口版本探测
--version-intensity 设置扫描强度,后面直接加 数字,取值范围0~9
--version-light 轻量级扫描
--version-all 重量级扫描
--version-trace 获取详细版本信息

-sR RPC扫描

-O 启用操作系统探测
--osscan-limit 对指定的目标进行操作系统检测
--osscan-guess;--fuzzy 推测系统识别

5.2调整并行扫描组的大小

--min-hostgroup 和 --max-hostgroup

nmap --min-hostgroup 30 192.168.1.1/24

nmap --max-hostgroup 10 192.168.1.1/24

5.3 调整探测报文的并行度
--min-parallelism 和 --max-parallelism

--min-parallelism大于1可以在网络或主机不好的情况下进行更好的扫描,但是会影响结果的准确度

--max--parallelism设置为1,防止Nmap对同一主机同一时间发送多次报文

5.4 调整探测报文超时
--min-rrt-timeout

--max-rtt-timeout

--initial-rtt-timeout

以毫秒为单位,对于一些严格过滤或者不能Ping通的主机有着很好的突破效果,不能将值设置过小,否则会增加扫描时间

使用--max-rrt-timeout 选项时 规定为100毫秒比较适合.一般情况下rrt值不小于100毫秒,也最好不超过1000毫秒

nmap --initial-rtt-timeout 100ms 192.168.11.1

5.5 放弃缓慢的目标主机

--host-timeout 放弃缓慢的目标主机,单位是毫秒 一般我们设置为1800000毫秒

nmap -host-timeout 100ms 192.168.1.1

5.6 调整报文合适时间间隔
--scanf-delay

--max-scan-delay

等待时间以毫秒为单位,在带宽不乐观的情况下使用该选项,但是这个选项不能将Nmap应有的性能发挥出来,这个选项还是要谨慎使用

· -f 报文分段
· nmap使用-f 选项会将TCP头分段在几个包中,使得包过滤器,IDS以及其他工具的检测更加困难
· --mtu 指定偏移大小
· 16,32 这种小的数字比较好
偏移大小必须是8的倍数
· -D ip欺骗
· 例如 nmap -D 192.168.0.1,157,89,85,4 目标 指定伪造的ip
例如 nmap -D RND:数量 目标 使用RND随机生产几个地址
例如 nmap -D ME 目标 ME可以指定主机的真实ip
· -sI(i的大写) 源地址欺骗
· 使用 -sI就可以进行源地址欺骗,例如 -sI www.0day.com:80 目标
· --source-port 源端口欺骗
· 防火墙对服务器的设置会根据端口选择是否信任数据流,管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描
nmap --source-port 53 目标
· --data-length 指定发包长度
· nmap --data-length 30 目标
在原来报文基础上附加随即数据达到规避防火墙的效果
· --randomize-hosts 目标主机随机排序
· 单方面使用这个选项对防火墙/IDS逃逸的效果不大, 如果配合是时间选项则会有很好的效果
nmap --rangomize-hosts 192.168.126.1-200
· --spoof-mac MAC地址欺骗
· nmap --spoof-mac 0 目标 指定一个随机的MAC地址。

信息搜集

2.1 IP信息搜集
nmap --script ip-geolocation-* www.Oday .co

注意,如果目标域名使用了CDN,则无效。

2.2 WHOIS查询
WHOIS通常使用TCP协议43端口。每个域名或IP的WHOIS信息由对应的管理机构保存。

nmap --script whois www.0day.co

查询该域名的历史whois,可以获得更多信息,

nmap --script whois --script-args whois.whodb-nofollow www.0day.co

使用列表的方式进行查询,

nmap -sn --script whois -v-iL host.txt

2.3 IP反查
IP 反查可以将所有绑定到该IP的域名显示出来,这样我们就可以很清楚地知道有几个站点在同一个服务器上。但是IP反查不能辨别IP真伪。

nmap -sn --script hostmap-ip2hosts www.0day.co

2.4 DNS查询
nmap --script dns-brute dns-brute.threads=10 www.xxx.com,设置10个线程时相应的扫描速度会增加。

2.5 通过Snmp列举Windows服务/账户
nmap -sU -p 161 --script=snmp-win32-services 192.168.126.128

Nmap提供的snmp-win32-services脚本可以轻易地通过Snmp服务获取目标正在运行着的服务,通过snmp-win32 users脚本则可以看到目标的所有账户。

2.6 枚举DNS服务器的主机名和子域名
nmap --script dns-brute --script-args dns-brute.domain=baidu.com

该脚本可以使用“dns-brute.threads =线程”指定线程来加快或减少破解速度,使用dns-brute. hostlist=./hostfile.txt指定一一个 需要枚举的列表。

2.7 HTTP信息搜集
使用-sV选项即可对HTTP版本进行探测, nmap -sV -p 80 www. Oday. Com

使用命令“nmap -p 80 --script=http-headers目标地址”即可对目标地址进行HTTP头信息探测。

使用命令“nmap -p 80 --script-http-sitemap-generator目标地址”即可爬行Web目录结构。

2.8 枚举SSL密钥
SSL ( Secure Sockets Layer,安全套接层)及其继任者传输层安全(Transport Layer Security, TLS)是为网络通信提供安全及数据完整性的种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL协议使用密钥对数据进行加密,这样可以最大程度保障数据的安全,通过发送SSLv3/TLS请求可以判断目标服务器支持的密钥算法和压缩方法。

使用命令“nmap -p 443 --Script=ssl-enum-ciphers目标”即可枚举SSL密钥。

2.9 SSH服务密钥信息探测
SSH是英文Secure Shell的简写形式。通过使用SSH,可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一一个安全的“通道”。

nmap -p 22 --script ssh-hostkey --script-args ssh_ hostkey=full 127.0.0.1

数据库渗透测试(直接搜索命令找具体用法)
--script mysql-databases
mysql-databases mysql列举数据库
mysql-variables 列举MySQL变量
mysql-empty-password 检查MySQL密码
mysql-brute 审计MySQL密码
mysql-audit 审计MySQL安全配置
oracle-brute 审计Oracle密码
ms-sql-brute 审计msSQL密码
ms-sql-empty-password 检查msSQL空密码
ms-sql-tables 读取msSQL数据
ms-sql-xp-cmdshell msSQL执行系统命令
pgsql-brute 审计PgSQL密码

渗透测试
--script http-brute -p 80 目标
http-brute 审计HTTP身份验证
ftp-brute 审计FTP服务器
http-wordpress-brute 审计WordPress程序
http-joomla-brute 审计joomla程序
pop3-brute 审计邮件服务器
smb-brute.nse 审计SMB口令
vnc-brute 审计VNC服务器
smtp-brute 审计SMTP服务器
stuxnet-detect 检测Stuxnet蠕虫
snmp-netstat snmp-processes snmp-win32-services snmp-brute SNMP服务安全审计

NMAP技巧

--send-eth 发送以太网数据包 在数据链路层,非网络层,在Unix中无论是否使用该选项,nmap都会使用原IP包。

--send-ip 网络层发送

--privileged 假定拥有所有权

--interactive 在交互模式中启动

-V 查看nmap版本号

-d 设置调试级别

--packet-trace 跟踪发送接收的报文

--iflist 列举接口的路由

-e 指定网络接口 nmap -e eth0 目标

-oG 继续终端扫描 nmap -oG 1.txt -v 目标,将扫描结果保存为txt
使用--resume选项继续扫描 nmap --resume 1.txt

firewalk 探测防火墙

vmauthd-brute VMWare认证破解

nmap保存和输出
-oN 标准保存 nmap -oN test1.txt 目标
-oX XML保存 .xml
-oS 133t保存 .txt
-oG Grep保存 .txt
-oA 保存到所有格式
--append-output 补充保存文件
-oX --stylesheet 转换XML保存 .xml
-oX 忽略XML声明的XSL样式表 .xml --no-stylesheet(禁止nmap的XML保存关联IG任何XSL样式表)

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定.

1.名称

nmap-网络探测和安全扫描工具

2.语法

nmap [Scan Type(s)][Options]

3.描述

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。

  为了提高nmap在non-root状态下的性能,软件的设计者付出了很大的努力。很不幸,一些内核界面(例如raw socket)需要在root状态下使用。所以应该尽可能在root使用nmap。

nmap运行通常会得到被扫描主机端口的列表。nmap总会给出well known端口的服务名(如果可能)、端口号、状态和协议等信息。每个端口的状态有:open、filtered、unfiltered。open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接。filtered状态表示:防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止 nmap探测其是否打开。unfiltered表示:这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。

  根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址、以及其它一些东西。

4.功能选项

  功能选项可以组合使用。一些功能选项只能够在某种扫描模式下使用。nmap会自动识别无效或者不支持的功能选项组合,并向用户发出警告信息。

  如果你是有经验的用户,可以略过结尾的示例一节。可以使用nmap -h快速列出功能选项的列表。

4.1 扫描类型

-sT
TCP connect()扫描:这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听, connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sS
TCP同步扫描(TCP SYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sF -sX -sN
  秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式:即使SYN扫描都无法确定的情况下使用。一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行监视,而且有些程序比如synlogger和courtney能够检测那些扫描。这些高级的扫描方式可以逃过这些干扰。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包(参考RFC 793第64页)。FIN扫描使用暴露的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。不幸的是,微软决定完全忽略这个标准,另起炉灶。所以这种扫描方式对Windows95/NT无效。不过,从另外的角度讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可以发现打开的端口,你就可以确定目标主机运行的不是Windows系统。如果使用-sF、-sX或者-sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,你可以确定目标主机可能运行的是Windwos系统。现在这种方式没有什么太大的用处,因为nmap有内嵌的操作系统检测功能。还有其它几个系统使用和windows同样的处理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在应该抛弃数据包时,以上这些系统都会从打开的端口发出复位数据包。
-sP
ping扫描:有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。如果主机正在运行就会作出响应。不幸的是,一些站点例如:microsoft.com阻塞ICMP echo请求数据包。然而,在默认的情况下nmap也能够向80端口发送TCP ack包,如果你收到一个RST包,就表示主机正在运行。nmap使用的第三种技术是:发送一个SYN包,然后等待一个RST或者SYN/ACK包。对于非root用户,nmap使用connect()方法。
  在默认的情况下(root用户),nmap并行使用ICMP和ACK技术。
  注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
-sU
UDP扫描:如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。
  有些人可能会想UDP扫描是没有什么意思的。但是,我经常会想到最近出现的solaris rpcbind缺陷。rpcbind隐藏在一个未公开的UDP端口上,这个端口号大于32770。所以即使端口111(portmap的众所周知端口号) 被防火墙阻塞有关系。但是你能发现大于30000的哪个端口上有程序正在监听吗?使用UDP扫描就能!cDc Back Orifice的后门程序就隐藏在Windows主机的一个可配置的UDP端口中。不考虑一些通常的安全缺陷,一些服务例如:snmp、tftp、NFS 使用UDP协议。不幸的是,UDP扫描有时非常缓慢,因为大多数主机限制ICMP错误信息的比例(在RFC1812中的建议)。例如,在Linux内核中 (在net/ipv4/icmp.h文件中)限制每4秒钟只能出现80条目标不可达的ICMP消息,如果超过这个比例,就会给1/4秒钟的处罚。solaris的限制更加严格,每秒钟只允许出现大约2条ICMP不可达消息,这样,使扫描更加缓慢。nmap会检测这个限制的比例,减缓发送速度,而不是发送大量的将被目标主机丢弃的无用数据包。
  不过Micro$oft忽略了RFC1812的这个建议,不对这个比例做任何的限制。所以我们可以能够快速扫描运行Win95/NT的主机上的所有65K个端口。
-sA
ACK扫描:这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。
这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
-sW
  对滑动窗口的扫描:这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。这些系统至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64 UNIX、DG/UX、OpenVMS、Digital UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS 4.x、Ultrix、VAX、VXWORKS。从nmap-hackers邮件3列表的文档中可以得到完整的列表。
-sR
RPC扫描。这种方法和nmap的其它不同的端口扫描方法结合使用。选择所有处于打开状态的端口向它们发出SunRPC程序的NULL命令,以确定它们是否是RPC端口,如果是,就确定是哪种软件及其版本号。因此你能够获得防火墙的一些信息。诱饵扫描现在还不能和RPC扫描结合使用。
-b
FTP反弹攻击(bounce attack):FTP协议(RFC 959)有一个很有意思的特征,它支持代理FTP连接。也就是说,我能够从evil.com连接到FTP服务器target.com,并且可以要求这台FTP服务器为自己发送Internet上任何地方的文件!1985年,RFC959完成时,这个特征就能很好地工作了。然而,在今天的Internet 中,我们不能让人们劫持FTP服务器,让它向Internet上的任意节点发送数据。如同Hobbit在1995年写的文章中所说的,这个协议"能够用来做投递虚拟的不可达邮件和新闻,进入各种站点的服务器,填满硬盘,跳过防火墙,以及其它的骚扰活动,而且很难进行追踪"。我们可以使用这个特征,在一台代理FTP服务器扫描TCP端口。因此,你需要连接到防火墙后面的一台FTP服务器,接着进行端口扫描。如果在这台FTP服务器中有可读写的目录,你还可以向目标端口任意发送数据(不过nmap不能为你做这些)。
  传递给-b功能选项的参数是你要作为代理的FTP服务器。语法格式为:
-b username:password@server:port。
  除了server以外,其余都是可选的。如果你想知道什么服务器有这种缺陷,可以参考我在Phrack 51发表的文章。还可以在nmap的站点得到这篇文章的最新版本。

4.2 通用选项

  这些内容不是必需的,但是很有用。

-P0
  在扫描之前,不必ping主机。有些网络的防火墙不允许ICMP echo请求穿过,使用这个选项可以对这些网络进行扫描。microsoft.com就是一个例子,因此在扫描这个站点时,你应该一直使用-P0或者-PT 80选项。
-PT
  扫描之前,使用TCP ping确定哪些主机正在运行。nmap不是通过发送ICMP echo请求包然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCP ACK包然后等待回应。如果主机正在运行就会返回RST包。只有在目标网络/主机阻塞了ping包,而仍旧允许你对其进行扫描时,这个选项才有效。对于非 root用户,我们使用connect()系统调用来实现这项功能。使用-PT <端口号>来设定目标端口。默认的端口号是80,因为这个端口通常不会被过滤。
-PS
  对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。如果主机正在运行就返回一个RST包(或者一个SYN/ACK包)。
-PI
  设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。使用这个选项让nmap发现正在运行的主机的同时,nmap也会对你的直接子网广播地址进行观察。直接子网广播地址一些外部可达的IP地址,把外部的包转换为一个内向的IP广播包,向一个计算机子网发送。这些IP广播包应该删除,因为会造成拒绝服务攻击(例如 smurf)。
-PB
  这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O
  这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志。换句话说,nmap使用一些技术检测目标主机操作系统网络协议栈的特征。nmap使用这些信息建立远程主机的指纹特征,把它和已知的操作系统指纹特征数据库做比较,就可以知道目标主机操作系统的类型。
-I
  这个选项打开nmap的反向标志扫描功能。Dave Goldsmith 1996年向bugtap发出的邮件注意到这个协议,ident协议(rfc 1413)允许使用TCP连接给出任何进程拥有者的用户名,即使这个进程并没有初始化连接。例如,你可以连接到HTTP端口,接着使用identd确定这个服务器是否由root用户运行。这种扫描只能在同目标端口建立完全的TCP连接时(例如:-sT扫描选项)才能成功。使用-I选项是,远程主机的 identd精灵进程就会查询在每个打开的端口上监听的进程的拥有者。显然,如果远程主机没有运行identd程序,这种扫描方法无效。
-f
  这个选项使nmap使用碎片IP数据包发送SYN、FIN、XMAS、NULL。使用碎片数据包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。不过,要慎重使用这个选项!有些程序在处理这些碎片包时会有麻烦,我最喜欢的嗅探器在接受到碎片包的头36个字节时,就会发生 segmentation faulted。因此,在nmap中使用了24个字节的碎片数据包。虽然包过滤器和防火墙不能防这种方法,但是有很多网络出于性能上的考虑,禁止数据包的分片。
  注意这个选项不能在所有的平台上使用。它在Linux、FreeBSD、OpenBSD以及其它一些UNIX系统能够很好工作。
-v
  冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。使用这个选项,你可以得到事半功倍的效果。使用-d选项可以得到更加详细的信息。
-h
  快速参考选项。
-oN
  把扫描结果重定向到一个可读的文件logfilename中。
-oM
  把扫描结果重定向到logfilename文件中,这个文件使用主机可以解析的语法。你可以使用-oM -来代替logfilename,这样输出就被重定向到标准输出stdout。在这种情况下,正常的输出将被覆盖,错误信息荏苒可以输出到标准错误 stderr。要注意,如果同时使用了-v选项,在屏幕上会打印出其它的信息。
-oS thIs l0gz th3 r3suLtS ofYouR ScanZ iN a s| THe fiL3 U sPecfy 4s anarGuMEnT! U kAn gIv3 the 4rgument -
(wItHOUt qUOteZ) to sh00t output iNT0stDouT!@!! 莫名其妙,下面是我猜着翻译的,相形字?
  把扫描结果重定向到一个文件logfilename中,这个文件使用一种"黑客方言"的语法形式(作者开的玩笑?)。同样,使用-oS -就会把结果重定向到标准输出上。
-resume
  某个网络扫描可能由于control-C或者网络损失等原因被中断,使用这个选项可以使扫描接着以前的扫描进行。logfilename是被取消扫描的日志文件,它必须是可读形式或者机器可以解析的形式。而且接着进行的扫描不能增加新的选项,只能使用与被中断的扫描相同的选项。nmap会接着日志文件中的最后一次成功扫描进行新的扫描。
-iL
  从inputfilename文件中读取扫描的目标。在这个文件中要有一个主机或者网络的列表,由空格键、制表键或者回车键作为分割符。如果使用-iL -,nmap就会从标准输入stdin读取主机名字。你可以从指定目标一节得到更加详细的信息。
-iR
  让nmap自己随机挑选主机进行扫描。
-p <端口范围>
  这个选项让你选择要进行扫描的端口号的范围。例如,-p 23表示:只扫描目标主机的23号端口。-p 20-30,139,60000-表示:扫描20到30号端口,139号端口以及所有大于60000的端口。在默认情况下,nmap扫描从1到1024号以及nmap-services文件(如果使用RPM软件包,一般在/usr/share/nmap/目录中)中定义的端口列表。
-F
  快速扫描模式,只扫描在nmap-services文件中列出的端口。显然比扫描所有65535个端口要快。
-D
  使用诱饵扫描方法对目标网络/主机进行扫描。如果nmap使用这种方法对目标网络进行扫描,那么从目标主机/网络的角度来看,扫描就象从其它主机 (decoy1,等)发出的。从而,即使目标主机的IDS(入侵检测系统)对端口扫描发出报警,它们也不可能知道哪个是真正发起扫描的地址,哪个是无辜的。这种扫描方法可以有效地对付例如路由跟踪、response-dropping等积极的防御机制,能够很好地隐藏你的IP地址。
  每个诱饵主机名使用逗号分割开,你也可以使用ME选项,它代表你自己的主机,和诱饵主机名混杂在一起。如果你把ME放在第六或者更靠后的位置,一些端口扫描检测软件几乎根本不会显示你的IP地址。如果你不使用ME选项,nmap会把你的IP地址随机夹杂在诱饵主机之中。
  注意:你用来作为诱饵的主机应该正在运行或者你只是偶尔向目标发送SYN数据包。很显然,如果在网络上只有一台主机运行,目标将很轻松就会确定是哪台主机进行的扫描。或许,你还要直接使用诱饵的IP地址而不是其域名,这样诱饵网络的域名服务器的日志上就不会留下关于你的记录。
  还要注意:一些愚蠢的端口扫描检测软件会拒绝路由试图进行端口扫描的主机。因而,你需要让目标主机和一些诱饵断开连接。如果诱饵是目标主机的网关或者就是其自己时,会给目标主机造成很大问题。所以你需要慎重使用这个选项。
  诱饵扫描既可以在起始的ping扫描也可以在真正的扫描状态下使用。它也可以和-O选项组合使用。
  使用太多的诱饵扫描能够减缓你的扫描速度甚至可能造成扫描结果不正确。同时,有些ISP会把你的欺骗包过滤掉。虽然现在大多数的ISP不会对此进行限制。
-S <IP_Address>
  在一些情况下,nmap可能无法确定你的源地址(nmap会告诉你)。在这种情况使用这个选项给出你的IP地址。
  在欺骗扫描时,也使用这个选项。使用这个选项可以让目标认为是其它的主机对自己进行扫描。
-e
  告诉nmap使用哪个接口发送和接受数据包。nmap能够自动对此接口进行检测,如果无效就会告诉你。
-g
  设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。在使用UDP扫描时,先使用53号端口;使用TCP扫描时,先使用20号端口。注意只有在能够使用这个端口进行扫描时,nmap才会使用这个端口。例如,如果你无法进行TCP扫描,nmap会自动改变源端口,即使你使用了-g选项。
  对于一些扫描,使用这个选项会造成性能上的微小损失,因为我有时会保存关于特定源端口的一些有用的信息。
-r
  告诉nmap不要打乱被扫描端口的顺序。
--randomize_hosts
  使nmap在扫描之前,打乱每组扫描中的主机顺序,nmap每组可以扫描最多2048台主机。这样,可以使扫描更不容易被网络监视器发现,尤其和--scan_delay 选项组合使用,更能有效避免被发现。
-M
  设置进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描。使用这个选项可以降低扫描速度,避免远程目标宕机。

4.3 适时选项

  通常,nmap在运行时,能够很好地根据网络特点进行调整。扫描时,nmap会尽量减少被目标检测到的机会,同时尽可能加快扫描速度。然而,nmap默认的适时策略有时候不太适合你的目标。使用下面这些选项,可以控制nmap的扫描timing:

-T
  设置nmap的适时策略。Paranoid:为了避开IDS的检测使扫描速度极慢,nmap串行所有的扫描,每隔至少5分钟发送一个包; Sneaky:也差不多,只是数据包的发送间隔是15秒;Polite:不增加太大的网络负载,避免宕掉目标主机,串行每个探测,并且使每个探测有0.4 秒种的间隔;Normal:nmap默认的选项,在不是网络过载或者主机/端口丢失的情况下尽可能快速地扫描;Aggressive:设置5分钟的超时限制,使对每台主机的扫描时间不超过5分钟,并且使对每次探测回应的等待时间不超过1.5秒钟;b>Insane:只适合快速的网络或者你不在意丢失某些信息,每台主机的超时限制是75秒,对每次探测只等待0.3秒钟。你也可是使用数字来代替这些模式,例如:-T 0等于-T Paranoid,-T 5等于-T Insane。
  这些适时模式不能下面的适时选项组合使用。
--host_timeout
  设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制。
--max_rtt_timeout
  设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约9000毫秒。
--min_rtt_timeout
  当目标主机的响应很快时,nmap就缩短每次探测的超时时间。这样会提高扫描的速度,但是可能丢失某些响应时间比较长的包。使用这个选项,可以让nmap对每次探测至少等待你指定的时间,以毫秒为单位。
--initial_rtt_timeout
  设置初始探测的超时值。一般这个选项只在使用-P0选项扫描有防火墙保护的主机才有用。默认值是6000毫秒。
--max_parallelism
  设置最大的并行扫描数量。--max_parallelism 1表示同时只扫描一个端口。这个选项对其它的并行扫描也有效,例如ping sweep, RPC scan。
--scan_delay
  设置在两次探测之间,nmap必须等待的时间。这个选项主要用于降低网络的负载。

4.4 目标设定

  在nmap的所有参数中,只有目标参数是必须给出的。其最简单的形式是在命令行直接输入一个主机名或者一个IP地址。如果你希望扫描某个IP地址的一个子网,你可以在主机名或者IP地址的后面加上/掩码。掩码在0(扫描整个网络)到32(只扫描这个主机)。使用/24扫描C类地址,/16扫描B类地址。

  除此之外,nmap还有更加强大的表示方式让你更加灵活地指定IP地址。例如,如果要扫描这个B类网络128.210..,你可以使用下面三种方式来指定这些地址:128.210..、128.21-.0-255.0-255或者128.210.0.0/16这三种形式是等价的。

5.例子

  本节将由浅入深地举例说明如何使用nmap。

nmap -vtarget.example.com
扫描主机target.example.com的所有TCP端口。-v打开冗余模式。

nmap -sS -Otarget.example.com/24
发起对target.example.com所在网络上的所有255个IP地址的秘密SYN扫描。同时还探测每台主机操作系统的指纹特征。需要root权限。

nmap -sX -p22,53,110,143,4564 128.210.*.1-127
对B类IP地址128.210中255个可能的8位子网的前半部分发起圣诞树扫描。确定这些系统是否打开了sshd、DNS、pop3d、imapd和4564端口。注意圣诞树扫描对Micro$oft的系统无效,因为其协议栈的TCP层有缺陷。

nmap -v --randomize_hosts-p 80 ..2.3-5
只扫描指定的IP范围,有时用于对这个Internet进行取样分析。nmap将寻找Internet上所有后两个字节是.2.3、.2.4、.2.5的 IP地址上的WEB服务器。如果你想发现更多有意思的主机,你可以使用127-222,因为在这个范围内有意思的主机密度更大。

host -l company.com | cut-d -f 4 | ./nmap -v -iL -
列出company.com网络的所有主机,让nmap进行扫描。注意:这项命令在GNU/Linux下使用。如果在其它平台,你可能要使用其它的命令/选项