首页 > 技术文章 > nmap详解-个人版

hmtk123 2020-11-22 21:14 原文

一、nmap家族

nmap家族和项目地址:

下载地址:

http://www.nmap.com.cn/ #国内站点
https://github.com/nmap/nmap #git地址
https://nmap.org/ #官方站点
** 文档地址: **
http://www.nmap.com.cn/doc/manual.shtm #中文文档地址
https://nmap.org/ #官方文档地址

命令包含:

nmap:网络探测和端口扫描
nping:用于网络包生成、响应分析和响应时间测量
ndiff:对比扫描结果
nc(ncat):通过命令行收发数据

注:这里只针对nmap进行介绍

扫描:
类似与打电话,别人接电话了说明对方在线。对方在家也可以不接电话

扫描的动作: 1、统一沟通语言(对方能理解的语言tcp|udp|icmp|...);2、发出刺激;3、接受对方刺激反馈;4、对比刺激和反馈完成扫描 

二、nmap基础用法简介

建议先回顾下TCP和UDP
TCP: https://en.wikipedia.org/wiki/Transmission_Control_Protocol
UDP: https://en.wikipedia.org/wiki/User_Datagram_Protocol

1、帮助信息

用法:Usage: nmap [扫描类型 ] [Options] {target specification}
扫描目标:1)主机发现;2)端口扫描;3)服务确定

2、扫描目标

TARGET SPECIFICATION: #扫描目标说明
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0-255.0-255.1-254
-iL <主机列表文件>: Input from list of hosts/networks
-iR <随机生成地址进行扫描的地址个数,0为一直生成>: Choose random targets
--exclude <host1[,host2][,host3],...>: 排除 hosts/networks
--excludefile <exclude_file>: 排除 list from file

3、输出和调试选项

-oN/-oX/-oS/-oG <file>: 输出文件另存为 normal, XML, s|<rIpt kIddi3,and Grepable format, respectively, to the given filename.
-oA <basename>: 同时输出xml,nomal 和G模式同时输出
-v: verbose,-v,-vv,-vvv
-d[DEBUG模式 0-9]: Set or increase debugging level (Up to 9 is meaningful)
--packet-trace: 输出packet传输和发送内容
--iflist: Print host interfaces and routes (for debugging)
--append-output: Append to rather than clobber specified output files
--resume <filename>: Resume an aborted scan
--stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
--no-stylesheet: Prevent Nmap from associating XSL stylesheet w/XML output
--reason
--log-errors
--webxml (导入从Nmap.org下载的stylesheet)

4、主机发现

-Pn: 不对目标进行ping探测(不判断主机是否在线)(直接扫描端口)
-sL: List Scan -不做扫描,只进行DNS解析和网址转换
-sP/-sn: Ping Scan - 发送icmp echo请求和TCP ACK请求80端口,只要一个响应。就标记为online	#nmap -PS --traceroute  www.baidu.com  -p 80
-P0: Treat all hosts as online -- skip host discovery 
-PS/PA/PU [portlist]: TCP SYN/ACK or UDP discovery probes to given ports //tcp SYNPING,TCP ACK PING,UDP PING
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes	//
-PR: ARP ping,
-n/-R: Never do DNS resolution/Always resolve [default: sometimes resolve]
--system-dns:  使用系统域名解析器
--dns-servers [dns_server1],[dns_server2]... 
--traceroute 	#链路追踪,示例:nmap -PS --traceroute  www.baidu.com  -p 80

5、端口扫描

-p <port ranges>: Only scan specified ports ; Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080。默认扫描所有常用端口
-F: 快速扫描,常用端口,扫描1000个端口。
--top-ports <端口数> : 示例: nmap -F --top-ports 10 192.168.45.129。扫描常用的10个端口
-r: Scan ports consecutively - don't randomize

** 端口状态: **

OPEN:开启,有监听;扫描返回值为TCP SYN/ACK
Closed:端口关闭,数据能到到主机,但是没有程序监听此端口;扫描的返回值为TCP RST
Filtered:数据未能到达主机;扫描无返回值或者ICMP未到达错误(类型3,代码1,2,3,9,10或者13)
UnFiltered:数据能到达主机,但是nmap无法判断端口开启还是关闭
Open|filtered:端口没有返回值,主要出现在UDP、IP,FIN,UNIX和Xmas扫描
Closed|filtered:只出现在IP ID idle扫描

