Nmap使用总结
参考链接:
http://www.360doc.com/content/18/0127/18/52402560_725574428.shtml
0X00 背景
nmap是测试中常用的网络探测工具,但是这回简单的操作,一直了解不深入,现在深入的了解和学习一下。
在文章结构上,我把平时常用的内容提前了,以便再次查阅的时候,比较方便。
0X01 安装
nmap可以到
下载最新版本(目前最新版本 nmap-7.70)
0X02 实例部分
实例
下面给出一些实例,简单的、复杂的到深奥的。为更具体,一些例子使用了实际的IP地址和域名。在这些位置,可以使用你自己网络 的地址/域名替换。注意,扫描其它网络不一定合法,一些网络管理员不愿看到未申请过的扫描,会产生报怨。因此,先获得允许是最好的办法。
命令组成
nmap [ <扫描类型> ...] [ <选项> ] { <扫描目标说明> }
初级使用
nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中所有的保留TCP端口。选项-v启用细节模式。
nmap -A -T4 scanme.nmap.org
-A用来进行操作系统及其版本的探测,-T4 可以加快执行速度
nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限。
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。
nmap -v -iR 100000 -P0 -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因此使用-P0禁止对主机列表。
nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20
扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。
host -l company.com | cut -d -f 4 | nmap -v -iL -
进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给 Nmap。上述命令用于GNU/Linux -- 其它系统进行区域传输时有不同的命令。
深入扫描命令
-Pn 不探测扫描(假定所有主机都存活)
-PB 默认探测扫描(探测端口:TCP 80,445&ICMP)
-PS
-PE ICMP Echo Request
-PP ICMP Timestamp Request
-PM ICMP Netmask Request
扫描类型
-sP 只探测主机在线情况
-sS SYN扫描(隐身扫描)
-ST TCP扫描
-sU UDP扫描
-sV 系统版本检测
-O 操作系统识别
–scanflags 指定TCP标识位(设置URG, ACK, PSH,RST,SYN,FIN位)
细粒度的时间选项
–min-hostgroup/max-hostgroup
–min-parallelism/max-parallelism
–min-rtt-timeout/max-rtttimeout/initial-rtt-timeout
–max-retries
–host-timeout
–scan-delay/–max-scan-delay
–min-rate
时序选项
-T0 偏执的:非常非常慢,用于IDS逃逸
-T1 猥琐的:相当慢,用于IDS逃逸
-T2 有礼貌的:降低速度以消耗更小的带宽,比默认慢十倍
-T3 普通的:默认,根据目标的反应自动调整时间模式
-T4 野蛮的:假定处在一个很好的网络环境,请求可能会淹没目标
-T5 疯狂的:非常野蛮,很可能会淹没目标端口或是漏掉一些开放端口
输出格式
-oN 标准输出
-oG 好理解的格式
-ox xml格式
-oA 用生成以上格式的文件
misc选项
-n 禁止反向IP地址查找
-6 只是用 IPv6
-A 是用几个命令:OS 探测,版本探测,脚本扫描,traceroute
–reason 列出nmap的判断:端口开放,关闭,被过滤。
0X03 脚本讲解
nmap脚本主要分为以下几类,在扫描时可根据需要设置--script=类别这种方式进行比较笼统的扫描:
脚本引擎
-sC 运行默认脚本
–script=
运行个人脚本或批量脚本
–script-args=<Name1=value1,…>
使用脚本参数列表
–script-updatedb
更新脚本数据库
脚本主要种类
auth: 利用或绕过目标主机得访问控制
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067
nmap按脚本分类扫描
nmap --script=auth 192.168.137.*
负责处理鉴权证书(绕开鉴权)的脚本,也可以作为检测部分应用弱口令
nmap --script=brute 192.168.137.*
提供暴力破解的方式 可对数据库,smb,snmp等进行简单密码的暴力猜解
nmap --script=default 192.168.137.* 或者 nmap -sC 192.168.137.*
默认的脚本扫描,主要是搜集各种应用服务的信息,收集到后,可再针对具体服务进行攻击
nmap --script=vuln 192.168.137.*
检查是否存在常见漏洞
nmap -n -p445 --script=broadcast 192.168.137.4
在局域网内探查更多服务开启状况
nmap --script external 202.103.243.110
利用第三方的数据库或资源,例如进行whois解析
nmap按应用服务扫描
(1)vnc扫描:
1:检查vnc bypass
nmap --script=realvnc-auth-bypass 192.168.137.4
2:检查vnc认证方式
nmap --script=vnc-auth 192.168.137.4
3:获取vnc信息
nmap --script=vnc-info 192.168.137.4
(2)smb扫描:
1:smb破解
nmap --script=smb-brute.nse -p445 192.168.137.4
2:smb字典破解
nmap --script=smb-brute.nse --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4
3:smb已知几个严重漏
nmap --script=smb-check-vulns.nse --script-args=unsafe=1 192.168.137.4
4:查看共享目录
nmap -p 445 --script smb-ls --script-args ‘share=e$,path=,smbuser=test,smbpass=test’ 192.168.137.4
5:smb-psexec: 用登陆凭据作为脚本参数,在目标机器上运行一系列程序(注:需要下载nmap_service)
$nmap –script smb-psexec.nse –script-args=smbuser=
6:查看会话
nmap -n -p445 --script=smb-enum-sessions.nse --script-args=smbuser=test,smbpass=test 192.168.137.4
7:系统信息
nmap -n -p445 --script=smb-os-discovery.nse --script-args=smbuser=test,smbpass=test 192.168.137.4
(3)Mssql扫描:
1:猜解mssql用户名和密码
nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.137.4
2:xp_cmdshell 执行命令
nmap -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=sa,mssql.password=sa,ms-sql-xp-cmdshell.cmd="net user" 192.168.137.4
3:dumphash值
nmap -p 1433 --script ms-sql-dump-hashes.nse --script-args mssql.username=sa,mssql.password=sa 192.168.137.4
(4)Mysql扫描:
1:检查mysql空密码
nmap -p 3306 --script=mysql-empty-password.nse 192.168.1.114
2:如果没有空密码,则可以使用自带的暴力破解功能尝试破解
nmap -p 3306 --script=mysql-brute.nse 192.168.1.114
3:如果知道了用户名与密码,可以枚举数据库中的用户
nmap -p 3306 --script=mysql-users.nse --script-args=mysqluser=root 192.168.1.114
4:枚举mysql用户信息
nmap -p 3306 --script=mysql-enum.nse 192.168.1.114
5:支持同一应用的所有脚本扫描
nmap --script=mysql-* 192.168.137.4
(5)Oracle扫描:
1:oracle sid扫描
nmap --script=oracle-sid-brute -p 1521-1560 192.168.137.5
2:oracle弱口令破解
nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=ORCL,userdb=/var/passwd,passdb=/var/passwd 192.168.137.5
(6)其他一些比较好用的脚本
nmap --script=broadcast-netbios-master-browser 192.168.137.4 发现网关
nmap -p 873 --script rsync-brute --script-args 'rsync-brute.module=www' 192.168.137.4 破解rsync
nmap --script informix-brute -p 9088 192.168.137.4 informix数据库破解
nmap -p 5432 --script pgsql-brute 192.168.137.4 pgsql破解
nmap -sU --script snmp-brute 192.168.137.4 snmp破解
nmap -sV --script=telnet-brute 192.168.137.4 telnet破解
nmap --script=http-vuln-cve2010-0738 --script-args 'http-vuln-cve2010-0738.paths={/path1/,/path2/}'
nmap --script=http-methods.nse 192.168.137.4 检查http方法
nmap --script http-slowloris --max-parallelism 400 192.168.137.4 dos攻击,对于处理能力较小的站点还挺好用的 'half-HTTP' connections
nmap --script=samba-vuln-cve-2012-1182 -p 139 192.168.137.4
(7)不靠谱的脚本:
vnc-brute 次数多了会禁止连接
pcanywhere-brute 同上
0X04 Nmap 参考指南
了解Nmap
Nmap是什么?
Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。
Nmap收集的信息有哪些?
- 使用原始IP报文来发现网络上有哪些主机
- 那些主机提供什么服务(应用程序名和版本)
- 那些服务运行在什么操作系统(包括版本信息)
- 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。
虽然Nmap通常用于安全审核,许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视主机和服务的运行。
Nmap的输出结果有什么?
Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。
“所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。
状态可能是:
open(开放的)
filtered(被过滤的)
closed(关闭的)
unfiltered(未被过滤的)。
端口扫描基础
- Open(开放的)意味着目标机器上的应用程序正在该端口监听连接/报文。
- filtered(被过滤的) 意味着防火墙,过滤器或者其它网络障碍阻止了该端口被访问,Nmap无法得知 它是 open(开放的) 还是 closed(关闭的)。
- closed(关闭的) 端口没有应用程序在它上面监听,但是他们随时可能开放。
- 当端口对Nmap的探测做出响应,但是Nmap无法确定它们是关闭还是开放时,这些端口就被认为是 unfiltered(未被过滤的) 。
- 如果Nmap报告状态组合 open|filtered 和 closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。
- 当要求进行版本探测时,端口表也可以包含软件的版本信息。
- 当要求进行IP协议扫描时 (-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。
- 除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。
-A, 用来进行操作系统及其版本的探测
-T4 可以加快执行速度
用途:nmap [扫描类型] [选项] {目标规范}
目标规范:
可以传递主机名,IP地址,网络等。
例如:
scanme.nmap.org
microsoft.com/24
192.168.0.1
10.0-255.0-255.1-254
**目标说明 **
-iL
-iR
--exclude <host1 [,host2] [,host3],...>:排除主机/网络
--excludefile <exclude_file>:从文件中排除列表
主机发现
-sL:列表扫描 - 仅列出要扫描的目标
-sP:Ping扫描 – 主要确定主机是否在线
-P0:将所有主机视为在线 - 跳过主机发现
--PS / PA / PU [portlist]:TCP SYN / ACK或UDP发现探测到给定端口
-PE / PP / PM:ICMP回显,时间戳和网络掩码请求发现探测
-PR:AEP扫描,针对目标ip的硬件地址
-n:不用域名解析,加快扫描
-R:为所有目标解析域名,发现机器正在运行时
--system-dns:使用系统域名解析器
端口扫描技术
Nmap支持的大约十几种扫描技术。 一般一次只用一种方法, 除了UDP扫描(-sU)可能和任何一种TCP扫描类型结合使用。
-sS :TCP SYN扫描,半开放,速度快。
-sT :TCP connect()建立高层系统调用,通过Berkeley Sockets API获取每个连接尝试的状态信息,不推荐可能留下日志记录
-sA :ACK扫描,用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
-sU :UDP扫描,DNS,SNMP,和DHCP (注册的端口是53,161/162,和67/68)是最常见。可以与sT和sS结合使用,可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。
-sW :TCP窗口扫描,通过检查返回的RST报文的TCP窗口域。 在某些系统上,开放端口用正数表示窗口大小(甚至对于RST报文) 而关闭端口的窗口大小为0。
-sM: Maimon扫描
-sN :Null扫描,不设置任何标志位(tcp标志头是0)
-sF :FIN扫描,只设置TCP FIN标志位
-sX :Xmas扫描,设置FIN,PSH,和URG标志位,就像点亮圣诞树上所有的灯一样。
--scanflags
-sI <zombie host [:probeport]>:Idlescan 除了极端隐蔽(由于它不从真实IP地址发送任何报文),该扫描类型可以建立机器间的基于IP的信任关系。 端口列表从zombie 主机的角度。显示开放的端口。 因此您可以尝试用您认为(通过路由器/包过滤规则)可能被信任的 zombies扫描目标。
如果您由于IPID改变希望探测zombie上的特定端口,您可以在zombie 主机后加上一个冒号和端口号。 否则Nmap会使用默认端口(80)。
-sO:IP协议扫描,在IP协议域的8位上循环,发送IP报文头。
-b
--host-timeout:跳过慢速的主机。
端口说明和扫描顺序
默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫描。
-p <端口范围>:仅扫描指定的端口
例如:-p22 ; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
-F:快速扫描(有限的端口)
-r: (不要按随机顺序扫描端口)
服务和版本探测
用下列的选项打开和控制版本探测。
-sV (版本探测) 您也可以用-A同时打开操作系统探测和版本探测。
--allports (扫描所有端口)
--version-intensity
高强度扫描花更多时间。强度值必须在0和9之间。 默认是7。
--version-light (打开轻量级模式)
这是 --version-intensity 2的方便的别名。轻量级模式使版本扫描快许多,但它识别服务的可能性也略微小一点。
--version-all (尝试每个探测)
--version-intensity 9的别名,保证对每个端口尝试每个探测报文。
--version-trace (跟踪版本扫描活动)
这导致Nmap打印出详细的关于正在进行的扫描的调试信息。 它是您用--packet-trace所得到的信息的子集。
-sR (RPC扫描,作为版本扫描(-sV)的一部分自动打开。)
操作系统探测
采用下列选项启用和控制操作系统检测:
-O (启用操作系统检测) 也可以使用-A来同时启用操作系统检测和版本检测。
--osscan-limit (针对指定的目标进行操作系统检测)
如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。 采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间,特别在使用-P0扫描多个主机时。这个选项仅在使用 -O或-A 进行操作系统检测时起作用。
--osscan-guess; --fuzzy (推测操作系统检测结果)
时间和性能
改善扫描时间的技术有:忽略非关键的检测、升级最新版本的Nmap(性能增强不断改善)。 优化时间参数也会带来实质性的变化,这些参数如下。
--min-hostgroup
Nmap具有并行扫描多主机端口或版本的能力,Nmap将多个目标IP地址空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果。
--min-parallelism
最常见的应用是--min-parallelism值大于1,以加快性能不佳的主机或网络的扫描。这个选项具有风险,如果过高则影响准确度,同时也会降低Nmap基于网络条件动态控制并行度的能力。这个值设为10较为合适。
--max-parallelism选项通常设为1,以防止Nmap在同一时间向主机发送多个探测报文,和选择--scan-delay同时使用非常有用,虽然 这个选项本身的用途已经很好。
--min-rtt-timeout
--max-rtt-timeout
这些选项以毫秒为单位,采用小的--max-rtt-timeout值,使 --initial-rtt-timeout值大于默认值可以明显减少扫描时间,特别是对不能ping通的扫描(-P0)以及具有严格过滤的网络。如果使用太小的值,使得很多探测报文超时从而重新发送,而此时可能响应消息正在发送,这使得整个扫描的时间会增加。
如果所有的主机都在本地网络,对于--max-rtt-timeout值来说,100毫秒比较合适。如果存在路由,首先使用ICMP ping工具ping主机,或使用其它报文工具如hpings,可以更好地穿透防火墙。查看大约10个包的最大往返时间,然后将 --initial-rtt-timeout设成这个时间的2倍,--max-rtt-timeout 可设成这个时间值的3倍或4倍。通常,不管ping的时间是多少,最大的rtt值不得小于100ms,不能超过1000ms。
--host-timeout
--scan-delay
这个选项用于Nmap控制针对一个主机发送探测报文的等待时间(毫秒),在带宽控制的情况下这个选项非常有效。Solaris主机在响应UDP扫描探测报文时,每秒只发送一个ICMP消息,因此Nmap发送的很多数探测报文是浪费的。--scan-delay 设为1000,使Nmap低速运行。
--scan-delay的另一个用途是躲闭基于阈值的入侵检测和预防系统(IDS/IPS)。
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (设置时间模板)
Nmap提供了一些简单的方法,使用6个时间模板,使用时采用-T选项及数字(0 - 5) 或名称。模板名称有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。前两种模式用于IDS躲避,Polite模式降低了扫描速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。
用户可以根据自己的需要选择不同的模板,由Nmap负责选择实际的时间值。模板也会针对其它的优化控制选项进行速度微调。例如,-T4 针对TCP端口禁止动态扫描延迟超过10ms,-T5对应的值为5ms。
建议在扫描可靠的网络时使用-T4,默认时间选项(-T3)很少有主机崩溃和带宽问题,比较适合于谨慎的用户。不进行版本检测比进行时间调整能更有效地解决这些问题。
虽然-T0和-T1选项可能有助于避免IDS告警,但在进行上千个主机或端口扫描时,会显著增加时间。对于这种长时间的扫描,宁可设定确切的时间值,而不要去依赖封装的-T0和-T1选项。
T0选项的主要影响是对于连续扫描,在一个时间只能扫描一个端口,每个探测报文的发送间隔为5分钟。
T1和T2选项比较类似,探测报文间隔分别为15秒和0.4秒。T3是Nmap的默认选项,包含了并行扫描。
T4选项与 --max-rtt-timeout 1250 --initial-rtt-timeout 500 等价,最大TCP扫描延迟为10ms。
T5等价于 --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --host-timeout 900000,最大TCP扫描延迟为5ms。
防火墙/IDS躲避和哄骗
-f (报文分段) --mtu
-D <decoy1,decoy2 [,ME],...>:使用诱饵隐蔽扫描
-S <IP_Address>:源地址哄骗
-e
-g
--data-length
--ttl
--randomize-hosts (对目标主机的顺序随机排列)
--spoof-mac <mac地址,前缀或供应商名称>:欺骗您的MAC地址
要求Nmap在发送原以太网帧时使用指定的MAC地址,这个选项隐含了 --send-eth选项,以保证Nmap真正发送以太网包。
Nmap输出格式
-oN
-oX
XML输出引用了一个XSL样式表,用于格式化输出结果,类似于 HTML。最方便的方法是将XML输出加载到一个Web浏览器,如Firefox 或IE。由于nmap.xsl文件的绝对路径,因此通常只能在运行了Nmap的机器上工作(或类似配置的机器)。 类似于任何支持Web机器的HTML文件
--stylesheet 选项可用于建立可移植的XML文件。
-oS
-oG
-oA (输出至所有格式) 以三种主要格式输出
为使用方便,利用-oA选项 可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在.nmap,.xml和 .gnmap文件中。也可以在文件名前指定目录名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:\hacking\scoonWindows。
细节和调试选项
--packet-trace:显示发送和接收的所有数据包
-v (提高输出信息的详细度) 这个选项使用两次,会提供更详细的信息。
-d [level] (提高或设置调试级别,最高级别-d9,输出更多的细节)
--packet-trace (跟踪发送和接收的报文)
要求Nmap打印发送和接收的每个报文的摘要,通常用于调试。为避免输出过多的行,可以限制扫描的端口数,如-p20-30。 如果只需进行版本检测,使用--version-trace。
--iflist:打印主机接口列表和系统路由(用于调试)
其它输出选项
--append-output (在输出文件中添加,附加到而不是clobber指定的输出文件)
当使用文件作为输出格式,如-oX或-oN, 默认该文件被覆盖。如果希望文件保留现有内容,将结果添加在现有文件后面,使用--append-output选项。所有指定的输出文件都被添加。但对于XML(-oX)扫描输出 文件无效,无法正常解析,需要手工修改。
--resume < logfilename > (继续中断的扫描)
当中断时,如果标准扫描 (-oN)或Grep扫描(-oG)日志 被保留,用户可以要求Nmap恢复终止的扫描,使用选项 --resume并说明标准/Grep扫描输出文件,不允许使用其它参数,Nmap会解析输出文件并使用原来的格式输出。
使用方式 如nmap --resume
--stylesheet <path / URL>:XSL样式表将XML输出转换为HTML
--no-stylesheet:防止Nmap关联XSL样式表w / XML输出 MISC: (忽略XML声明的XSL样式表,使用该选项禁止Nmap的XML输出关联任何XSL样式表。 xml-stylesheet指示被忽略。)
其它选项
-6:启用IPv6扫描
-A:这个选项启用额外的高级和高强度选项,目前启用操作系统检测(-O)和版本检测(-sV)
--datadir
--send-eth / - send-ip:使用原始以太网帧发送数据包或IP数据包
--privileged:假定用户完全权限
-V;--version:打印版本号
-h;--help:打印此帮助摘要页面。