0x00 Nmap列举远程机器开放的端口原理

首先判断nmap输入的命令中是否包含域名,如果包含需要利用DNS服务器进行域名解析,然后发送ICMP Echo Request来探测主机的存活性。若目标主机存活,nmap则向目标发送数据包,然后目标主机会做出回应,回包给nmap,nmap就根据返回的数据包来得到机器信息,其中就包含端口信息。

可以使用【nmap domain_name】来探测
  • nmap在探测之前把域名通过DNS服务器解析为IP地址,也可以用执行的DNS服务器进行解析。使用 --dns-server参数来指定
  • 对于已知主机存活或者防火墙开启的机器,可以使用-Pn参数来停止探测之前的ICMP请求。以达到不触发防火墙安全机制。
  • 对于默认的端口范围,不能满足日常需要。可以使用-p m-n来指定探测端口范围之间的所有端口
端口状态:
  • Open 表示端口处于开放状态
  • Closed 关闭
  • Filterd 表示端口处于过滤无法收到返回的probe状态
  • UnFilterd 表示端口收到返回的probe,但是无法确认
  • Opened/UnFilterd 表示端口处于开放或者是过滤状态
  • Closed/UnFilterd 表示端口处于关闭或者是未过滤状态

0x01 Nmap发现局域网中存活主机

主机发现

  • ping ip 手工探测,但是很费劲
  • CIDR(无类别域间路由),可以快速表示一个网络

172.16.1.1/24 = 172.16.1.1~172.16.1.255 表示该域下所有主机IP地址

  • nmap -sP CIDR 对该网络所有的主机进行Ping扫描,以探测主机存活性。扫描过程中使用了TCP、SYN扫描ICMP echo Request来探测主机存活
  • nmap -sn CIDR 对网络中所有主机进行Ping扫描,探测主机的存活性
  • nmap -sn CIDR -oX file_name.xml 将探测结果保存到xml文件中

0x02 Nmap识别目标机器上服务的指纹

服务指纹

为了确保有一个成功的滲透测试或网络设备监控,必须知道目标系统中服务的指纹信息。服务指纹信息包括服务端口、服务名和版本等。

通过分析目标往Nmap发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统等。

nmap通过向目标主机发送多个UDP与TCP数据包冰分析其响应来进行操作系统指纹识别工作。

使用命令nmap -sV IP来识别目标机器的服务信息

Nmap的倾略性探测

  • nmap -A -v -T4 IP
  • nmap -sC -sV -O IP

以上两条命令都是使用Nmap来探测目标机器的操作系统、服务等信息。其中-sC表示使用Nmap脚本探测,-sV表示探测目标服务器上的服务信息,-O表示探测目标服务器的操作系统信息。

Tips:-sC:equivalent to -script=default

0x03 Nmap的NSE脚本使用

NSE脚本介绍

NSE(Nmap Script Engine)Nmap脚本引擎,内置很多可以用来扫描的、针对特定任务的脚本。通过NSE可以不断拓展Nmap扫描策略,加强Nmap的功能。

Nmap中使用--script参数来指定调用的脚本,并且脚本存储在Nmap安装路径下的script文件夹下,对于kali linux存储在/usr/share/nmap/script/下。

NSE使用

  • nmap --script script_name IP 使用Nmap探测Web服务的title信息
  • nmap --script http-headers IP 使用Nmap探测http服务的http头

NSE分类使用

对于目标使用多个分类脚本进行探测,可以更快的找到目标的信息与弱点。

  • 使用Nmap中漏洞分类脚本对目标进行探测,使用命令如下:

nmap -sV --script vuln IP

  • 使用Nmap中发现和版本信息分类进行探测,使用命令如下:

nmap -sV --script="version, discovery" IP

  • 使用Nmap除了exploit分类之外的其它分类进行探测,使用命令如下:

nmap -sV --script="not exploit" IP

  • 使用Nmap中http*的脚本,但是除了(http-brute和http-slowlors),使用命令如下:

nmap -sV --script "(http*) and not (http-slowlors and http-brute)" IP

0x04 Nmap端口探测小技巧

  • nmap -p port_number ip 对某个端口进行探测
  • nmap -p port_number1,port_number2... IP 对某几个端口进行探测
  • nmap -p1-100 ip 对某个范围端口进行探测
  • nmap -p- ip 全端口探测
  • nmap -p T:25,U:53 IP 指定协议来探测端口
  • nmap -p smtp IP 通过协议名来扫描端口
  • nmap -p s* ip 通过名称范围扫描