Nmap使用
  PZqDod36uPCr 2023年11月02日 36 0

1 Nmap  

Nmap:Network Mapper,“网络映射器”。Nmap以新颖的方式使用原始IP数据包来确定网络上可用的主机,这些主机提供的服务(应用程序名称和版本),它们正在运行的操作系统和版本,包过滤器/防火墙的类型。它旨在快速扫描大型网络,但可以在单个主机上正常运行。

2 基本功能  

1. 主机发现:探测一组主机是否在线。默认情况下,Nmap通过4种方式—— ICMP echo请求(ping)、向443端口发送TCP SYN 包、向80端口发送TCP ACK包和ICMP 时间戳请求——发现目标主机。

2. 端口扫描:扫描主机端口,嗅探所提供的网络服务。

3. 服务、版本探测:在发现开放端口后,Nmap可进一步检查目标主机的检测服务协议、应用 程序名称、版本号等信息。

4. 操作系统探测:推断主机所用的操作系统,例如Apache hpptd 2.2.14、OpenSSH 5.3pl、Debian 3 ubuntu4。Nmap 向远程主机发送一系列数据包,并能够将远程主机的响应与操作系统 指纹数据库进行比较。如果发现了匹配结果,它就会显示匹配的操作系统。

5. 网络路由跟踪:Nmap 路由跟踪功能从TTL的高值开始测试,逐步递减TTL,直到它到零为止。

6. Nmap脚本引擎:可利用它的脚本引擎手写一个检测脚本。目前,Nmap可检査网络服务的漏洞,还可以枚举目标系统的资源。

3 工作原理  

工作原理:Nmap 对目标主机进行一系列的测试,例如发送特定的TCP/ICMP/UDP报文,利用测试结果建立相应目标主机的Nmap 指纹,然后根据指纹与规定的Nmap映射进行匹配,最终输出相应的结果。

Usage: nmap [Scan Type(s)] [Options] {target specification}

TARGET SPECIFICATION:

Can pass hostnames, IP addresses, networks, etc.

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

-iL <inputfilename>: Input from list of hosts/networks

-iR <num hosts>: Choose random targets

--exclude <host1[,host2][,host3],...>: Exclude hosts/networks

--excludefile <exclude_file>: Exclude list from file

最简单的使用就是nmap your-ip(域名)就可以扫描出其对外开放的服务。

nmap 192.168.211.98

Host is up (0.00038s latency).

Not shown: 998 closed ports

PORT STATE SERVICE

8080/tcp open  http-proxy

10010/tcp open rxapi

MAC Address: 00:0C:29:99:D4:E7 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.85 seconds

可以看出只开放了8080端口和10010端口

4 功能介绍  

4.1 HOST DISCOVERY主机发现

主机发现有时候也叫做ping扫描,但它远远超越用世人皆知的ping工具发送简单的ICMP回声请求报文。

-sL: List Scan - simply list targets to scan  

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

-sn: Ping Scan - disable port scan

此选项告诉Nmap不要在主机发现后进行端口扫描,只打印出响应主机发现探测的可用主机。这通常被称为“ping扫描”。默认情况下,这比列表扫描更具侵入性,并且通常可以用于相同的目的。适用于轻量扫描。对于攻击者来说,知道有多少主机可用比对每个IP和主机名进行列表扫描所提供的列表更有价值。

很容易地用于统计网络上的可用机器或监控服务器的可用性。通常被称为ping扫描,并且比ping广播地址更可靠,因为许多主机不回复广播查询。

默认情况下,使用-sn完成的默认主机发现包括一个ICMP echo请求,TCP SYN到端口443、TCP ACK到端口80,和一个ICMP时间戳请求。

当由无特权用户执行时,只有SYN数据包被发送(connect call)到目标上的端口80和443。

当特权用户试图扫描本地以太网上的目标时,除非指定了--send-ip,否则会使用ARP请求。

-sn选项可以与任何发现探测类型(-P*选项)组合使用,以获得更大的灵活性。如果使用了这些探测类型和端口号选项中的任何一个,则会覆盖默认探测。当运行Nmap的源主机和目标网络之间有严格的防火墙时,建议使用这些高级选项。否则,当防火墙丢弃探测或其响应时,主机可能会丢失探测。

在以前的Nmap版本中,-sn被称为-sP。

-Pn/-P0: Treat all hosts as online -- skip host discovery  

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

-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports

-PS[portlist] (TCP SYN Ping) 80端口

该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 (可以通过改变nmap.h) 文件中的DEFAULT-TCP-PROBE-PORT值进行配置,但不同的端口也可以作为选项指定。甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000), 在这种情况下,每个端口会被并发地扫描。

SYN标志位告诉对方您正试图建立一个连接。  

l通常目标端口是关闭的,一个RST (复位) 包会发回来。

l如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应一个SYN/ACK TCP报文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,否则,一个完全的连接将会建立。RST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。

Nmap并不关心端口开放还是关闭。无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。

