目录
前言:
namp有五种基本功能:端口扫描,主机探测,服务识别,系统识别,漏洞检测。
一、端口扫描
1、扫主机端口
namp [主机ip]
nmap 192.168.74.1
nmap用4.87秒扫描了1000个端口(默认扫描1000个)其中995个端口关闭只有5个开放。
扩展(了解即可):
TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议
135端口:用于远程的打开对方的telnet服务 ,用于启动与远程计算机的 RPC 连接,很容易就可以就侵入电脑。
139端口:用于获得获得NetBIOS/SMB服务。
445端口:用于在局域网中轻松访问各种共享文件夹或共享打印机,通过该端口能偷偷共享硬盘,甚至会在悄无声息中将硬盘格式化掉。
902端口:busybox进程的一个功能端口(具体什么功能未知)
912端口:虚拟机的监听端口
2、扫指定端口
nmap [ip] -p [LPORT]
扩展:
端口状态
open(开放的):应用程序正在该端口接收TCP连接或者UDP报文。
closed(关闭的):关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。
filtered(被过滤的):包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。过滤来自于防火墙。
unfiltered(未被过滤的):未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。
open|filtered(开放或者被过滤的):当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。
closed|filtered(关闭或者被过滤的):该状态用于Nmap不能确定端口是关闭的还是被过滤的。
3、指定扫描方式
打开kali内的wireshark抓包分析不同扫描方式的请求信息
抓包eth0输入过滤条件ip.addr == 192.168.74.1 and tcp.port == 80,然后再次执行
nmap 192.168.74.1 -p 80得到请求包
扩展:
eth0:第一个以太网接口,eth0通常是系统默认的以太网接口名称,用于连接主机到局域网或广域网。
-
tcp全连接扫描
nmap 172.16.17.168 -p 445 -sT
#使用-sT参数进行
使用完整的三次握手建立链接,能够建立链接就判定端口开放,否则判定端口关闭。
state为open端口开放,否则为close。由于要完成TCP的3次握手,速度较慢,且这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。且容易被防火墙过滤不推荐使用。
-
SYN半链接扫描
只进行两次握手,对方返回确认帧(ACK=1)就判定端口开放,否则判定端口关闭
扫描不会被记录到系统日志中,不会再目标主机有扫描痕迹,但要有root权限。还是容易被过滤。
-
隐秘扫描(只适用于linux系统)
向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包,如果收到RST响应包,就判定端口关闭,否则就判定端口开放或被屏蔽(open/filtered)
nmap 127.0.0.1 -p 80 -sF # Fin扫描
nmap 127.0.0.1 -p 80 -sN # Null扫描(所有flags都为0的TCP包)
nmap 127.0.0.1 -p 80 -sX # Xmas扫描(flags的FIN、URG、PUSH都为1的包)
小结:
在端口显示被filtered的情况下,要想确定一个端口是否是开放的,通常可结合-sT和-sS、-sF等联合判断。
如:80端口用-sT扫描出来是filtered,但用-sF扫出来是open/filtered
二、主机扫描
扫描网段中有哪些主机在线,不扫描端口,只扫描存活主机,本质上是Ping扫描,能Ping通有回包,则主机在线。
nmap -sP 172.16.17 0/24
nmap -sn 172.16.17 0/24
#172.16.17.0是子网的起始IP地址,/24表示子网掩码是255.255.255.0,即前24位是网络部分,后8位是主机部分。扫描将包括192.168.31.1到192.168.31.254范围内的所有IP地址。
由于我们此时处于NAT模式,会导致nmap误判主机全存活,所以可以指定nmap只使用ICMP echo请求探测(-PE)主机,即添加-PE参数,这样nmap就只发送一个ICMP echo请求。
nmap -sn -PE -n 172.16.17.0/24
#-n不要进行 DNS 解析,nmap 不会尝试将 IP 地址解析为域名,这可以加快扫描速度,并减少不必要的网络流量
或者直接将网络连接模式改为桥接。
注意:未经授权扫描非自己的网络的非法行为
三、服务识别
默认显示端口对应的服务,但不显示服务版本。
可以使用-sV显示服务版本
VERSION字段显示服务的详细版本。
四、系统识别
使用-O
nmap 172.16.17.168 -p 445 -O
当识别不出具体操作系统时会将可能的操作系统列出。
五、漏洞检测
nmap -sV --script=vuln 192.168.222.144
#-sV:用于启用版本检测,以便Nmap尝试识别目标主机上每个开放端口的服务版本。
#--script=vuln:指定Nmap运行与漏洞有关的脚本,这些脚本可以检测常见的漏洞。
#script后跟不同的变量以实现特定的功能。
检测特定漏洞
nmap --script=vuln:CVE-2018-1000000 192.168.222.144
#nmap --script=vuln:[CVE编号] <target-ip>
脚本分类:
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;
六、将扫描结果导出
使用-oN
nmap 172.16.17.168 -p 445 -oN result.txt
也可以导出到xml文件中。
总结:
在使用nmap工具时需要确保以下几点:
1、你有权扫描的目标网络或主机。如果是你自己的网络或设备,通常不会有问题。
2、你没有恶意目的,比如企图非法侵入、破坏系统或窃取数据。
3、你的行为不会对目标网络或主机的正常运行造成影响。