直接分享的笔记,格式可能部分不太兼容,见谅
Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具。Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。它会扫描远程在线主机,该主机的操作系统,包过滤器和开放的端口。
Nmap是一款网络扫描和主机检测的非常有用的工具。Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。
我将用两个不同的部分来涵盖大部分NMAP的使用方法,这是nmap关键的第一部分。在下面的设置中,我使用两台已关闭防火墙的服务器来测试Nmap命令的工作情况。
NMAP作为渗透测试网络探测利器,每个参数和用法,都有各自的优点,例如不完成三次握手探测主机,这样不容易被对方防火墙识别出。
-T4 加快执行速度
-v 显示过程详细信息
-F用于快速扫描最可能开放的100个端口
NMAP命令用法
nmap命令用法
nmap [Scan Type(s)] [Options] {target specification}
下面是NMAP的描述信息,我将会翻译
Nmap 7.91 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION: 目标发现
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iL
-iR
--exclude <host1[,host2][,host3],...>: Exclude hosts/networks 排除
--excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY: 主机发现
-sL: List Scan - simply list targets to scan 只列出扫描的主机
-sn: Ping Scan - disable port scan 禁止端口扫描
-Pn: Treat all hosts as online -- skip host discovery
-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
对给定的端口发现
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
--dns-servers <serv1[,serv2],...>: Specify custom DNS servers
--system-dns: Use OS's DNS resolver
--traceroute: Trace hop path to each host
SCAN TECHNIQUES: 扫描技术
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans 最常用的隐藏较好
-sU: UDP Scan UDP扫描
-sN/sF/sX: TCP Null, FIN, and Xmas scans
--scanflags
-sI <zombie host[:probeport]>: Idle scan
-sY/sZ: SCTP INIT/COOKIE-ECHO scans
-sO: IP protocol scan
-b
PORT SPECIFICATION AND SCAN ORDER: 端口扫面技术
-p
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports
-F: Fast mode - Scan fewer ports than the default scan 快速扫描
-r: Scan ports consecutively - don't randomize 连续扫描按顺序
--top-ports
--port-ratio
SERVICE/VERSION DETECTION: 服务版本检测
-sV: Probe open ports to determine service/version info 探测开端口的详细服务
--version-intensity
--version-light: Limit to most likely probes (intensity 2) 扫面强度
--version-all: Try every single probe (intensity 9) 尝试所有的可能性
--version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN: 脚本扫描
-sC: equivalent to --script=default 相当于-script=default
--script=
directories, script-files or script-categories
--script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
--script-args-file=filename: provide NSE script args in a file
--script-trace: Show all data sent and received 脚本跟踪显示
--script-updatedb: Update the script database.更新脚本库
--script-help=
script-categories. 脚本帮助信息的使用
OS DETECTION: 操作系统检测
-O: Enable OS detection
--osscan-limit: Limit OS detection to promising targets
--osscan-guess: Guess OS more aggressively 猜测更具有攻击性的操作系统
TIMING AND PERFORMANCE: 时间和性能
Options which take
namp扫面指定文件里面的IP地址
nmap -iL IPlist.txt
NMAP 关于--exclude排除不需要扫描的主机
nmap 192.168.60.* --exclude 192.168.60.100
扫描操作系统信息和路由跟踪
使用Nmap,你可以检测远程主机上运行的操作系统和版本。为了启用操作系统和版本检测,脚本扫描和路由跟踪功能,我们可以使用NMAP的“-A“选项。
nmap -A 192.168.60.111
Nmap的操作系统探测功能
使用选项“-O”和“-osscan-guess”也帮助探测操作系统信息。
nmap -O 192.168.60.96
nmap -osscan-guess 192.168.60.192
扫描主机侦测防火墙
下面的命令将扫描远程主机以探测该主机是否使用了包过滤器或防火墙。
nmap -sA 192.168.60.111
表示被防火墙过滤
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-22 17:09 ?D1ú±ê×?ê±??
Nmap scan report for oa.chinahab.com (IP)
Host is up (0.0050s latency).
All 1000 scanned ports on XXXX (IP) are filtered
Nmap done: 1 IP address (1 host up) scanned in 27.04 seconds
扫描主机检测是否有防火墙保护
扫描主机检测其是否受到数据包过滤软件或防火墙的保护。
nmap -Pn 192.168.0.101
主机发现被禁止扫描端口
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-22 17:14 ?D1ú±ê×?ê±??
Nmap scan report for xxxxx.com (IP)
Host is up (0.024s latency).
Not shown: 994 filtered ports 端口被过滤掉
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
81/tcp open hosts2-ns
82/tcp open xfer
113/tcp closed ident
443/tcp closed https
找出网络中的在线主机
使用“-sP”选项,我们可以简单的检测网络中有哪些在线主机,该选项会跳过端口扫描和其他一些检测。
nmap -sP 192.168.0.*
nmap -sP 192.168.60.0/24
显示结果是 在线主机IP地址 MAC地址和机器品牌
Nmap scan report for bogon (192.168.60.249)
Host is up (0.016s latency).
MAC Address: 8C:EC:4B:43:C8:3A (Dell)
Nmap scan report for bogon (192.168.60.254)
Host is up (0.010s latency).
MAC Address: 08:1F:71:26:0D:13 (Tp-link Technologies)
Nmap scan report for 192.168.60.192
Host is up.
Nmap done: 256 IP addresses (89 hosts up) scanned in 32.21 seconds
执行快速扫描
你可以使用“-F”选项执行一次快速扫描,仅扫描列在nmap-services文件中的端口而避开所有其它的端口。在nmap-services中写的是常用的端口。
nmap -F 192.168.60.192
.打印主机接口和路由
你可以使用nmap的“--iflist”选项检测主机接口和路由信息。
nmap --iflist
根据--iflist可以指定网口扫面。
nmap -e eth0 ip
另外可以使用Decoy(诱骗)方式来掩盖真实的扫描地址,例如-D ip1,ip2,ip3,ip4,ME,这样就会产生多个虚假的ip同时对目标机进行探测,其中ME代表本机的真实地址,这样对方的防火墙不容易识别出是扫描者的身份。
nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1
扫描特定的端口以及端口范围
使用Nmap扫描远程机器的端口有各种选项,你可以使用“-P”选项指定你想要扫描的端口,默认情况下nmap只扫描TCP端口。
扫描默认是的所有端口,常用端口前1000
nmap -p 192.168.60.192
-P扫描出所有的包含3306
nmap -P 3306 192.168.60.192
-p 只输出有3306的端口
nmap -p 8080 192.168.60.192
输入多个要探测的端口需要用逗号隔开
nmap -p 8080,80 192.168.60.192
扫描端口范围
nmap -p 8080-8088 192.168.60.92
Udp scan(sU)扫描TCP端口和UDP端口类型扫描
Udp scan(sU)顾名思义,这种扫描技术用来寻找目标主机打开的UDP端口.它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的.
扫描TCP类型的端口
nmap -p T:8080,80 192.168.60.192
扫面UDP类型的端口
n -sU 53 192.168.60.192
查找主机服务版本号
nmap -sV 192.168.60.192
使用TCP ACK (PA)和TCP Syn (PS)扫描远程主机
有时候包过滤防火墙会阻断标准的ICMP ping请求,在这种情况下,我们可以使用TCP ACK和TCP Syn方法来扫描远程主机。
nmap -PS 192.168.0.101
使用TCP ACK扫描远程主机上特定的端口
这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口
nmap -PA -p 22,80 192.168.60.192
使用TCP Syn扫描远程主机上特定的端口
Tcp SYN Scan (sS) 这是一个基本的扫描方式,它被称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.但是它需要root/administrator权限.
nmap -PS -p 22,80 192.168.60.92
执行一次隐蔽的扫描
Tcp SYN Scan (sS) 这是一个基本的扫描方式,它被称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.但是它需要root/administrator权限.
nmap -sS 192.168.0.101
使用TCP Syn扫描最常用的端口
Tcp connect() scan(sT)如果不选择SYN扫描,TCP connect()扫描就是默认的扫描模式.不同于Tcp SYN扫描,Tcp connect()扫描需要完成三次握手,并且要求调用系统的connect().Tcp connect()扫描技术只适用于找出TCP和UDP端口.
nmap -sT 192.168.60.192
执行TCP空扫描以骗过防火墙
nmap -sN 192.168.60.192
pingsacn(sP扫描)
PING扫描不同于其它的扫描方式,因为它只用于找出主机是否是存在在网络中的.它不是用来发现是否开放端口的.PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用.
nmap-sP 192.168.60.192
Idlescan(sL)发送探测
Idlescan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包.
nmap-sL 192.168.1.6 192.168.1.1
防火墙/IDS逃逸
选项解释-f报文分段–mtu指定偏移大小-DIP欺骗-sI源地址欺骗–source-port源端口欺骗–data-length指定发包长度–randomize-hosts目标主机随机排序–spoof-macMAC地址欺骗
报文分段
在Nmap使用-f选项时会将TCP头分段在几个包中,使得包过滤器、IDS以及其他工具的检测更加困难。Nmap在IP头后会将包分为8个字节或更小。
一些主机会禁止相应ICMP请求,对于这种情况就可以使用报文分段的方法来逃避目标防火墙的规则。
nmap -f -v 192.168.121.1
IP欺骗
在使用该选项对目标进行扫描的时候,会让目标主机误认为是在利用诱饵进行扫描,而不是一个真实的扫描,这样可以躲避防火墙和某些规则的限制,也可以达到隐藏自身的目的,这在实际的扫描中是非常有用的一个选项。
可以使用英文的逗号对每个诱饵主机进行分割,当然也要领会目标主机管理员的想法,他可能会认为该扫描使用的是诱饵主机进行的扫描,而不是真实的扫描地址,因此会忽略这次扫描,反而可以使用自己的真实IP去进行扫描,会达到欺骗目标主机管理员的目的,这样做时最好与诱饵主机交叉使用。
IP欺骗语法如下:
Nmap -D【decoy1,decoy2…|RND:number】【目标】
使用-D选项可以指定多个IP地址,或使用RND随机生成几个地址,在指定的诱饵之间使用逗号进行分割,需注意的是在进行版本检测或者TCP扫描的时候诱饵是无效的。
nmap -D RND:11 192.168.126.131
nmap -D 192.168.0.1,192.168.0.2,192.168.0.254 192.168.121.1
nmap -D 192.168.0.1,192.168.0.2,192.168.0.254,ME 192.168.121.1
注意:诱饵主机必须处于工作状态,否则会导致目标主机的syn洪水攻击。
源地址欺骗
使用-sI可以进行源地址欺骗,如果Nmap无法确定你的源地址,Nmap会给出相应的提示,我们使用该选项指定所需要发包的接口IP地址。
nmap -sI www.oa.com:80 192.168.126.131
源端口欺骗
使用–source-port选项就可以进行源端口欺骗,也可以使用-g,我们只需提供一个端口号,Nmap就可以从这些端口中发送数据,因为防火墙对服务器的设置会根据端口选择是否信任数据流,管理员可能会认为这些端口不会有攻击发生,可以利用这些端口进行扫描。
nmap --source-port 53 192.168.126.131
指定发包长度
通常情况下,TCP包时40个字节,ICMP Echo 有28个字节,所以在原来的报文基础上附加随机数据达到规避防火墙的效果。
nmap --data-length 30 192.168.126.131
MAC地址欺骗
使用–spoof-mac选项就可以进行MAC欺骗。冒失的指定一个MAC定制反而会引起管理员的怀疑,这时我们可以使用字符串“0”随机分配一个MAC地址。指定的MAC地址最好真实存在,这样才能起到欺骗效果。
–spoof-mac选项可以使用 的参数包括0、MAC Address、Vendor Name。0表示随机生成一个MAC地址,MAC Address表示用户手动指定一个MAC地址,Vendor Name表示从指定的厂商生成一个MAC地址。
nmap -sT -PN --spoof-mac 0 192.126.131
Nmap技巧
nmap中不常用但是却非常有用的选项。
选项解释–send-eth发送以太网数据包–send-ip网络层发送–privileged假定拥有所有权–interactive在交互模式中启动-d设置调试级别–packet-trace跟踪发送接受的报文-iflist列举接口和路由-e指定网络接口-oG继续中断扫描firewalk探测防火墙vmauthd-bruteVM认证破解
探测防火墙
在Nmap的firewalk脚本通过发送一个请求并分析TTL值,可以探测防火墙的规则。
nmap --script=firewalk --traceroute 192.168.131.1
VMWare认证破解
Nmap中的vmauthd-brute脚本可以破解安装虚拟机系统的用户名与密码。
nmap -p 902 --script vmauthd-brute 192.168.121.1
FIN扫描
然后可以利用FIN扫描方式探测防火墙状态。FIN扫描方式用于识别端口是否关闭,收到RST回复说明该端口关闭,否则说明是open或filtered状态。
nmap -sF -T4 192.168.60.192
举例:
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-23 11:03 ?D1ú±ê×?ê±??
Nmap scan report for tophub.today (101.32.29.92)
Host is up (0.060s latency).
All 1000 scanned ports on tophub.today (101.32.29.92) are open|filtered
Nmap done: 1 IP address (1 host up) scanned in 64.23 seconds
Window扫描
当然也可以利用Window扫描方式,得出一些端口信息,可以与之前扫描分析的结果相互补充。Window扫描方式只对某些TCPIP协议栈才有效。
window扫描原理与ACK类似,发送ACK包探测目标端口,对回复的RST包中的Window size进行解析。在某些TCPIP协议栈实现中,关闭的端口在RST中会将Window size设置为0;而开放的端口将Window size设置成非0的值。
nmap -sW -p- -T4 192.168.60.192
扫描路由器
Nmap内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备。
扫描思科路由器
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16
思科路由器会在上述端口中运行了常见的服务。列举出上述端口开放的主机,可以定位到路由器设备可能的IP地址及端口状态。
扫描路由器TFTP
nmap –sU –p69 –nvv target
大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。
扫描路由器操作系统
与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。
nmap -O -F -n 192.168.1.1
扫描互联网
Nmap内部的设计非常强大灵活,既能扫描单个主机、小型的局域网,也可以扫描成千上万台主机从中发掘用户关注的信息。扫描大量主机,需要对扫描时序等参数进行仔细的优化。
发现互联网上web服务器
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt
随机地产生10万个IP地址,对其80端口进行扫描。将扫描结果以greppable(可用grep命令提取)格式输出到nmap.txt文件。
可以使用grep命令从输出文件提取关心的细节信息。
统计互联网主机基本数据
Nmap的创始人Fyodor在2008年的Black Hat大会发表一篇演讲,讲的是如何使用Nmap来扫描互联网(Nmap: Scanning the Internet),资料地址:http://nmap.org/presentations/BHDC08/。
Fyodor进行互联网扫描的初衷是统计出网络经验数据并用之优化Nmap的性能。例如,根据统计出每个端口开放的概率,优先扫描常见端口,以节省用户的时间
产生随机IP地址
产生100万个随机的IP地址,并将之保存到文件中,方便后续扫描时作为参数输入。
nmap -iR 1200000 -sL -n | grep ”not scanned” | awk ’{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp
上述命令含义:随机生成1200000个IP地址(-iR 120000),并进行列表扫描(-sL,列举出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行(grep “not scanned”),打印出每一行的第二列内容(awk ‘{print $2}’,也就是IP地址),然后对获取到的IP地址进行排序(sort -n),然后剔除重复IP地址,将结果保存到临时文件tp,再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中,删除 临时文件。
总之,此处产生了1000000个随机IP地址存放在tcp-allports-1M-IPs文件中。
优化主机发现
nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs
上述命令进行主机发现:使用产生的IP地址(-iL tcp-allports-1M-IPs),指定发送包的源端口为53(–source-port 53,该端口是DNS查询端口,一般的防火墙都允许来自此端口的数据包),时序级别为4(-T4,探测速度比较快),以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口,以TCP ACK包方式探测对方80,113,443,10042端口,另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复,就可以证明目标主机在线。
完整的扫描命令
在准备了必要的IP地址文件,并对主机发现参数优化后,我们就得到最终的扫描命令:
nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300
上述命令用于扫描互联网上100万台主机全部的TCP端口的开放情况。
使用包含100万个IP地址的文件(-iL tcp-allports-1M-IPs),源端IP地址设置为srcip(指定一个IP地址,保证该IP地址位于统一局域网中,否则无法收到目标机的回 复包),主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443,扫描过程将随机打乱主机顺序(–randomize-hosts,因为文件中的IP 已经排序,这里将之打乱,避免被防火墙检查出),端口扫描过程检查全部的TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度比较 快),将结果以XML/grepable/普通格式输出到文件中(-oA logs/tcp-allports-%T-%D,其中%T表示扫描时间,%D表示扫描日期)。
-d表示打印调试出信息。
–max-scan-delay 10表示发包最多延时10秒,防止特殊情景下等待过长的时间。
–max-retries 1,表示端口扫描探测包最多被重传一次,防止Nmap在没有收到回复的情况下多次重传探测包,当然这样也会降低探测的准确性。
–min-host-group 256表示进行端口扫描与版本侦测时,同时进行探测的主机的数量,这里至少256个主机一组来进行扫描,可以加快扫描速度。
–min-rate 175和–max-rate 300,表示发包速率介于175和300之间,保证扫描速度不会太慢,也不会因为速率过高引起目标机的警觉。
扫描结果
Fyodor组织的此次扫描得出很多重要结论,统计出了互联网最有可能开放的10个TCP端口。
80 (http)
23 (telnet)
22 (ssh)
443 (https)
3389 (ms-term-serv)
445 (microsoft-ds)
139 (netbios-ssn)
21 (ftp)
135 (msrpc)
25 (smtp)
最有可能开放的10个UDP端口。
137 (netbios-ns)
161 (snmp)
1434 (ms-sql-m)
123 (ntp)
138 (netbios-dgm)
445 (microsoft-ds)
135 (msrpc)
67 (dhcps)
139 (netbios-ssn)
53 (domain
扫描Web站点
Web是互联网上最广泛的应用,而且越来越多的服务倾向于以Web形式提供出来,所以对Web安全监管也越来越重要。目前安全领域有很多专门的 Web扫描软件(如AppScan、WebInspect、W3AF),能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款 开源的端口扫描器,对Web扫描方面支持也越来越强大,可以完成Web基本的信息探测:服务器版本、支持的Method、是否包含典型漏洞。功能已经远远 超过同领域的其他开源软件,如HTTPrint、Httsquash。
目前Nmap中对Web的支持主要通过Lua脚本来实现,NSE脚本库中共有50多个HTTP相关的脚本。
扫描实例:
nmap -sV -p 80 -T4 –script http*,defaultscanme.nmap.org
上面以扫描scanme.nmap.org的Web应用展示Nmap提供Web扫描能力,从图中可以看到扫描结果中提供了比较丰富的信息。
首先是应用程序及版本:Apachehttpd 2.2.14 (Ubuntu)
然后搜出了该站点的affiliate-id:该ID可用于识别同一拥有者的不同页面。
然后输出HTTP-headers信息,从中查看到基本配置信息。
从http-title中,可以看到网页标题。某些网页标题可能会泄漏重要信息,所以这里也应对其检查。