在UNIX机器上,通常只有特权用户 root 能否发送和接收 原始的TCP报文。因此作为一个变通的方法,对于非特权用户, Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN 报文来尝试建立连接。如果connect()迅速返回成功或者一个ECONNREFUSED 失败,下面的TCP堆栈一定已经收到了一个SYN/ACK或者RST,该主机将被 标志位为在运行。如果连接超时了,该主机就标志位为down掉了。

-PA [portlist] (TCP ACK Ping)

ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。 所以远程主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的机器

非特权用户会使用connetc() 扫描,然而发送SYN报文。

-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes

-PO[protocol list]: IP Protocol Ping  

使用IP协议包探测对方主机是否开启。

-n/-R: Never do DNS resolution/Always resolve [default: sometimes]

--dns-servers <serv1[,serv2],...>: Specify custom DNS servers

--system-dns: Use OS's DNS resolver

--traceroute: Trace hop path to each host

Ping扫描,实际就是ICMP echo请求

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。

ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

4.2 端口扫描

端口分类

l公认端口(Well Known Ports):0-1023,他们紧密绑定了一些服务;

l注册端口(Registered Ports):1024-49151,他们松散的绑定了一些服务;

l动态/私有:49152-65535,不为服务分配这些端口;

Nmap可以识别出的6种端口状态State

lopen:工作于开放端口的服务器端的应用程序可以受理TCP 连接、接收UDP数据包或者响 应SCTP(流控制传输协议)请求。

lclosed:虽然我们确实可以访问有关的端口,但是没有应用程序工作于该端口上。

lfiltered:包过滤设备,防火墙屏蔽了我们向目标发送的探测包,Nmap不能确定该端口是否开放。

lunfiltered:虽然可以访问到指定端口,但Nmap不能确定该端口是否处于开放状态。

lopen|filtered:Nmap不能确定处于开放还是过滤了。在遇到没有响应的开放端口时,Nmap会作出这种判断。这可以是由于防火墙丢弃数据包造成的。

lclosed|filtered:Nmap 认为指定端口处于关闭状态或过滤状态,但是不能确定。

TCP扫描选项

1.TCP连接扫描(-sT):指定这个选项后,程序将和目标主机的每个端口都进行完整的三次握手。如果成功建立连接,则判定该端口是开放端口。由于在检测每个端口时都需要进行三次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动 Nmap的用户的权限不足,那么默认情况下Nmap程序将以这种模式进行扫描。

2.SYN扫描(-sS):该选项也称为半连接扫描。采用该选项后,Nmap将使用含有SYN标志位的数据包进行端口探测。

l目标主机回复了SYN/ACK包,则说明该端口处于开放状态;

l回复的是RST/ACK包,则说明这个端口处于关闭状态;

l如果没有任何响应或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。

SYN模式的扫描速度非常好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。

3.TCP NULL(-sN)、FIN(-sF)及XMAS(-sX)扫描:NULL 扫描不设置任何控制位;FIN扫描仅设置FIN标志位;XMAS扫描设置FIN、PSH和URG的标识位。

l如果目标主机返回了含有RST标识位的响应数据,则说明该端口处于关闭状态;

l如果目标主机没有任何回应, 则该端口处于打开|过滤状态。

FIN扫描可以区别win和unix系统。

TCP FIN扫描也和TCP SYN扫描原理差不多,当申请方主机向目标主机一个端口发送的TCP标志位FIN置位的数据包,如果目标主机该端口是“关”状态,则返回一个TCP RST数据包;否则不回复。根据这一原理可以判断对方端口是处于“开”还是“关”状态。这种方法的缺点是,该原理不是协议规定,因而与具体的协议系统实现有一定的关系,因为有些系统在实现的时候,不管端口是处于“开”还是“关”状态,都会回复RST数据包,从而导致此方法失效。不过,也正因为这一特性,该方法可以用于判断对方是UNIX操作系统还是Windows操作系统。

4.TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的探测数据包含有FIN/ACK标识。

l对于BSD衍生出来的各种操作系统来说,如果被测端口处于开放状态,主机将会丢弃这种探测数据包;

l如果被测端口处于关闭状态,那么主机将会回复 RST。

5.TCP ACK扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术 (stateful)防火墙,并能确定哪些端口被防火墙屏蔽。

lTCP ACK扫描nmap发送的数据包只有一个ACK标识位。

l如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。

6.TCP窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。

7.TCP Idle扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。

sP参数也是只进行主机发现,不进行端口扫描。结果与sn参数相同,但是sP参数只进行ping扫描,而sn会发送四种不同类型的数据包来探测目标主机是否在线,只要收到其中一个包的回复,那就证明目标机开启。使用四种不同类型的数据包可以避免因防火墙或丢包造成的判断错误。

