leyu·乐鱼(中国)体育官方网站 【工具-NMAP】主机渗透神器:NMAP (功能介绍,安装,使用,参数完整翻译)
leyu·乐鱼(中国)体育官方网站
1 nmap 介绍
Nmap(网络映射器)是由GordonLyon设计,用来探测计算机网络上的主机和服务的一种 安全扫描器。为了绘制网络拓扑图,Nmap的发送特制的数据包到目标主机,然后对返回数据包进行分析。Nmap是一款枚举和测试网络的强大工具。
Nmap 特色用途:
主机探测:探测网络上的主机,例如列出响应TCP和ICMP请求、icmp请求、开放特别端口的主机
端口扫描:探测目标主机所开放的端口
版本检测:探测目标主机的网络服务,判断其服务名称及版本号
系统检测:探测目标主机的操作系统及网络设备的硬件特性
支持探测脚本的编写:使用Nmap的脚本引擎(NSE)和Lua编程语言
2 nmap 安装
nmap可以到Download the Free Nmap Security Scanner for Linux/Mac/Windows下载最新版本
Nmap安装:根据提示向导,下一步、下一步进行安装,so easy!。
进入命令提示符(cmd),输入nmap,可以看到nmap的帮助信息,说明安装成功。
3 nmap 命令操作
写在前方的技巧:
-S 指定源地址,为了不被发现真实IP,扫描IP欺骗!
3.1 Nmap简单扫描
Nmap默认发送一个arp的ping数据包,来探测目标主机在1-10000范围内所开放的端口。
命令语法:
nmap
解释:Targetipaddress为你目标主机的ip地址
例子:
3.2 Nmap 详细输出扫描结果。
命令语法:
nmap -vv
解释:-vv 参数设置对结果的详细输出。
例子:
3.3 nmap 指定端口扫描
nmap默认扫描目标1-10000范围内的端口号。我们则可以通过参数-p来设置我们将要扫描的端口号。
命令语法:
nmap -p(range)
nmap -p(range,port2,port3,...)
解释:(rangge)为要扫描的端口(范围),端口大小不能超过65535,Targetip为目标ip地址
例子:扫描目标主机8000-8080和443端口:
3.4 nmapping扫描
nmap可以利用类似window/linux系统下的ping方式进行扫描。
命令语法:
nmap -sP
解释:sP设置扫描方式为ping扫描
例子:感觉没啥用
3.5 nmap路由跟踪
路由器追踪功能,能够帮网络管理员了解网络通行情况,同时也是网络管理人员很好的辅助工具!通过路由器追踪可以轻松的查处从我们电脑所在地到目标地之间所经常的网络节点,并可以看到通过各个节点所花费的时间
命令语法:
nmap --traceroute
例子:
3.6 nmap还可以设置扫描一个网段下的ip
命令语法:
nmap -sP
nmap -sP -END
解释:CIDR为你设置的子网掩码(/24,/16,/8等),或者192.168.0.1-255
例子:24代表24位为子网掩码,即前三段不变,尾号变,相当于0-255
3.7 nmap 操作系统类型的探测
nmap通过目标开放的端口来探测主机所运行的操作系统类型。这是信息收集中很重要的一步,它可以帮助你找到特定操作系统上的含有漏洞的的服务。
命令语法:
nmap -O
例子:拿IPhone手机试试效果
3.8 nmap 全功能扫描
包含了1-10000的端口ping扫描,操作系统扫描,脚本扫描,路由跟踪,服务探测。
命令语法:
nmap -A
例子:
3.9 nmap命令混合式扫描
就是以上多种命令组合,没啥好多的,要啥功能自己加,如:nmap -vv-p1-1000-O
3.10 nmap过滤结果技巧
nmap -vv -n –sS -sU -p22 192.168.1.0/24 | grep "Discovered open port" | awk {'print $6'} | awk -F/ {'print $1'} > ./22-output.txt
nmap -vv -n –sS -sU -p22 -iL iplist.txt | grep "Discovered open port" | awk {'print $6'} | awk -F/ {'print $1'} > ./22-output.txt
grep,awk都是linux指令,windows下咋办呢?见:【工具-GnuWin】windows上使用linux指令
nmap -vv -n -sS -sU -p22 192.168.27.0/24 | C:\GnuWin\GnuWin32\bin\grep.exe "Discovered open port" | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe {"print $6"} | C:\GnuWin\gawk-3.1.6-1-bin\bin\awk.exe -F/ {"print $1"} > E:\桌面\hack\workspace\22-output.txt
还是该咋用咋用,效果一样的好。
3.11 扫描方式
-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数据包。
-sU:UDP扫描,发送0字节UDP包,快速扫描Windows的UDP端口如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的leyu·乐鱼(中国)体育官方网站,否则我们就假设它是打开的。
-sP:ping扫描,有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
-sA:ACK扫描 TCP ACK扫描,当防火墙开启时,查看防火墙有未过虑某端口,这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
-sW:滑动窗口扫描,这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。
-sR:RPC扫描,和其他不同的端口扫描方法结合使用。
-b:FTP反弹攻击(FTP Bounce attack) 外网用户通过FTP渗透内网
通用选项
-P0:nmap扫描前不Ping目标主机。在扫描之前,不必ping主机。有些网络的防火墙不允许ICMP echo请求穿过,使用这个选项可以对这些网络进行扫描。
-PT:nmap扫描前使用TCP ACK包确定主机是否在运行(-PT默认80。扫描之前,使用TCP ping确定哪些主机正在运行。nmap不是通过发送ICMP echo请求包然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCP ACK包然后等待回应。如果主机正在运行就会返回RST包。只有在目标网络/主机阻塞了ping包,而仍旧允许你对其进行扫描时,这个选项才有效。对于非 root用户,我们使用connect()系统调用来实现这项功能。使用-PT 来设定目标端口。默认的端口号是80,因为这个端口通常不会被过滤。
-PS:nmap使用TCP SYN包进行扫描。对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。如果主机正在运行就返回一个RST包(或者一个SYN/ACK包)。
-PI:nmap进行Ping扫描。设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。使用这个选项让nmap发现正在运行的主机的同时,nmap也会对你的直接子网广播地址进行观察。直接子网广播地址一些外部可达的IP地址,把外部的包转换为一个内向的IP广播包,向一个计算机子网发送。这些IP广播包应该删除,因为会造成拒绝服务攻击(例如 smurf)。
-PB:结合-PT和-PI功能,这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
-O:Nmap扫描TCP/IP指纹特征,确定目标主机系统类型。
-I:反向标志扫描,扫描监听端口的用户
-f:分片发送SYN、FIN、Xmas、和Null扫描的数据包
-v:冗余模式扫描,可以得到扫描详细信息
-oN:扫描结果重定向到文件
-resume:使被中断的扫描可以继续
-iL:-iL,扫描目录文件列表
-p:-p 指定端口或扫描端口列表及范围,默认扫描1-1024端口和/usr/share/nmap/nmap-services文件中指定端口。-p例:23;20-30,139,60000-这个选项让你选择要进行扫描的端口号的范围。例如,-p 23表示:只扫描目标主机的23号端口。-p 20-30,139,60000-表示:扫描20到30号端口,139号端口以及所有大于60000的端口。
nmap扫描基本场景
1、使用TCP SYN发现活跃主机
nmap -PS 192.168.1.0/24
2、使用TCP方式扫描端口
nmap -sS -sV -n -p1-65535 -oX tcp.xml 192.168.1.0
3、使用UDP方式扫描端口
nmap -sS -sU -n -p1-65535 -oX udp.xml 192.168.1.0
4、判断操作系统
nmap -O 192.168.1.0/24
5、判断服务版本
nmap -sV 192.168.1.0/24
4 附录 4.1 扫描结果说明
open(开放的)
应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口 都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。
closed(关闭的)
关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。
filtered(被过滤的)
由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。
unfiltered(未被过滤的)
未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。
open|filtered(开放或者被过滤的)
当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。
closed|filtered(关闭或者被过滤的)
该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中
4.2 nmap -h 完整翻译
使用方法: nmap [扫描类型(s)] [选项] {目标说明}
目标说明:
通过主机名称, IP 地址, 网段, 等等.
协议: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL : 输入 主机或者网段
-iR :随机选择目标
–exclude : 排除的IP或者网段
–excludefile : 从文件中排除
主机发现:
-sL: List Scan – 简单的列出目标进行扫描
-sn: Ping Scan – 禁用端口扫描
-Pn: Treat all hosts as online — 不使用主机发现
-PS/PA/PU/PY[portlist]: 通过TCP SYN/ACK, UDP or SCTP 等协议发现指定端口
-PE/PP/PM: 使用ICMP协议响应, 时间戳, 和子网掩码 请求 发现 探测
-PO[protocol list]: 使用ip协议
-n/-R: Never do DNS resolution/Always resolve [默认选项]
–dns-servers : 自动以DNS
–system-dns: 使用系统DNS
–traceroute: 跟踪每个主机的路径
扫描技术:
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon 等协议扫描
-sU: UDP 扫描
-sN/sF/sX: 空的TCP, FIN, 和 Xmas 扫描
–scanflags :自定义tcp扫描
-sI : 空间扫描
-sY/sZ: SCTP初始化 或者 cookie-echo扫描
-sO: IP协议扫描
-b : FTP 反弹扫描
规范端口和扫描序列:
-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 : Scan ports more common than
服务和版本检测:
-sV: 探索开放的端口 以确定服务和版本号
–version-intensity :设置从0-9所有的探针
–version-light:最有可能的漏洞探针(intensity 2)
–version-all: 尝试每一个漏洞探针 (intensity 9)
–version-trace: 显示详细的版本扫描活动 (调试)
扫描脚本的使用:
-sC: 默认脚本进行探测
–script=: 用 逗号分隔的列表, 脚本目录or 脚本类别
–script-args=: 为脚本提供参数
–script-args-file=filename:在一个文件中提供NSE脚本(自定义脚本)
–script-trace: 显示所有发送和接收的数据
–script-updatedb: 更新脚本数据库
–script-help=: 显示脚本帮助
是一个逗号分隔的脚本文件列表或脚本类.
操作系统识别:
-O: 使用操作系统探测
–osscan-limit: Limit OS detection to promising targets
–osscan-guess: Guess OS more aggressively
定时和性能:
用于定时任务 在多少秒, 或者追加’毫秒’ ,
‘秒’ , ‘分钟’ , 或者 ‘小时’去设置 (e.g. 30m).
-T: 设置定时模板 (更方便)
–min-hostgroup/max-hostgroup : 并行扫描的最大值和最小值
–min-parallelism/max-parallelism : 并行扫描
–min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout : 指定扫描结束时间
–max-retries : Caps number of port scan probe retransmissions.
–host-timeout : Give up on target after this long
–scan-delay/–max-scan-delay : 调整每次扫描的延迟
–min-rate : 发送的数据包不低于《数值》
–max-rate : 发送的数据包不超过《数值》
防火墙/ IDS逃避和欺骗:
-f; –mtu : 碎片包 (可以选择 w/given MTU)
-D : Cloak a scan with decoys
-S : 源地址欺骗
-e : 使用指定的接口
-g/–source-port
:使用给定的端口号
–proxies : Relay 通过使用 HTTP/SOCKS4 代理
–data :附加一个自定义的有效载荷发送数据包
–data-string : 添加一个自定义的ASCII字符串发送的数据包
–data-length : 附加随机数据发送数据包
–ip-options : 用指定的IP选项发送数据包
–ttl : 设置ip到达目标的时间
–spoof-mac :欺骗本地MAC地址
–badsum:发送用来效验的伪造数据包 TCP/UDP/SCTP
输出:
-oN/-oX/-oS/-oG :输出正常的扫描, XML格式, s|
-oA : 一次输出三种主要格式
-v: 增加详细程度 (使用 -vv 显示更详细)
-d: 提高测试的详细程度 (使用 -dd参数更详细)
–reason: 显示端口处于某个特定状态的原因
–open: 只显示开放的端口
–packet-trace: 显示发送和接收的所有数据包
–iflist:打印主机接口和路由
–append-output: 附加到指定的输出文件
–resume : 回复终止的扫描
–stylesheet
: XSL样式表转换XML输出HTML
–webxml: 从Nmap参考样式。或者更便携的XML
–no-stylesheet: Prevent associating of XSL stylesheet w/XML output
杂项:
-6: 启用ipv6扫描
-A: 使操作系统版本检测,检测,脚本扫描和跟踪
–datadir : 指定自定义可以使用的数据文件位置
–send-eth/–send-ip:发送使用原始以太网帧或IP数据包
–privileged: 假设用户是最高权限
–unprivileged: 假设用户缺乏原始套接字特权
-V: 打印当前版本
-h: 显示英文帮助文档.
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!