零基础吃透 Nmap!全网最细渗透工具实战教程 kali的命令行中可以直接使用 nmap 命令打开一个「终端」输入 nmap 后回车可以看到 nmap 的版本证明 nmap 可用。Nmap有四种基本功能「端口扫描」、「主机探测」、「服务识别」和「系统识别」。一、端口扫描扫描主机的「开放端口」在nmap后面直接跟主机IP默认扫描1000个端口nmap 192.168.31.180从上图可以看到它用1.58秒扫描了1000个端口其中991个端口关闭结果中列出的9个端口就是开放的端口。1. 指定端口扫描「指定端口」使用-p参数可以一次扫描单个端口、多个端口、或扫描一个范围的端口nmap 192.168.31.180 -p 80 nmap 192.168.31.180 -p 1-80 nmap 192.168.31.180 -p 80,3389,22,21 nmap 192.168.31.180 -p 1-65535 nmap 192.168.31.180 -p- # -p- 等价于 -p 1-655352. 指定扫描方式我们通过kali中的「wireshark」抓包分析不同扫描方式的请求信息从而判断这些方式的区别。点开kali的左上角输入 wireshark 单击打开选择抓包的网卡我这里是 eth0 。输入过滤条件ip.addr 192.168.31.180 and tcp.port 80后点击箭头应用。这个过滤条件的意思是过滤IP地址是 192.168.31.180 并且 端口是 TCP的80端口。设置完过滤条件后我们在命令行执行扫描命令然后查看「wireshark」中的请求包。2.1 TCP全连接扫描使用-sT参数进行TCP全连接扫描。「全连接扫描」使用完整的三次握手建立链接能够建立链接就判定端口开放否则判定端口关闭。nmap 192.168.31.180 -p 80 -sT1如果端口开放就会进行完整的三次握手成功建立链接扫描结果中STATE字段显示为 open 。2如果端口关闭就只能进行一次握手无法建立链接扫描结果中STATE字段显示为 closed。2.2 SYN半链接扫描使用-sS参数进行SYN半链接扫描。「半链接扫描」只进行两次握手对方返回确认帧ACK1就判定端口开放否则判定端口关闭。nmap 192.168.31.180 -p 80 -sS1如果端口开放就会进行两次握手扫描结果中STATE字段为 open 。2如果端口关闭就只有一次握手扫描结果中STATE字段为 closed。2.3 隐秘扫描隐秘扫描只适用于Linux系统。「隐秘扫描」向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包如果收到RST响应包就判定端口关闭否则就判定端口开放或被屏蔽open/filterednmap 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的包二、主机探测扫描网段中有哪些主机在线使用-sP参数不扫描端口只扫描「存活主机」。本质上是Ping扫描能Ping通有回包就判定主机在线。nmap -sP 192.168.31.0/24从上图可以看到它用2秒扫描了这个网段的256个IP其中有3个存活主机效率还是蛮不错的。三、服务识别扫描端口时默认显示端口对应的服务但不显示服务版本。想要识别具体的「服务版本」可以使用-sV参数。nmap 192.168.31.180 -p 80 -sV扫描结果中VERSION字段显示服务的详细版本。四、系统识别想要识别「操作系统版本」可以使用-O参数。nmap 192.168.31.180 -p 80 -O提示Nmap扫描出的系统版本并完全准确仅供参考。当识别不出具体版本时Nmap会以概率的形式列举出可能的操作系统如上图所示。五、扫描结果导出Nmap的扫描结果可以保存到文件中比如文本格式、XML格式。1将扫描结果导出为「文本格式」结果原样保存。nmap 192.168.31.180 -p 80 -oN result.txt2将扫描结果导出为「xml格式」结果的保存格式会发生变化。nmap 192.168.31.180 -p 80 -oX result.xml