但是sP该选项扫描可以轻易的获取目标信息而又不被轻易发现。在默认的情况下Nmap会发送一个ICMP回声请求和一个TCP报文到目标端口。ping扫描的优点是不会返回太多的信息造成对结果的分析,并且这是一种非常高效的扫描方式。简而言之,sP扫描到的机器一定存在,那么可以用来确定网段,如果出现sP扫描完全没有任何结果,但是确认存在某网段,那么该网络一定配置了禁ping的安全设备。

默认情况下本机地址通过发TCP连接,将SYN置1,如果收到ACK+RST,则判定主机存活,并进一步探测端口。ACK/UDP/SCTP探测原理相同。

UDP扫描选项

Nmap有多种TCP扫描方式,而UDP扫描仅有一种扫描方式(-sU)。虽然UDP扫描结果没有 TCP扫描结果的可靠度高,但渗透测试人员不能因此而轻视UDP扫描,毕竟UDP端口代表着 可能会有价值的服务端程序。但是UDP扫描的最大问题是性能问题。由干Linux内核限制1秒内最多发送一次ICMP Port Unreachable信息。按照这个速度,对一台主机的65536个UDP端口进行完整扫描,总耗时必 定会超过18个小时。

优化方法主要是:

1.进行并发的UDP扫描;

2.优先扫描常用端口;

3.在防火墙后面扫描;

4.启用--host-timeout选项以跳过响应过慢的主机。

假如我们需要找到目标主机开放了哪些 UDP端口。为提高扫描速度,我们仅扫描 53端口 (DNS)和161端口(SNMP)。

可以使用命令nmap -sU 192.168.56.103 -p 53,161

目标端口选项

默认情况下,Nmap将从每个协议的常用端口中随机选择1000个端口进行扫描。其nmapservices文件对端口的命中率进行了排名。

可以自定义端口参数:

-p端口范围:只扫描指定的端口。扫描1〜1024号端口,可设定该选项为–p 1-1024。扫描1 〜65535端口时,可使用-p-选项。

-F(快速扫描):将仅扫描100 个常用端口。

-r(顺序扫描):指定这个选项后,程序将从按照从小到大的顺序扫描端口。

-top-ports <1 or="" greater="">:扫描nmap-services 里排名前N的端口。

4.3 服务、版本探测

SERVICE/VERSION DETECTION:

-sV: Probe open ports to determine service/version info

--version-intensity <level>: Set from 0 (light) to 9 (try all probes)

--version-light: Limit to most likely probes (intensity 2)

--version-all: Try every single probe (intensity 9)

--version-trace: Show detailed version scan activity (for debugging)

4.4 操作系统探测

OS DETECTION:

-O: Enable OS detection

--osscan-limit: Limit OS detection to promising targets

--osscan-guess: Guess OS more aggressively

数据库指纹匹配,然后选分数高的。

https://nmap.org/book/osdetect-guess.html  

4.5 网络路由跟踪

traceroute

4.6 Nmap脚本引擎

SCRIPT SCAN:

-sC: equivalent to --script=default

--script=<Lua scripts>: <Lua scripts> is a comma separated list of

directories, script-files or script-categories

--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts

--script-args-file=filename: provide NSE script args in a file

--script-trace: Show all data sent and received

--script-updatedb: Update the script database.

--script-help=<Lua scripts>: Show help about scripts.

<Lua scripts> is a comma-separated list of script-files or

script-categories.

5 常见命令总结及面试问题  

常见的Nmap命令:

-A :选项用于使用进攻性方式扫描

-T4:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4

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

-O : 指定Nmap进行系统版本扫描

-sV: 指定让Nmap进行服务版本扫描  

-p <port ranges>: 扫描指定的端口

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式来对目标主机进行扫描

-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况

-script <script name> : 指定扫描脚本

-Pn :不进行ping扫描

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

面试问题

-sV原理

Nmap使用_UDP

进行端口扫描,并且Nmap根据这些返回的数据包在nmap-services中进行对比判断出端口所启动的服务以及版本号的。

举例说明:如果端口是TCP,则Nmap通过连接到它来启动。Null探测probe,等待五秒,会自动标识。一旦建立了TCP连接,Nmap就会监听大约五秒钟。许多常见服务,包括大多数FTP、SSH、SMTP、Telnet、POP3和IMAP服务器,都会在最初的欢迎横幅中标识自己。Nmap将其称为“NULL探测”,因为Nmap只侦听响应而不发送任何探测数据。如果接收到任何数据,Nmap会将其与Nmap服务探测文件中的大约3000个NULL探测签名进行比较(在名为“Nmap服务探针文件格式”的部分中进行了描述)。

软匹配则会继续发送已软匹配的服务的probe来进行版本识别。

6 总结  

学完这个模块,应该能回答出以下问题: Nmap的基本功能有哪些?原理是什么?会发送什么协议数据包?对应的会收到什么数据包?常用的命令有哪些?如何做防火墙的绕过?


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  5LDXj505LNyI   2023年11月19日   15   0   0 用户名数据TCP
  4i8hCvzXKbg6   2023年11月24日   43   0   0 IPideTCP