Nmap使用指南(1)

Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之 一。最新版的Nmap6.0在2012年5月21日发布,详情请参见:www.nmap.org

端口扫描:

常见端口与对应服务:

80 http

443 https

53 dns

25 smtp

22 ssh

23 telnet

20、21 ftp

110 pop3

119 nntp

143 imap

179 bgp

135-139、445 RPC

500 vpn

5060 voip

123 ntp

nmap ip地址/域名 支持CIDR.(连续的ip用-连接)【空选项主机存活、SYN端口】

域名解析:

n 不用解析域名。

R为所有目标解析域名。

–system-dns使用系统域名解析器解析(慢)。

–dns-server 服务器 选择dns解析。

时间性能优化:

-T 时间优化(0-5)(paranoid|sneaky|polite|normal|aggressive|insane)

-F快速扫描。

-oN %D-%T .nmap周期性的扫描比较。

ndiff #b 1.xml o2.xml 比较文件(-h帮助-v详细text文本格式xml格式)

–max-retries调整重传次数。

–min-hostgroup/–max-hostgroup size 设置组的大小

–min-parallelism/–max-parellelism time指定时间内的探针数

–min-rtt-timrout/–max-rtt-timrout/initial-rtt-timrouttime 指定探针超时

–scan-delay/-max-scan-delay time 指定探针之间的时延

–max-retries tries指定探针重传转发数

–host-timeout time设置扫描主机的最大时间

–defeat-rst-ratelimit设置rst的限制

-A 综合扫描。

-p端口【-数 数以内 数- 大于数p-所有 U udp T tcp 服务 [数-数]端口】。

–allports不为探测版本排除任何端口。

-e 指定网络接口 。

-r顺序扫描。

-O系统扫描。

–osscan-limit 。(针对指定的目标进行操作系统检测)

–osscan-guess; –fuzzy 。(推测操作系统检测结果)

–version-light[轻]-all[全]1-9(探针强度)

–version-intensity[0-9]默认7(探针强度)

–version-trace获取详细的探针信息。

-v强度小 d大一点 d d加强-p最强 debug信息。(V<v<D<d<<p)

-d [level] (提高或设置调试级别) 。

-sT tcp端口扫描(完整三次握手)。

-sU udp扫描。(不回应可能端口打开,回应是关闭)

-sL dns反向解析。

-sM[fin ack mainmon扫描] 。

-sS隐蔽扫描(半开syn)。

-sP发现扫描网络存活主机。(直连arp非直连tcp80 icmp)

-sO确定主机协议扫描。

-sA tcp ACK扫描。

-sW 对滑动窗口的扫描sI[idlescan]。

-sR RPC扫描。(flag没有syn,ack,rst回送rst)

-sN 关闭主机发现【空】。(不管是否存在直接扫描)

-sF FIN扫描 。(sN sF sX逃避不了ids)

-sX Xmas扫描 (fin psh urg为置位)。

-sI 完全隐藏。【以一个跳板主机{无流量}扫描另一台主机】

-sV 服务版本。

-sC 跟安全有关的脚本

-P0 指定协议。(不ping主机)(1icmp6tcp17udp47gre50esp51ah53swipe77sun-nd115l2tp120uti132sctp)

-PS 端口列表用,隔开[tcp80 syn 扫描]

-PA 端口列表用,隔开[ack扫描](PS+PA测试状态包过滤防火墙【非状态的PA可以过】)【默认扫描端口1-1024】

-PU 端口列表用,隔开[udp高端口扫描 穿越只过滤tcp的防火墙]

-PE [icmp ping types]

-PM 掩码请求。

-PR [arp ping] 默认直连用。

-PN 自己。

-PP 时间请求。

–send-ip 直连不做arp做ping。

–reason返回原因。

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

–traceroute追踪主机跳数。

–scanflags banner tcp扫描的flags。

–servicedb 文件
在文件里指定扫描的服务。

–script=脚本【all全部】(promiscuous杂合模式) 调用脚本。(协议平台-服务-动作)

–script-updatedb脚本升级

输出:

-oS (ScRipT KIdd|3oUTpuT)保存扫描结果输出。

-oN/oG (Grep 输出)

-oA (输出至所有格式)

–append-output 附在原来的结果前面。

输入:

-iL从列表中导入原来的扫描结果。

-iR随机选择目标。

–exclude排除主机或网络。

–excludefile排除文件中的列表。

–randomize-hosts随机主机。

–iL 文件名 导入信息。

versiondb调用数据库。

逃避技术:

-f 8字节 mtu 数 指定分片字节。

-D <ip,ip> -S 源ip e出接口
欺骗ip和mac。

–source-port 源端口; -g (源端口哄骗)

–spoof-mac 0随便,厂商,自己指定 指定mac。

