IT评测·应用市场-qidao123.com技术社区

标题: 网络安全(一):信息收集之玩转nmap(理论篇) [打印本页]

作者: 羊蹓狼    时间: 2024-12-2 09:01
标题: 网络安全(一):信息收集之玩转nmap(理论篇)
nmap

nmap(Network Mapper)是免费、开源的网络发现和安全审计工具,通常我们用于收集网络中的比如主机和端口等信息,从而为下一步的攻击提供突破口,订定攻击的筹划。也可为网络管理员使用,从而针对性修复大概暴露的安全漏洞。
   具体的功能介绍可以登录官网https://nmap.org,来获取软件包和官方教程。
  


图1.Windows检察nmap提供的可执行文件
nmap下令

nmap发现的原理无非就是,发送数据包到目标主机,依据相应报文来识别已经开放的端口等信息等,属于主动攻击。

下面的篇幅较长,如果是忘记了下令,可以只看这部分即可,我在这里翻译了nmap -h原文,并做了小总结。时间宝贵,头发也宝贵呢。

  1. Nmap 7.93 (https://nmap.org)
  2. 用法:nmap [扫描类型] [选项] {要扫描的目标}
  3. 扫描的目标:
  4.     可以是 主机名、IP 地址、网络等。
  5. #(可以使用逗号,指定不连续的ip段  减号-指定连续ip段  斜杠/指定掩码 星号*代表全部)
  6.     例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
  7.     -iL <inputfilename>:                  从文件中读取要扫描的主机列表
  8.     -iR <主机数量>:                        选择随机目标 #0为无限生成
  9.     --exclude <host1[,host2][,host3],...>:要排除的 主机/网络
  10.     --excludefile <exclude_file>:         从文件中选择要排除的主机列表
  11. 主机发现:
  12.     -sL:                   列表扫描  - 打印主机的列表(对域名进行扫描时,可以得到IP列表 )
  13.     -sn:                   Ping 扫描,同时禁用端口扫描,用来检查主机存活状态。
  14.     -Pn:                   禁用 Ping 扫描,默认所有主机都是存活状态
  15.     -PS/PA/PU/PY[端口列表]:对指定的端口通过 TCP SYN/ACK、UDP 或 SCTP 扫描来发现主机
  16.     -PE/PP/PM:             对指定的端口通过 ICMP、时间戳和网络掩码请求发现和探测主机
  17.     -PO[协议列表]:          IP 协议 Ping
  18.     -n/-R:                 不进行DNS解析/ 进行DNS解析 [默认]
  19.     --dns-servers <serv1[,serv2],...>: 指定自定义 DNS 服务器
  20.     --system-dns:                      使用操作系统的 DNS 解析器
  21.     --traceroute:                      跟踪每个主机的跃点路径
  22. 扫描技术:
  23.     -sS/sT/sA/sW/sM:           TCP SYN / Connect() / ACK / Window / Maimon 扫描
  24.     -sU:                       UDP 扫描
  25.     -sN/sF/sX:                 TCP Null、FIN 和 Xmas 扫描
  26.     --scanflags <flags>:       自定义 TCP 扫描标志
  27.     -sI <僵尸主机[:僵尸端口]>: 空闲扫描
  28.     -sY/sZ:                    SCTP INIT/COOKIE-ECHO 扫描
  29.     -sO:                       IP 协议扫描
  30.     -b <FTP 中继主机>:          FTP 反弹扫描
  31. 指定扫描端口、扫描顺序:
  32.     -p <端口范围>:只扫描指定的端口
  33.         例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  34.     --exclude-ports <端口范围>:   从扫描中排除指定端口
  35.     -F:                          快速模式。 扫描比默认扫描更少的端口
  36.     -r:                          连续扫描端口。不要随机化,即按顺序扫描端口
  37.     --top-ports <number>:        扫描<number>个最常用的端口
  38.     --port-ratio <ratio>:        扫描比<ratio>更常见的端口
  39. 服务/版本检测:
  40.     -sV:                        探测开放端口以确定服务/版本信息
  41.     --version-intensity <level>:设置从 0(轻)到 9(尝试所有探针)
  42.     --version-light:            限制最可能的探测(强度 2)
  43.     --version-all:              尝试每一个探测(强度 9)
  44.     --version-trace:            显示详细的版本扫描活动(用于调试)
  45. 脚本扫描:
  46.     -sC:                               相当于--script=default
  47.     --script=<Lua scripts>:             使用脚本进行扫描,多个脚本时用逗号分隔,支持通配符。
  48.     --script-args=<n1=v1,[n2=v2,...]>: 为脚本提供参数
  49.     --script-args-file=filename:       从文件中提供 NSE 脚本参数
  50.     --script-trace:                    显示所有发送和接收的数据
  51.     --script-updatedb:                 更新脚本数据库。
  52.     --script-help=<Lua 脚本>:          显示有关脚本的帮助。
  53. 操作系统检测:
  54.     -O:              启用操作系统检测
  55.     --osscan-limit:  将操作系统检测限制为有希望的目标
  56.     --osscan-guess:  更积极地猜测操作系统
  57. 时间和性能:
  58.     默认是秒,也可以 “ms”(毫秒),'s'(秒)、'm'(分钟)或 'h'(小时)到值(例如 30m)。
  59.     -T<0-5>:                设置时序模板(越高扫描速度越快,但是准确性降低)
  60.     --min-hostgroup/max-hostgroup <size>:        并行主机扫描组大小
  61.     --min-parallelism/max-parallelism <numrobes>:探针并行化
  62.     --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>: 指定探测往返时间。
  63.     --max-retries <tries>:               限制端口扫描探测重传的次数。
  64.     --host-timeout <time>:                多长时间后放弃目标
  65.     --scan-delay/--max-scan-delay <time>:调整探针之间的延迟
  66.     --min-rate <number>:                 每秒发送数据包不低于 <number>
  67.     --max-rate <number>:                 每秒发送数据包的速度不超过 <number>
  68. 防火墙/IDS 逃避和欺骗:
  69.     -f; --mtu <val>:             分片数据包(可选地 w/给定的 MTU)
  70.     -D <诱饵IP1,诱饵IP2[,本机IP],...>:使用诱饵隐藏扫描。即发送参杂着假ip的数据包检测
  71.     -S <IP 地址>:               欺骗源地址。就是伪造源主机IP地址。
  72.     -e <网络接口>:               指定从哪个网卡发送和接收数据包。
  73.     -g/--source-port <portnum>: 使用给定的端口号。针对防火墙只允许的源端口
  74.     --proxies <url1,[url2],...>: 通过 HTTP/SOCKS4 代理中继连接
  75.     --data <hex string>:        将自定义有效负载附加到发送的数据包
  76.     --data-string <string>:     将自定义 ASCII 字符串附加到发送的数据包中
  77.     --data-length <num>:        将随机数据附加到发送的数据包中。
  78.                                  改变发生数据包的默认的长度,防止被识别出来。
  79.     --ip-options <options>:     发送带有指定ip选项的数据包
  80.     --ttl <val>:                设置 IP 生存时间字段
  81.     --spoof-mac <mac地址/前缀/供应商名称>:   欺骗你的MAC地址
  82.     --badsum:                   发送带有虚假 TCP/UDP/SCTP 校验和的数据包
  83. 输出:
  84.     -oN/-oX/-oS/-oG <file>: 扫描结果写入到文件。
  85.                              正常,XML,s|<rIpt kIddi3,Grepable 格式,
  86.     -oA <basename>:         一次输出三种主要格式
  87.     -v:                     增加详细程度(使用 -vv 或更多以获得更好的效果)
  88.     -d:                     增加调试级别(使用 -dd 或更多以获得更好的效果)
  89.     --reason:               显示端口处于特定状态的原因
  90.     --open:                 仅显示打开(或可能打开)的端口
  91.     --packet-trace:         显示所有发送和接收的数据包
  92.     --iflist:               打印主机接口和路由(用于调试)
  93.     --append-output:        附加到而不是破坏指定的输出文件
  94.     --resume <文件名>:       恢复中止的扫描
  95.     --noninteractive:       通过键盘禁用运行时交互
  96.     --stylesheet <path/URL>:将 XML 输出转换为 HTML 的 XSL 样式表
  97.     --webxml:               参考 Nmap.Org 的样式表以获得更便携的 XML
  98.     --no-stylesheet:        防止 XSL 样式表与 XML 输出相关联
  99. 杂项:
  100.     -6:                  启用 IPv6 扫描
  101.     -A:                  也叫全面扫描。操作系统检测、版本检测、脚本扫描和跟踪路由。
  102.     --datadir <dirname>: 指定自定义 Nmap 数据文件位置
  103.     --send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送
  104.     --privileged:        假设用户拥有完全特权
  105.     --unprivileged:      假设用户缺乏原始套接字权限
  106.     -V:打印版本号  
  107.     -h:打印此帮助摘要页。
  108. 有关更多选项和示例,请参见手册页 (https://nmap.org/book/man.html)
复制代码


扫描目标


/,-*符号

nmap下令中扫描的目标是不可省略的参数,可以使用/,-*符号来确认目标范围。当然这三种都可以混合使用。

  1. # 直接单台主机ip,当然直接使用域名也可以,就是不怎么灵活而已
  2. nmap 192.168.1.1
  3. # 直接使用/掩码,扫描网段内全部ip
  4. nmap 192.168.1.1/24
  5. # 使用,指定对象,一般针对于不连续的网段
  6. nmap 192.168.2.1,10,172,192,254
  7. # 使用-选择连续的范围
  8. nmap 192.168.3.1-255
  9. # 使用*选择本段全部,和0-255一样
  10. nmap 192.168.4.*
  11. # ,/-*四者可以任意结合起来使用
  12. nmap 192.168.1,2,3.*
  13. nmap 192.168.1-192,240.1/24
复制代码


--exclude排除host

  1. # 比如你指定了大范围内的ip,但是某些ip你又想排除,后面可以无限写
  2. nmap 192.168.1.1/24 <strong>--exclude</strong> 192.168.1.1 192.168.1.100
复制代码

-iL从文件中导入和--excludefile排除

有时候从dhcp服务器中导出了在线的ip,可以使用文件来批量的选择扫描的目标,比如某公司禁止公司内部电脑开启web服务等,使用文件导入的方法,可以跳过离线主机进行的扫描。

文件格式中ip之间可以使用换行(\n),同时也支持,/-语法。

-iR随机扫描


以下是我使用nmap -iR 2后的抓包,可以看到ip是随机的,默认的


图2.默认扫描发送的报文
扫描范例可以省略,缺省时使用-sT参数,即TCP连接扫描,缺省情况下发送三个报文


端口模式

nmap将端口分成六个状态:


主机发现

针对于不同的设备和网络情况,不同的扫描方式会有着截然不同的结果。


-sL(列表扫描)

其实这个参数不会对目标进行扫描操纵,但因为nmap默认情况下是会对本机设置的所有DNS服务器反向剖析其IP,即获取hostname,以是使用起来可以起到获取目标IP域名的结果。


 图3.sL扫描会向本机DNS依据IP反剖析hostname
我的本机默认的DNS是192.168.24.8和223.5.5.5。话说对公网的DNS服务器反向剖析内网的IP的hostname,是不是有点太搞笑了。


  1. ┌──(kali㉿kali)-[~]
  2. └─$ nmap -sL 192.168.24.1/30 -dns-servers 192.168.28.8
  3. Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-26 22:39 EDT
  4. Nmap scan report for 192.168.24.0
  5. Nmap scan report for redmiAX6(192.168.1.1)
  6. Nmap scan report for xiaomi10s(192.168.24.2)
  7. Nmap scan report for 192.168.24.3Nmap done: 4 IP addresses (2 hosts up) scanned in 0.01 seconds
复制代码


-sP(Ping扫描)

只使用Ping的方式判断主机存活。就和使用ping下令判断主机在线一样,如果有icmp回显那么nmap就认为其是存活的。



 图4.sP方式扫描

  1. ┌──(kali㉿kali)-[~]
  2. └─$ nmap -sP 192.168.24.1-100
  3. Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-26 23:14 EDT
  4. Nmap scan report for 192.168.24.1
  5. Host is up (0.0034s latency).
  6. Nmap scan report for 192.168.24.4
  7. Host is up (0.0021s latency).
  8. Nmap scan report for 192.168.24.6
  9. Host is up (0.0026s latency).
  10. Nmap scan report for 192.168.24.9
  11. Host is up (0.0027s latency).
  12. Nmap scan report for 192.168.24.10
  13. Host is up (0.0033s latency).
  14. Nmap scan report for 192.168.24.15
  15. Host is up (0.0025s latency).
  16. ...省略
复制代码


-P0 (无ping)、-Pn

如果对方关闭了icmp回显的功能,那么nmap会判断本主机不在线,同时后续的端口扫描等也不会进行,会给扫描结果带来干扰。
Windows下开关回显:


 图5.Windows系统可在防火墙规则开关icmp回显
 Linux关闭回显:

  1. #临时关闭
  2. echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  3. #永久
  4. echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
  5. sysctl -p
复制代码


 图6.ping测试下的icmp开关结果
 以是为了排除干扰,可以加上-P0参数,这样后续的端口扫描等操纵也不会被干扰。请注意,P0虽然可以更彻底的扫描,但是代价是如果该地址本就真的不存在设备或者设备不在线,那么将耗费大量的时间做无勤奋。
Windows主机上开启smb文件共享,确认开启445端口。并且是关闭的icmp回显。


图7.使用netstat检察端口监听情况
对于关闭icmp回显的设备,加不加-P0参数对扫描的结果有很大的影响。 


 图8.使用nmap 添加和不添加-P0的测试

 -PS[portlist] (TCP SYN Ping)

向目标主机的常用端口发送标记SYN=1的TCP握手报文,默认-PS不加参数时候会向常用的TCP端口发送SYN报文,并不需要建立TCP连接,只要有回应那么就说明主机在线的。在判断主机存活时候恣意还探测了开放的TCP端口。

图9.PS抓取报文的结果


  1. #PS不带参数
  2. nmap -PS 192.168.5.1/24
  3. #如果需要添加指定端口,比如你发现目标喜欢使用65522作为ssh端口,或者65000到65535这些都有可能,可以添加到扫描列表中,默认情况下预设的TCP端口也依旧会扫描
  4. nmap -PS65522,65000-65535 192.168.5.1/24
复制代码


-PA[portlist] (TCP ACK Ping)

-PA和PS其实是雷同的,向目标主机的常用端口发送TCP报文,只不过这次是ACK=1的TCP确认报文。重要是用于通过一些有防火墙防火墙,因为防火墙会依据SYN报文来识别TCP连接,比较容易暴露本身。
一般情况ACK和SYN一起发送结果比较好。
  1. nmap -PS -PA 192.168.5.1/24
复制代码

-PU[portlist] (UDP Ping)

前面-PS和PA都是基于TCP扫描,PU使则是使用UDP扫描,如果网络中TCP的SYN和ACK都被防火墙隔离了,那就使用UDP。 
  1. nmap -PU 192.168.5.1/24
复制代码

 -PR (ARP Ping)

TCP和UDP这些都是基于IP扫描,如果只需要扫描局域网内(同网段,不超过网关),可以使用ARP扫描,往往都不容易被察觉也比网络层扫描更可靠,当广播扣问IP的对应MAC地址时候,当有回应那么就认为主机在线。
  1. nmap -PR 192.168.5.1/24
复制代码

-n (不用域名剖析)



-R (为所有目标剖析域名)



端口扫描


-p <port ranges>指定目标端口

如果使用-p自定义范围。

  1. nmap -sS <strong>-p</strong> <strong>1-1024,3389,3306</strong> 192.168.5.1/24
复制代码

  1. nmap -sS -sU -p U:53,67,68,T:1-1024,3389,3306 192.168.5.1/24
复制代码

-F和--top-ports快速扫描

默认是使用常见的1000个端口作为目标,如果觉得不敷快也可以使用-F将使用最常见的100个端口作为目标。使用--top-ports也可以规定前几的端口为目标,-F相称于--top-ports 100的情况。
  1. # 使用-F扫描最常用的100端口
  2. nmap -F 192.168.5.1
  3. # 使用--top-ports 自定义扫描最长用的端口,比如最常用的500个端口
  4. nmap --top-ports 500 192.168.5.1
复制代码

-r次序端口扫描

一个小参数,设置了可以按次序扫描端口,默认情况是先扫常用端口再扫用户自定义的端口,其实意义不是那么大。

-sS (TCP SYN扫描)

此模式需要管理员(administrator或root)权限。
sS是最常用的扫描方式,不会建立完整的TCP连接,只发送SYN连接请求,以是速率很快,而且通常不会被扫描目标记载。

  1. nmap -sS -p 1-65535 192.168.5.1
复制代码

-sT (TCP connect()扫描)

sT需要建立完整的TCP连接,即三次握手。以是判断端口开放更可靠,但是很有大概会被记载下连接的日志。
默认情况下不加参数都是使用此方法作为端口扫描。
  1. nmap -sT 192.168.5.1
复制代码

-sU (UDP扫描)

此模式需要管理员(administrator或root)权限。
对UDP端口进行扫描,使用-sT、-sS都不扫描UDP端口,以是如果有需要扫描UDP那就务必加上此。当然也可以结合TCP扫描来使用。
其原理为想目标端口发送UDP探测包,等待相应,返回ICMP端口不可达(ICMP port unreachable)为端口关闭,等待超时则为端口被过滤
  1. sudo nmap -sS -sU -p U:53,67,68,161,162,T:1-65535 192.168.5.1/24
复制代码

-sN; -sF; -sX ;-sM (TCP Null扫描,TCP FIN扫描,Xmas扫描,TCP Maimon扫描)

此模式需要管理员(administrator或root)权限。
nmap发现TCP端口开放与否对不同标记位上TCP报文有不同回应,复兴RST报文则认为开放,超时则认为关闭或过滤。因为对于服务器来说这些TCP报文都是错误的,不包管所有端口的都可以正确的相应,但是这比SYN和整个TCP连接都要来得更埋伏。(不过我都没有效过啊)


-sA (TCP ACK扫描)

此模式需要管理员(administrator或root)权限。
 ACK扫描,将TCP报文标记位ACK=1,可以用于检测防火墙屏蔽了哪个端口,不过滤的主机端口反而啥也扫不出。
有空要补上图。因为我手机上并没有模拟出来结果啊。

-s0(IP协议扫描)

IP 协议扫描确定目标机支持哪些IP协议 (TCP,UDP,ICMP,IGMP等等)。从技术上说,这不是端口扫描 ,既然它遍历的是IP协议号,但是也可以使用-p来指定端口,只不过这个端口对应的是协议的号码。


图10.这里的数字不是代表端口,而是协议

-sI <zombie host[:probeport]> (空闲扫描)

僵尸主机也就是肉鸡,利用side-channel攻击,nmap对此端口进行扫描操纵,从而更加埋伏的进行扫描,若安全设备溯源也是溯源到肉鸡的IP。

  1. sudo nmap -sI 192.168.2.8:8080 192.168.2.1/24 -Pn
复制代码

-b <ftp relay host> (FTP弹跳扫描)

这个是利用FTP署理链接漏洞,允许用户连接到一台FTP服务器,然后要求文件送到一台第三方服务器。可以有效的隐藏本身。
 这里参数格式是-

  1. sudo nmap -sS ftp:123@192.168.1.1:21
复制代码

 版本探测和系统探测

不同服务也有不同版本,比如SNMP有v1、v2c、v3三种版本,SMB也有v1.0、v2.0、v3.0三种版本。不同的版本也有不同的特性,为此这些信息也是很紧张的内容。

-sV (版本探测)



-sR(RPC扫描)



-O (启用操纵系统探测)



-A(操纵系统探测和版本探测)



时间与性能、显示

因为nmap通常对整个进行扫描,倘若网段范围主机非常多,得当的添加参数调整参数会大大的节约时间。

-T <aranoid|Sneaky|Polite|Normal|Aggressive|Insane> (设置时间模板)

只要记着这个就可以了,因为够用了,其他时间选项其实更加过细的设置,T时间模板已经封装好。


--min-hostgroup <size>; --max-hostgroup <size> (调整并行扫描组的大小)

原来扫描结果需要末了才可以全部看到,但是可以设置组的大小,从而让当前组扫完就可以的看结果,如果组的大小定义为50,扫描50个主机扫描完成后可以得到陈诉(具体模式中的增补信息 除外)。
不过其实个人觉得-v或者-vv参数更有结果吧。

--scan-delay <milliseconds>; --max-scan-delay <milliseconds> (调整探测报文的时间间隔)

设置扫描包的发送间隔,单位ms。

--min-parallelism <numprobes>; --max-parallelism <numprobes> (调整探测报文的并行度)


--min-rtt-timeout <milliseconds>, --max-rtt-timeout <milliseconds>, --initial-rtt-timeout <milliseconds> (调整探测报文超时)


--host-timeout <milliseconds> (放弃低速目标主机)

跳过通讯差的主机,设置多少ms延迟才跳过。比如楼下蹭网的邻人,每一次扫描需要等待许久,非常消耗时间,干脆跳过。

防火墙/IDS躲避和哄骗


-D <decoy1 [,decoy2][,ME],...>(使用诱饵埋伏扫描)

使用诱饵隐藏扫描。即发送参杂着假ip的数据包检测。作为诱饵ip须在线。
使用逗号分隔每个诱饵主机,比如:
  1. sudo nmap -sS -D 192.168.1.1,192.168.2.1,192.168.3.1,192.168.5.1 192.168.5.2-254
复制代码

-S <IP_Address> (源地址哄骗)



--source-port <portnumber>; -g <portnumber> (源端口哄骗)

自定义源端口

--data-length <number> (发送报文时 附加随机数据)

默认时候发送的IP报文都是没有数据的空白报文,追加随机的数据可以减小被猜疑的大概,但是性能消耗会增长。

设置ttl,比如--ttl 255

--randomize-hosts (对目标主机的次序随机排列)


--spoof-mac <mac address,prefix,or vendor name> (MAC地址哄骗)

这个比较有趣,可以输入完整的mac地址,也可以输入前面3Byte的mac,也可以输入厂家的名字(使用自带库中的预设)。
比如 ----spoof-mac 01:01:01:01:22:1a,a20123,Cisco

输出

nmap可以将结果输出为文件,同时也可以共同--resume实现继承之前未完成的任务。

-oA <basename> (输出至所有格式)

输出以下的全部,当然如果不需要也可以恣意选择需要的:


-v (提高输出信息的具体度)



--packet-trace (跟踪发送和接收的报文)

要求Nmap打印发送和接收的每个报文的摘要,也可以方便初学者明白nmap工作原理。

--iflist (列举接口和路由)

用于分析路由,如果报文发送错误网卡可以使用-e来定义网卡接口,但是nmap中的命名是Linux那一套,在Windows要注意。



 图11.显示网卡和路由

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4