一、Nmap
在侦查期间,扫描一直是信息收集的初始阶段。
什么是侦查
侦查是尽可能多收集关于目标网络的信息。从黑客的角度来看,信息收集对于一次攻击非常有用,所以为了封锁恶意的企图,渗透测试者通常尽力查找这些信息,发现后修复这个缺陷。这也被叫做踩点。通过信息收集,人们通常会发现如下类型的信息:
- E-mail 地址
- 端口号/协议
- 操作系统信息
- 运行的服务
- Traceroute 信息/DNS 信息
- 防火墙标识和绕过
- 其他
所以对于信息收集,扫面是第一个部分。在扫面阶段,Nmap对于发现开放端口,协议号,操作系统信息,防火墙信息等是一个非常有用的工具。
Nmap 介绍
Nmap (网络映射器)是一个开源工具,它使网络探测和安全审计得以专业化。最初由 Gordon “Fyodor” Lyon 发布。官网官方网站是http://nmap.org. Nmap是一个免费的用来实现网络探测和安全审计的开源程序。许多系统和网络管理员发现它对于一些日常的工作也有帮助。例如查看整个网络的信息,管理服务升级计划以及监控主机和服务的正常运行。
Nmap采用一种新颖的方式利用原始IP包来决定网络上是什么样的主机,这些主机提供什么样的服务(应用程序名和版本),它们运行着什么样的操作系统(操作系统版本)它们使用什么类型的过滤器/防火墙以及许多其他的特征。它虽然被设计用来快速扫描大型网络,但是在单个主机上也会工作的非常好。Nmap可以运行在所有的主流计算机操作系统上,Linux,Windows,Mac OS X都可以找到官方的安装包。
官方中文文档地址:http://www.nmap.com.cn/
主要包含以下功能
- 主机发现
- 端口扫描
- 服务和版本探测
- 操作系统探测
- 防火墙/IDS躲避和哄骗
- 输出
1、扫描目标说明
1)单个ipv4目标:输入一个目标ip地址或主机名
2)批量ipv4目标:使用CIDR标志位:/<numbit>代表批量目录或整个网络相邻主机,如192.168.10.0/24将会扫描192.168.10.0 (二进制格式: 11000000 10101000 00001010 00000000)和192.168.10.255 (二进制格式: 11000000 10101000 00001010 11111111)之间的256台主机。
3)批量ipv4目标:使用八位字节范围标示,如192.168.0-255.1-254,过滤掉0 255广播ip
4)IPv6地址目标:只能用规范的IPv6地址或主机名指定
2、主机发现
使用各种方式发现活动的主机 感兴趣的主机
1)-sL 列表扫描:可以对主机进行反向域名解析,校验ip或域名是否存在
nmap -sL 192.168.2.0/24或www.baidu.com/24
2)-sP ping扫描:使用ping主机,得出可响应的主机列表
nmap -sP 192.168.2.0/24或www.baidu.com/24
3)-P0 (无ping):高强度的扫描时用它确定正在运行的机器, 默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描,版本探测,或者操作系统探测。
nmap -P0 192.168.8.111
4)-PS [portlist] (TCP SYN Ping):发送一个设置了SYN标志位的空TCP报文,尝试建立连接,成功返回报文up以及运行信息,失败返回down;
nmap -PS 192.168.8.118
5)-PA [portlist] (TCP ACK Ping):发送一个设置了ACK标志位的空TCP报文,尝试建立连接,成功返回报文up以及运行信息,失败返回down;
nmap -PA 192.168.8.118
6) -PU [portlist] (UDP Ping):它发送一个空的UDP报文,返回响应报文up以及运行信息,失败返回down;
nmap -PU 192.168.8.118
7)-PE; -PP; -PM (ICMP Ping Types):发送一个ICMP type 8 (回声请求)报文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应)报文。
nmap -PE 192.168.8.118
8)-PR (ARP Ping):同一个局域网内,当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping报文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。
nmap -PR 192.168.2.118
3、端口扫描
端口扫描
端口状态:扫描之后,你可能会看到一些端口状态如 open(开放的),filtered(被过滤的),closed(关闭的)等等。
- Open(开放的): 应用程序正在这个端口上监听连接。
- Closed(关闭的): 端口对探测做出了响应,但是现在没有应用程序在监听这个端口。
- Filtered(过滤的): 端口没有对探测做出响应。同时告诉我们探针可能被一些过滤器(防火墙)终止了。
- Unfiltered(未被过滤的):端口对探测做出了响应,但是Nmap无法确定它们是关闭还是开放。
- Open/Filtered: 端口被过滤或者是开放的,Nmap无法做出判断。
- Closed/Filtered: 端口被过滤或者是关闭的,Nmap无法做出判断。
1)-sS (TCP SYN扫描): 被称为半开放扫描, 因为它不打开一个完全的TCP连接。 SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。
nmap -sS 192.168.2.118
2)-sT (TCP connect()扫描):Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。
3)-sU (UDP扫描):UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的).
4)-sN; -sF; -sX (TCP Null,FIN,and Xmas扫描):
识别系统
Scanning Format:
nmap -O -Pn [IP or domain]
使用
-O
选项,可以获取到被扫描的主机的系统。-Pn
选项禁用 Nmap 网络发现功能,假定所有系统都是活动的
Timing 模板
timing
参数可以指定 nmap 扫描的速度。其中各个选项如下:
- T0 => paranoid 慢速网络扫描,串行扫描,两次扫描间隔
5 分钟
。扫描速度极慢。 - T1 => Sneky 慢速网络扫描,串行扫描,两次扫描间隔
15 秒
,扫描速度较慢。 - T2 => Polite 中速网络扫描,串行扫描,两次扫描间隔
400 毫秒
,扫描速度慢。 - T3 => Normal 中速网络扫描,并行扫描,两次扫描间隔
0 秒
,扫描速度正常。 - T4 => Aggressive 快速网络扫描,并行扫描,两次扫描间隔
0 秒
,扫描速度较快。 - T5 => Normal 快速网络扫描,并行扫描,两次扫描间隔
0 秒
,扫描速度极快。
Scanning Format:
nmap -T[0-5] [IP or domain]
扫描方式
TCP 扫描
端口扫描中最稳定的,利用的是 TCP 三次握手。TCP 扫描通常用于收集有关目标的更多信息,但是会和目标主机建立一个完成的 TCP 连接。
Scanning Format:
nmap -sT -Pn [IP or domain]
-sT
TCP 连接扫描(s
==> 哪种类型扫描;T
==> TCP 类型)
SYN 扫描
TCP 两次握手(隐藏扫描,速度快,nmap 缺省参数)
Scanning Format:
nmap -sS -Pn [IP or domain]
-sS
SYN 连接扫描(s
==> 哪种类型扫描;S
==> SYN 类型)
ACK 扫描
ACK 扫描,用于确定 TCP 端口是否被防火墙过滤。
Scanning Format:
nmap -sA -Pn [IP or domain]
-sA
ACK 连接扫描(s
==> 哪种类型扫描;A
==> ACK 类型)
UDP 扫描
DHCP,DNS,SNMP,TFTP 等都使用了 UDP 协议;UDP 扫描会评估目标系统上的 UDP 端口,可以确认 UDP 端口是开放还是被防火墙过滤。
Scanning Format:
nmap -sU -Pn [IP or domain]
-sU
UDP 连接扫描(s
==> 哪种类型扫描;U
==> UDP 类型)-sV
UDP 扫描中添加版本扫描信息(V
==> 版本信息)
不存在-Pn
参数(从 UDP 协议去理解,你发了就 ok 管他收没收到)
扫描 IP 段
For Example:
nmap 192.168.1.1-255 # 扫描 192.168.1.1-192.168.1.255 所有 IP
nmap 192.168.1.1/24 # 扫描 192.168.1.1-192.168.1.255 所有 IP
nmap -iL IPL.txt # 扫描 IPL.txt 中保存的所有 IP
输出保存选项
- -oN => 保存为文本文件
- -oX => 保存为 XML 文件
- -oG => 保存为 GREPable 输出
- -oS => 脚本输出
其他更详细的扫描
Nmap 扫描策略
# 适用所有大小网络最好的 nmap 扫描策略
# 主机发现,生成存活主机列表
nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt
# 端口发现,发现大部分常用端口
# https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt
# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt
# 显示 TCP\UDP 端口
grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'
# 侦测服务版本
nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt
# 扫做系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt
# 系统和服务检测
nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt
# 扫描 B 段的存活主机
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."
Nmap 躲避防火墙
# 分段
nmap -f
# 修改默认 MTU 大小,但必须为 8 的倍数(8,16,24,32 等等)
nmap --mtu 24
# 生成随机数量的欺骗
nmap -D RND:10 [target]
# 手动指定欺骗使用的 IP
nmap -D decoy1,decoy2,decoy3 etc.
# 僵尸网络扫描, 首先需要找到僵尸网络的IP
nmap -sI [Zombie IP] [Target IP]
# 指定源端口号
nmap --source-port 80 IP
# 在每个扫描数据包后追加随机数量的数据
nmap --data-length 25 IP
# MAC 地址欺骗,可以生成不同主机的 MAC 地址
nmap --spoof-mac Dell/Apple/3Com IP
LANG-BASH | COPY
Nmap 进行 Web 漏洞扫描
cd /usr/share/nmap/scripts/
wget https://www.computec.ch/projekte/vulscan/download/nmap_nse_vulscan-2.0.tar.gz && tar xzf nmap_nse_vulscan-2.0.tar.gz
nmap -sS -sV --script=vulscan/vulscan.nse target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv target
nmap -sS -sV --script=vulscan/vulscan.nse –script-args vulscandb=scipvuldb.csv -p80 target
nmap -PN -sS -sV --script=vulscan –script-args vulscancorrelation=1 -p80 target
nmap -sV --script=vuln target
nmap -PN -sS -sV --script=all –script-args vulscancorrelation=1 target
Nmap 端口扫描
# 使用诱饵隐蔽扫描 nmap -D RND:10 [target] (生成随机数量的诱饵)
# fargement
# data packed – like orginal one not scan packet
# 使用 auxiliary/scanner/ip/ipidseq 来在僵尸网络中查找IP并使用这些IP进行扫描 — nmap -sI ip target
# nmap –source-port 53 target
nmap -sS -sV -D IP1,IP2,IP3,IP4,IP5 -f –mtu=24 –data-length=1337 -T2 target (随机使用不同的IP进行扫描)
nmap -Pn -T2 -sV –randomize-hosts IP1,IP2
nmap –script smb-check-vulns.nse -p445 target (使用 NSE 脚本)
nmap -sU -P0 -T Aggressive -p123 target (攻击式扫描 T1-T5)
nmap -sA -PN -sN target
nmap -sS -sV -T5 -F -A -O target (版本检测)
nmap -sU -v target (Udp)
nmap -sU -P0 (Udp)
nmap -sC 192.168.31.10-12 (全部使用默认配置)
示例扫描
示例一:SYN 扫描
For Example:
nmap -sS -T5 192.168.199.133
LANG-BASH | COPY
示例二:基础信息扫描
For Example:
nmap -O 192.168.199.133
LANG-BASH | COPY
示例三:详细信息扫描
For Example:
nmap -A 192.168.199.133
LANG-BASH | COPY
示例四:网段扫描
For Example:
nmap -T5 192.168.1.103-110
LANG-BASH | COPY
# 适用所有大小网络最好的 nmap 扫描策略
# 主机发现,生成存活主机列表
nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt
# 端口发现,发现大部分常用端口
# https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt
# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt
# 显示 TCP\UDP 端口
grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'
# 侦测服务版本
nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt
# 扫做系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt
# 系统和服务检测
nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt
# 扫描 B 段的存活主机
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."
# 适用所有大小网络最好的 nmap 扫描策略
# 主机发现,生成存活主机列表
nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt
# 端口发现,发现大部分常用端口
# https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt
# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt
# 显示 TCP\UDP 端口
grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'
# 侦测服务版本
nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt
# 扫做系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt
# 系统和服务检测
nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt
# 扫描 B 段的存活主机
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."
# 适用所有大小网络最好的 nmap 扫描策略
# 主机发现,生成存活主机列表
nmap -sn -T4 -oG Discovery.gnmap 192.168.56.0/24
grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt
# 端口发现,发现大部分常用端口
# https//nmap.org/presentations/BHDC08/bhdc08-slides-fyodor.pdf
nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txt
nmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt
# 端口发现,发现全部端口,但 UDP 端口的扫描会非常慢
nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt
nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt
# 显示 TCP\UDP 端口
grep "open" FullTCP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "T:"$0}'
grep "open" FullUDP|cut -f 1 -d ' ' | sort -nu | cut -f 1 -d '/' |xargs | sed 's/ /,/g'|awk '{print "U:"$0}'
# 侦测服务版本
nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txt
# 扫做系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txt
# 系统和服务检测
nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt
# 扫描 B 段的存活主机
nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 172.16.0.0/16 | grep -v down | grep "172.16."