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
通过名称范围扫描