-sS/sT/sA: TCP SYN只发送syn包(不会建立链接)/Connect()全连接探测/ACK/#为防止syn工具,安全管理人员一般会设置首包syn丢弃,导致nmap认为他是closed的
-sN/sF/sX: TCP Null, FIN, and Xmas scans
-sW: window扫描,RST返回window区域非0/open,RST返回window区域为0/closed,没有返回值(重传之后)/filtered,ICMP未到达错误(类型3,代码1,2,3,9,19或者13)/filtered
-sM: Maimon scans ,无返回值/open|filtered,返回RST/closed,ICMP未到达错误(类型3,代码1,2,3,9,19或者13)/filtered
--scanflags <flags>: Customize TCP scan flags //R[reduced],E[ECN echo],U[URG],A[ACK],P[PSH],R[RST],S[SYN],F[FIN] tcp标志位。
-sUV :udp扫描,有数据返回/open;没有任何返回(多次重传之后)/open|filtered;ICMP端口到达错误(类型3,代码3)/closed
-sI <zombie host[:probeport]>: Idlescan  //三个参与者,nmap使用者使用zombie主机的信息向目标主机发起扫描(目标主机回复给zombie信息)
	1)nmap向zombie主机发送syn/ACK包,zombie回复RST(携带ip id)
	2)nmap伪造zombie的SYN包,向目标服务器发送
	3)目标服务器,回复zombie SYN/ACK。zombie回复RST(ip id + 1) //如果目标服务器端口close状态,回复RST(这样app id就不会自增)
	4)nmap向zombie主机发送syn/ACK包,zombie回复RST(携带ip id + 1) //nmap以ip id的值递增的特性判断目标服务器端口是否开启
	5)返回值IP ID自增2/open,ID 自增1/Close|filtered
	6)注意一定要选取ip id为自增的
-sO: 服务器支持哪些协议,任何来自目标主机的协议返回/open;ICMP到达类型为(3,代码2)/close;无响应/open|filtered ;测试协议:tcp/ip/udp/icmp/igmp/ipv4/ipv6...
-b <ftp relay host>: FTP 反弹扫描

6、时间和性能控制

--min-hostgroup/max-hostgroup <msec>: 一次扫描多少个主机。在主机比较多的情况下。分成多组,一组扫描后即可查看数据。方便查阅
--min-parallelism/max-parallelism <msec>: 一次开多少个并行扫描
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <毫秒>: 主机在线和重传等待时间
--max-retries: 最大重传次数。针对首包丢弃的场景比较适用
--host-timeout <msec>: 每个主机最大的耗时,单位s,m,h
--scan-delay/--max-scan-delay <msec>: 主机每个探测的间隔时间
--min-rate,--max-rate :控制发包次数。每秒的发包次数
--defeat-rst-ratelimit: 不关心服务端的rst包(在一定时间内没有包返回即判定为filtered),不关心close类型
-T[0-5]: 时间模板 //<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> 。例如,-T4 针对TCP端口禁止动态扫描延迟超过10ms;见下图

7、确定服务版本

-sV: 查看服务版本信息(应用层信息)
--version-intensity <0-9> :设置探测深度
--version-light: Limit to most likely probes for faster identification 相当于0-2
--version-all: Try every single probe for version detection 相当于0-9
--version-trace: Show detailed version scan activity (for debugging) 显示版本扫描详情(用于调试)
--datadir <dirname>: 指定nmap数据文件 #nmap -sS -n scanme.nmap.org --datadir=./data

** 示例1:查看服务版本信息 **

[root@master ~]# nmap -sS -n -vv -F 192.168.45.129 //-F 快速扫描;-sS使用syn扫描;-n 不进行 域名/ip 解析
Not shown: 97 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
8009/tcp open  ajp13
8080/tcp open  http-proxy

[root@master ~]# nmap -sS -sV -n -vv -F 192.168.45.129
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1 (protocol 2.0)
8009/tcp open  ajp13   Apache Jserv (Protocol v1.3)
8080/tcp open  http    Apache Tomcat/Coyote JSP engine 1.1

[root@master ~]# nmap -sS -sV -p 8080 -n -vv  192.168.45.129 //探测tomcat版本
PORT     STATE SERVICE VERSION
8080/tcp open  http    Apache Tomcat/Coyote JSP engine 1.1

** 文件说明1:/usr/share/nmap/nmap.services //nmap 根据该文件判断接口对应的服务 **

# Fields in this file are: Service name, portnum/protocol, open-frequency, optional comments
#
tcpmux  1/tcp   0.001995        # TCP Port Service Multiplexer [rfc-1078]
tcpmux  1/udp   0.001236        # TCP Port Service Multiplexer

文件说明2:/usr/share/nmap/nmap.services 。可自行定义

8、系统探测(待更新)

https://www.bilibili.com/video/BV1Cv411i7zL?p=14

-A: Enables OS detection and Version detection
--datadir <dirname>: 指定nmap数据文件 #nmap -sS -n scanme.nmap.org --datadir=./data
--send-eth/--send-ip: Send packets using raw ethernet frames or IP packets
--privileged: Assume that the user is fully privileged

-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively
--max-os-tries: Guess OS more aggressively

9、防火墙探测

FIREWALL/IDS EVASION AND SPOOFING:
	-f; --mtu <val>: fragment packets (optionally w/given MTU)
	-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
	-S <IP_Address>: Spoof source address
	-e <iface>: Use specified interface
	-g/--source-port <portnum>: Use given port number
	--data-length <num>: Append random data to sent packets
	--ttl <val>: Set IP time-to-live field
	--spoof-mac <mac address, prefix, or vendor name>: Spoof your MAC address

10、其他参数

-V: 查看版本信息
-6: Enable IPv6 scanning
-h: 查看帮助信息

三、常见用法:

nmap -sP -n 192.168.1.0/24 #用于快速发现存活主机。存活主机发现建议用 ping方式探测
nmap -F 192.168.1.24 #快速扫描100个常用的端口。注意TCP和UDP扫描分开扫描。
nmap -PN -T4 -A -d9 -vv -oN ./nmap.txt scanme.nmap.org  

推荐阅读