–data-length (发送报文时附加随机数据)–date-length填充随机数据。

–badsum发送tcp和udp校验和的包。

–ttl (设置IP time-to-live 域)

–ip-options ip选项。

其他选项:

-b FTP反弹攻击。

–open只显示open的。

–iflist (列举接口和路由)

-6 (启用IPv6扫描)。

【例子:nmap –spoof-mac Apple –traceroute–data-length 9 f D ip地址,RND:5,ME
v n O sS sV Oa 保存目录 log-errors–append-output p
T:1-1024,1433,2222,2249,7778,8080,9999–randomize-hosts ip地址】

(nmap识别的端口状态:open开放closed关闭filterd过滤unfilterd未过滤[ack 开关都是rst]open|filterd开放或被过滤[UDP]closed|filterd关闭或被过滤[IPID])。

nmap下的其他两个项目cat和nping。

ncat #主机 端口 串联和重定向接口(功能和nc有点相像)

-4 ipv4 -6 ipv6 -u udp sctp sctp

-g发送松散源路由-G设定源路由指针

-p端口-s源主机

-l监听模式-m最大链接数

broker链接中间人char聊天服务器

ssl使用ssl

ssl-verify验证服务器证书

ssl-cert指定证书

ssl-key指定私钥

ssl-trustfile名单信任的证书

proxy 主机:端口指定服务器

proxy-type 协议 指定协议

proxy-auth 用户:密码使用代理证书

-e 命令 执行命令c 命令 sh命令执行

allow 主机 允许链接–allowfile file允许文件链接

deny 主机 拒绝链接
denyfile 文件 拒绝文件连接

-d 时间 指定延时I时间 指定空闲w时间指定连接超时

-o file保存信息-x 保存16进制信息

-v详细信息-c使用CRLE去EOL顺序-h帮助

recv-only只接受send-only只发送-t远程登录version显示版本

nping #目标 网络数据包生成工具。

–tcp-connect TCP连接方式.

–tcp TCP模式

–udp UDP模式

–icmp ICMP的模式

–arp ARP表/ RARP服务模式

–tr 路由跟踪模式

-p 端口 目标端口

-g 端口 源端口

–seq seqnumber 设置端口序列

–flags 设置tcp的flags (CWR,ECN,URG,ACK,PSH,RST,SYN,FIN)

–ack 设置ack数

–win 设置滑动窗口大小

–badsum 使用错误校验

–mss 设置最大段大小。

–ws 设置窗口的规模。

–ts <echo,reply> 设置时间戳(回音和答复场)

–icmp-type 设置icmp类型

–icmp-code 设置icmp代码

–icmp-id 设置icmp的标识符

–icmp-seq 设置icmp顺序

–icmp-redirect-addr 设置icmp重定向地址

–icmp-param-pointer 设置icmp参数问题指针

–icmp-advert-lifetime 设置icmp的生成周期

–icmp-advert-entry <IP,pref> 设置icmp路由广告

–icmp-orig-time 设置icmp原始时间戳

–icmp-recv-time 设置icmp接受时间戳

–icmp-trans-time 设置icmp发送的时间戳

–arp-type arp类型(ARP-reply, RARP, RARP-reply)

–arp-sender-mac 发送人的mac地址

–arp-sender-ip 设置发件人ip地址

–arp-target-mac 设置目标mac地址

–arp-target-ip 设置目标ip地址

-S 设置源ip地址

–dest-ip 设置目标地址

–tos 服务类型

–id 标识

–df 不要分段

–mf 更多分段

–ttl 生存时间

–badsum-ip 无效ip校验

–ip-options <S|R [route]|L[route]|T|U …>设置IP选项

–ip-options 设置ip选项

–mtu 最大传输单元

-6 使用ipv6

–hop-limit 设置IPv6逐场的限制值发送到指定的数据包

–traffic-class 交通类

–flow 流标签

–dest-mac 目标mac

–source-mac 源mac

–ether-type 以太网类型

–data 附加到发送的数据包的自定义二进制数据

–data-string 追加自定义的字符串发送的数据包

–data-file 包括有效载荷从指定的文件

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

–delay 延迟之间的探针

–rate 发送速率探针在给定

–ec 运行回声客户端

–es 运行回声服务器

–ep TCP端口号设置回声

–nc禁用加密和验证

–once服务一个客户端并退出

-h 显示帮助信息

–version 显示nping的版本

-c 轮后停止给定数量

-e 设置网络接口使用

-H 不显示发送的数据包

-N 不要试图捕捉回复

–privileged 假设该用户完全权限

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

–send-eth 使用原始以太网发送

–send-ip IP层发送的原料

–bpf-filter 自定义设置过滤器BPF

-v 增加或设置输出的详细程度

-d 增加或设置调试级别

-q 减少冗赘级别

–quiet冗长和调试级别设置到最低。

–debug冗长和调试设置到最大程度。

3     Nmap高级用法

3.1    防火墙/IDS规避

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

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

3.1.1    规避原理

3.1.1.1    分片(Fragmentation)

将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。

3.1.1.2    IP诱骗(IP decoys)

在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻 击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍 然可以追踪出扫描者真实IP地址。

3.1.1.3    IP伪装(IP Spoofing)

顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主 机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。

3.1.1.4    指定源端口

某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。

3.1.1.5    扫描延时

某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。

3.1.1.6    其他技术

Nmap还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。

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

3.1.2    规避用法

  1. -f; –mtu <val>: 指定使用分片、指定数据包的MTU.
  2. -D <decoy1,decoy2[,ME],…>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。
  3. -S <IP_Address>: 伪装成其他IP地址
  4. -e <iface>: 使用特定的网络接口
  5. -g/–source-port <portnum>: 使用指定源端口
  6. –data-length <num>: 填充随机数据让数据包长度达到Num。
  7. –ip-options <options>: 使用指定的IP选项来发送数据包。
  8. –ttl <val>: 设置time-to-live时间。
  9. –spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址
  10. –badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

3.1.3    规避演示

使用命令:

nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1

其中,-F表示快速扫描100个端口;-Pn表示不进行Ping扫描;-D表示使用IP诱骗方式掩盖自己真实IP(其中ME表示自己IP);-e eth0表示使用eth0网卡发送该数据包;-g 3355表示自己的源端口使用3355;192.168.1.1是被扫描的目标IP地址。

Nmap使用指南(1)

我们可以从Wireshark中看到数据包的流动情况:对于每个探测包,Nmap都使用-D选项指定的IP地址发送不同的数据包,从而达到扰乱对方 防火墙/IDS检查的目的(更好的方式-D选项中嵌入RND随机数,这样更具有迷惑性)。当探测到80端口时候,目标主机向我们回复了SYN/ACK包回 来(当然也向其他诱骗的IP回复SYN/ACK包,我们无法接收到),证明80端口是开放的。

Nmap使用指南(1)

3.2    NSE脚本引擎

NSE脚本引擎(Nmap Scripting Engine)是Nmap最强大最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展Nmap的功能。

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

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

  • 网络发现(Network Discovery)
  • 更加复杂的版本侦测(例如skype软件)
  • 漏洞侦测(Vulnerability Detection)
  • 后门侦测(Backdoor Detection)
  • 漏洞利用(Vulnerability Exploitation)

3.2.1    NSE创建脚本方法

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

Nmap使用指南(1)

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字段定义的函数。

3.2.2    NSE脚本用法

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

  1. -sC: 等价于 –script=default,使用默认类别的脚本进行扫描。
  2. –script=<Lua scripts>: <Lua scripts>使用某个或某类脚本进行扫描,支持通配符描述
  3. –script-args=<n1=v1,[n2=v2,...]>: 为脚本提供默认参数
  4. –script-args-file=filename: 使用文件来为脚本提供参数
  5. –script-trace: 显示脚本执行过程中发送与接收的数据
  6. –script-updatedb: 更新脚本数据库
  7. –script-help=<Lua scripts>: 显示脚本的帮助信息,其中<Luascripts>部分可以逗号分隔的文件或脚本类别。

3.2.3    NSE用法演示

配合脚本扫描192.168.1.1,查看能否获得有用的信息。

命令如下:

nmap –sV –p 80 –v –script default,http*192.168.1.1

Nmap使用指南(1)

从上图中,我们可以看到Nmap扫描到对方80端口是开放的,然后使用了大量的名字为http开头的脚本对其进行扫描。扫描过程发现在http- auth脚本执行,出现了“Basic relm=TP-LINK Wireless N router WR740”字样(红线划出部分),这里已经挖掘对方的设备类型与具体版本信息。如果我们知道更多关于WR740已知的漏洞,那么就可以进行更进一步的渗 透测试了。

4     参考资料

4.1    书籍

Nmap Network Scanning

Nmap创始人Fyodor编写的Nmap的权威指南,非常详尽地描述Nmap的实现原理及使用方法。Nmap官方文档正是来自该书部分章节。

Secrets of Network Cartography

该书对Nmap的实现原理及使用场景有比较丰富的介绍。

Nmap in the Enterprise: Your Guide to Network Scanning

这本书描述Nmap在企业领域的运用。

Nmap mindmap.pdf

这nmap使用方法的思维导图(一页纸的图片),对Nmap用法整理很完整。

上一篇:分享几个CSS小众但炫酷的技巧


下一篇:To change the sharepoint CA port