识别操作系统:
在确定目标主机在线后,应当识别他们使用的操作系统,这个阶段的工作称为识别操作系统(也称为操作系统指纹识别),识别操作系统的的方式分为两种:主动式和被动式。
主动式识别工具向目标机器发送数据包,并根据目标的响应确定其使用的操作系统,这种方式的优点在于探测速度快,缺点是目标主机可能会发现我们探测操作系统的行为。
被动式操作系统识别方法克服了主动式识别方法的缺点,缺点是比主动式识别速度慢。
(例如Linux的ping数据包是默认64字节、windows主机的ping数据包默认32字节,而windows的TTL默认128,Linux版本不同,TTL也有所不同)
p0f:
nmap:
nmap是一款非常受欢迎的功能强大的端口扫描程序,它还能够识别操作系统,能够进行主动式的操作系统指纹识别,详细参数使用- h选项
#nmap -O 58.251.81.43
◆服务枚举:这一阶段根据前面各个阶段的成果,进一步找出目标系统中所有开放的端口,一旦找到所有开放的端口,就可以通过这些端口来列出目标系统上运行的服务,有很多扫描端口的技术,如全开(full-open)扫描、半开(half-open)扫描、隐蔽式(stealth)扫描等。这些技术都可以用来检测端口的开放情况,甚至可以扫描处于防火墙或者入侵检测系统保护下的主机。主机上开放的端口都有相应的服务程序,对这些信息进行深度分析之后,可以进一步发掘目标网络基础设施中可能存在的漏洞。因此,这个阶段为以后的测试工作打下了基础,有助于测试人员继而发现各种网络设备上可能会造成严重危害的安全漏洞。
服务枚举:
服务枚举是一种数据采集工作,用于获取目标主机开放端口、操作系统和网络服务等有关信息,渗透人员通常会首先识别出在线的目标主机,然后在进行服务枚举,在实际渗透测试中,此阶段的工作属于探测过程的一部分。
▶ 端口扫描,及其端口扫描工具所支持的扫描类型
端口扫描:端口扫描是一种确定目标主机TCP端口和UDP端口状态的方法。主机开放了某个端口,就意味着它在这个端口提供某种网络服务,如果某个端口处于关闭状态,则说明主机在这个端口上并没有提供网络服务。
在确定某端口处于开放状态之后,攻击人员就会检查在该端口提供相应服务的程序版本,以判断这个版本的程序是否存在漏洞。
▶ 端口扫描工具
服务枚举是在特定主机、特定端口上识别服务端程序版本的的方法,有了服务器端软件版本的信息,测试人员就可以查找该版本上存在的安全漏洞。
nmap :
具备如下功能 :
- 主机探测
#nmap 211.67.191.6 不加任何选项的的输出结果如图
-O(大写选项 识别目标系统主机操作系统)
Nmap可识别出的6种端口状态:
▪ 开放
▪ 关闭
▪ 过滤 :不确定该端口是否开放,包过滤设备屏蔽了我们向目标
发送的探测包
▪ 为过滤
▪ 打开 | 过滤 :可能由于防火墙丢弃数据包造成
▪ 关闭 | 过滤
1. 制定扫描目标
Namp把指令中选项和参数以外的内容均当作目标主机来处理,建议使用时以主机IP地址而非主机名的形式制定目标主机,以IP地址的形式指定目标主机,Namp就不必在扫描前进行DNS解析,这样可以提高端口扫描的速度。
▫ 单个主机
▫ CIDR网段
▫ 多个目标主机
▫ 十进制的IP区间 例:192.168.2-4,6.1 192.168.2.1、
192.168.3.1、192.168.4.1和192.168.6.1
#nmap -il
-il (inputfilename)选项,令nmap程序从指定的文本文件中读取目标主机的清单。当需要从其他程序的运行结果里导出IP地址给Namp使用时,这个功能就十分有用。
2. TCP扫描选项
只有操作系统的高权限用户才能使用Namp多选项,程序需要相应的权限才能发送和接受原始数据包,默认情况下,Namp会采用TCP SYN扫描。在权限不足的情况下,Namp将进行TCP连接扫描,Namp程序支持的扫描方式分别如下:
▪ TCP连接扫描(-sT):指定这个选项后,程序将和目标主机的目标主机的每个端口都进行完整的三次握手。如果成功建立连接,则判断该端口是开放端口,由于在检测每个端口的时都需要进行三次握手,所以这种扫描方式比较慢,而且扫描行为很可能被目标主机记录下来。如果启动Namp的用户权限不足,那么默认情况下Namp程序以这种模式进行扫描。
▪ SYN扫描(-sS):该选项也称为半开连接或者SYN stealth。采用该选项后,Nmap将使用 含有SYN标志位的数据包进行端口探测。如果目标主机回复了SYN/ACK包,则说明该端口处 于开放状态:如果回复的是RST/ACK包,则说明这个端口处于关闭状态;如果没有任何响应 或者发送了ICMP unreachable信息,则可认为这个端口被屏蔽了。SYN模式的扫描速度非常 好。而且由于这种模式不会进行三次握手,所以是一种十分隐蔽的扫描方式。如果启动Nmap 的用户有高级别权限,那么在默认情况下Nmap程序将以这种模式进行扫描。
▪ TCP NULL( -sN )、FIN( -sF ) )及XMAS(-sX)扫描:NULL扫描不设置任何控制位; FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回 了含有 RST 标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应, 则该端口处于打开|过滤状态。
▪ TCP Maimon扫描(-sM):Uriel Maimon 首先发现了TCP Maimom扫描方式。这种模式的 探测数据包含有FIN/ACK标识。对于BSD衍生出来的各种操作系统来说,如果被测端口处于 开放状态,主机将会丢弃这种探测数据包;如果被测端口处于关闭状态,那么主机将会回复 RST。
▪ TCPACK 扫描(-sA):这种扫描模式可以检测目标系统是否采用了数据包状态监测技术 (stateful)防火墙,并能确定哪些端口被防火墙屏蔽。这种类型的数据包只有一个ACK标识 位。如果目标主机的回复中含有RST标识,则说明目标主机没有被过滤。
▪ TCP 窗口扫描(-sW):这种扫描方式检测目标返回的RST数据包的TCP窗口字段。如果目标端口处于开放状态,这个字段的值将是正值;否则它的值应当是0。
▪ TCP Idle 扫描(-sI):采用这种技术后,您将通过指定的僵尸主机发送扫描数据包。本机并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。
Nmap的scanflags选项可设定自定义的TCP扫描方式。这个选项的参数可以用数字表示(例 如,9代表PSH和FIN标识)。这个选项也支持标识位的符号缩写。在使用符号缩写时,仅需 要将URG、ACK、PSH、RST、SYN、FIN、ECE、CWR、ALL和NONE以任意顺序进行组 合。例如:--scanflags URGACKPSH 将设置URG、ACK 和PSH 标识位。
3. UDP扫描选项
Nmap有多种TCP扫描方式,而UDP扫描仅有一种扫描方式(-sU)。虽然UDP扫描结果没有 TCP扫描结果的可靠度高,但渗透测试人员不能因此而轻视UDP扫描,毕竟UDP端口代表着 可能会有价值的服务端程序。
UDP扫描的最大问题是性能问题。由干Linux内核限制1秒内最多发送一次ICMP Port Unreachable信息。按照这个速度,对一台主机的65536个UDP端口进行完整扫描,总耗时必 定会超过18个小时。
改善扫描速度的方式主要有:
● 进行并发的UDP 扫描;
● 优先扫描常用端口;
● 在防火墙后面扫描;
● 启用--host-timeout 选项以跳过响应过慢的主机。
4. 目标端口选项
默认情况下,Nmap将从每个协议的常用端口中随机选择1000个端口进行扫描。其nmapservices文件对端口的命中率进行了排名。如需更改端口配置,可使用Nmap的以下几个选项。
● -p端口范围:只扫描指定的端口。扫描1〜1024号端口,可设定该选项为–p 1-1024。扫描1 〜65535端口时,可使用-p-选项。
● -F(快速扫描):将仅扫描100 个常用端口。
● -r(顺序扫描):指定这个选项后,程序将从按照从小到大的顺序扫描端口。
● --top-ports <1 or="" greater="">:扫描 nmap- services 里排名前N 的端口。
以NULL方式扫描目标主机的22、25端口的指令如下所示。
nmap -sN -p 22,25 192.168.56.103
5. 输出选项
Nmap可以把扫描结果保存为外部文件。在需要使用其他工具处理Nmap的扫描结果时,这一 功能十分有用。
即使您设定程序把扫描结果保存为文件,Nmap还是会在屏幕上显示扫描结果。
Nmap支持以下几种输出形式。
● 交互(屏幕)输出:Nmap把扫描结果发送到标准输出设备上(通常为终端/控制台),这是 默认的输出方式。
● 正常输出(-oN):与交互输出类似,但是不显示runtime 信息和警告信息。
● XML 文件(-oX):生成的 XML 格式文件可以转换成 HTML 格式文件,还可被Nmap 的图 形用户界面解析,也便于导入数据库。本文建议您尽量将扫描结果输出为XML文件。
● 生成便于Grep使用的文件(-oG):虽然这种文件格式已经过时,但仍然很受欢迎。这种格 式的文件,其内容由注释(由#开始)和信息行组成。信息行包含6个字段,每个字段的字段 名称和字段值以冒号分割,字段之间使用制表符隔开。这些字段的名称分别为Host、Ports、 Protocols、Ignored State、OS、Seq Index、IP ID Seq 和 Status。这种格式的文件便于 grep 或 awk 之类的 UNIX 指令整理扫描结果。
还可以通过-oA选项,让Nmap程序把扫描结果同时以三种形式(正常输出、XML文件和便于 Grep使用的文件)进行输出。
如需把保存扫描结果保存为XML文件(myscan.xml),可使用下述指令。
nmap 192.168.56.103 -oX myscan.xml
因为 HTML 格式的文件比 XML 格式的文件更易于阅读,所以我们通常会把 XML格式文件转 换成HTML格式文件。我们可使用xsltproc进行这种格式转换。该程序的用法如下。
xsltproc myscan.xml -o myscan.html
6. 时间排程控制选项
Nmap可通过-T选项指定时间排程控制的模式。它有6种扫描模式。
● paranoid(0):每5分钟发送一次数据包,且不会以并行方式同时发送多组数据。这种模式 的扫描不会被IDS检测到。
● sneaky(1):每隔15秒发送一个数据包,且不会以并行方式同时发送多组数据。
● polite(2):每0.4 秒发送一个数据包,且不会以并行方式同时发送多组数据。
● normal(3):此模式同时向多个目标发送多个数据包,为 Nmap 默认的模式,该模式能自 动在扫描时间和网络负载之间进行平衡。
● aggressive(4):在这种模式下,Nmap 对每个既定的主机只扫描5 分钟,然后扫描下一 台主机。它等待响应的时间不超过1.25秒。
● insane(5):在这种模式下,Nmap 对每个既定的主机仅扫描75 秒,然后扫描下一台主 机。它等待响应的时间不超过0.3秒。
经验表明,默认的扫描模式通常都没有问题。除非您想要进行更隐匿或更快速的扫 描,否则没有必要调整这一选项。
7. 常用选项
操作系统检测 -O
禁用主机检测 -Pn
如果主机屏蔽了ping请求,Nmap可能会认为该主机没有开机。这将使得Nmap无法进行进一 步检测,比如端口扫描、服务版本识别和操作系统识别等探测工作。为了克服这一问题,就 需要禁用Nmap的主机检测功能。在指定这个选项之后,Nmap会认为目标主机已经开机并会 进行全套的检测工作。
如需启用这一功能,就要指定Nmap的–Pn选项。
强力检测选项 -A
启用-A选项之后,Nmap将检测目标主机的下述信息:
● 服务版本识别(-sV);
● 操作系统识别(-O);
● 脚本扫描(-sC);
● Traceroute(--traceroute)。
-服务版本识别(-sV)
-操作系统检测(-O)
-脚本扫描 (-sC)→默认脚本
8. 扫描IPv6主机
- 6 ipv6地址
9. 脚本引擎
Nmap 本身就是功能强大的网络探测工具。而它的脚本引擎功能( Nmap Scripting Engine, NSE)更让 Nmap 如虎添翼。NSE 可使用户的各种网络检査工作更为自动化,有助于识别应 用程序中新发现的漏洞、检测程序版本等Nmap原本不具有的功能。虽然Nmap软件包具有各 种功能的脚本,但是为了满足用户的特定需求,它还支持用户撰写自定义脚本。
NSE自带的脚本由Lua语言(http://www.lua.org)编写。这些脚本可以分成12个类别。
● auth:此类脚本使用暴力**等技术找出目标系统上的认证信息。
● default:启用--sC 或者-A 选项时运行此类脚本。这类脚本同时具有下述特点:
▪ 执行速度快;
▪ 输出的信息有指导下一步操作的价值;
▪ 输出信息内容丰富、形式简洁;
▪ 必须可靠;
▪ 不会侵入目标系统;
▪ 能泄露信息给第三方。
● discovery:该类脚本用于探索网络。
● dos:该类脚本可能使目标系统拒绝服务,请谨慎使用。
● exploit:该类脚本利用目标系统的安全漏洞。在运行这类脚 本之前,渗透测试人员需要获取 被测单位的行动许可。
● external:该类脚本可能泄露信息给第三方。
● fuzzer:该类脚本用于对目标系统进行模糊测试。
● instrusive:该类脚本可能导致目标系统崩溃,或耗尽目标系统的所有资源。
● malware:该类脚本检査目标系统上是否存在恶意软件或后门。
● safe:该类脚本不会导致目标服务崩溃、拒绝服务且不利用漏洞。
● version:配合版本检测选项(-sV),这类脚本对目标系统的服务程序进行深入的版本检测。
● vuln:该类脚本可检测检査目标系统上的安全漏洞。
在Kali Linux系统中,Nmap脚本位于目录/usr/share/nmap/scripts。
在使用NSE脚本时,可以下命令行里使用下述选项。
● -sC 或--script=default:启动默认类NSE 脚本。
● --script <filename>|<category>|<directories>:根据指定的文件名、类别名、目录名,执行 相应的脚本。
● --script-args <args>:这个选项用于给脚本指定参数。例如,在使用认证类脚本时,可通过 这个选项指定用户名和密码。
举例来说,如果要使用默认类的脚本对主机 192.168.56.103 进行扫描,可使用下述指令。
nmap -sC 192.168.56.103
需要获取目标主机的特定信息时可以单独使用脚本文件。
如果要获取HTTP服务 器的信息,将会发现NSE的脚本里有很多脚本都是分析HTTP服务的。这些脚本有httpenum、http-headers、http-methods和http-php-version。
我们可以使用下述指令。
#nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 192.168.56.103
相比不使用脚本而言,在使用了相关脚本之后,将会得到相对应的更多信息。
在介绍Nmap的时候,我们不得不提一个端口扫描脚本。
NSE脚本之中,有一个名为Nmap NSEVulscan的脚本。它可从http://www.computec. ch/mruef/software/nmap_nse_vulscan-1.0.tar.gz 下载。这个脚本能够根据目标主机的版本信 息,在多个网站上搜索这些版本的相关漏洞。这些网站包括 CVE (http://cve.mitre.org)、 OSVDB(http://www.osvdb.org/)、scip VulDB (http://www.scip.ch/?vuldb)、 SecurityTracker(http://securitytracker.com/)和Security Focus(http://www.securityfocus.com/)。
10. 规避检测的选项 (重要)
在渗透测试的工作中,目标主机通常处于防火墙或 IDS 系统的保护之中。在这种环境中使用 Nmap 的默认选项进行扫描,不仅会被发现,而且往往一无所获。此时,我们就要使用Nmap 规避检测的有关选项。
● -f(使用小数据包):这个选项可避免对方识别出我们探测的数据包。指定这个选项之后, Nmap将使用8字节甚至更小数据体的数据包。
● --mtu:这个选项用来调整数据包的包大小。MTU(Maximum Transmission Unit,最大传输 单元)必须是8的整数倍,否则Nmap将报错。
● -D(诱饵):这个选项应指定假 IP,即诱饵的 IP。启用这个选项之后,Nmap 在发送侦测 数据包的时候会掺杂一些源地址是假IP(诱饵)的数据包。这种功能意在以藏木于林的方法 掩盖本机的真实 IP。也就是说,对方的log还会记录下本机的真实IP。您可使用RND生成随机 的假IP地址,或者用RND:number的参数生成<number>个假IP地址。您所指定的诱饵主机 应当在线,否则很容易击溃目标主机。另外,使用了过多的诱饵可能造成网络拥堵。尤其是 在扫描客户的网络的时候,您应当极力避免上述情况。
● --source-port <portnumber>或-g(模拟源端口):如果防火墙只允许某些源端口的入站流 量,这个选项就非常有用。
● --data-length:这个选项用于改变Nmap 发送数据包的默认数据长度,以避免被识别出来是 Nmap的扫描数据。
● --max-parallelism:这个选项可限制Nmap 并发扫描的最大连接数。
● --scan-delay <time>:这个选项用于控制发送探测数据的时间间隔,以避免达到IDS/IPS端 口扫描规则的阈值。
Nmap的官方手册详细介绍了规避探测的各种选项。如果需要详细了解这些内容,可参照官方手册http://nmap.org/book/man-bypass-firewalls-ids.html。
▶ 枚举Windows 系统SMB服务的扫描工具
▶ 枚举SNMP服务的扫描工具
▶ 枚举虚拟专用网络(v*n)的扫描工具
Unicornscan:
Unicornscan是信息收集和关联分析的引擊。它能对TCP/IP设备发起主动扫描,并根据其响应 进行分析。Unicornscan具备下述特性:
● 可进行异步无状态TCP 端口扫描;
● 可通过异步无状态TCP 扫描获取TCP banner;
● 可进行异步UDP 端口扫描;
● 可通过主动方式和被动方式识别远程操作系统和应用程序。
UDP端口扫描的 耗时都很长,扫描整个网段的UDP端口的耗时更长。不过Unicornscan在这方面的性能卓越。
可以设置Unicornscan毎秒发送多少个包。每秒发送包(PPS)设置得越高,扫描的速度也 就越快,但会导致网络负载加重,注意谨慎使用此功能。PPS的默认值是300。
假设我们要扫描主机 192.168.121.132,检测它的UDP 协议(-m U)的 1-65535端口,并查 看程序的详尽输出(-Iv),那么我们需要使用下述指令。
unicornscan -m U -Iv 192.168.121.132:165535
Zenmap:
Zenmap是Nmap的图形化工具。
Amap:识别应用程序
Amap程序可检测在指定端口上运行的应用程序信息。Amap向目标端口发送检测数据,在收 到目标响应之后,将响应信息与数据库中结果进行匹配,并显示出匹配的应用程序。
在Kali Linux 中,Amap 检测数据包的配置文件为/usr/etc/appdefs.trig,而响应信息的文件 是/usr/etc/appdefs.resp。
SMB(server message block)枚举:
nbtscan
SNMP(simple network monitoring protocol)枚举:
v*n枚举:
v*n至少可以分为以下三种。
● 基于IPSec 技术的v*n:分支机构联入总部局域网的v*n 解决方案,多数是这类方案。采用这种方案后,分支机构需要在网关上安装IPSec v*n客户端,总部网关上也要安装IPSec v*n服务器。由于配置过程十分复杂,单个用户联入总部网络的方案通常不是这种方案。采用这种方法连接入单位局域网的用户,通常被叫做公路战士(road warrior)。
● Openv*n:这是一种公路战士十分偏爱的v*n 解决方案。采用 Openv*n 方案的客户端 电脑通过Openv*n客户端连接到v*n的服务器。这种方案设置简单,而且不要求用户具有管 理员级别的权限。
● 基于SSL 技术的v*n:这种方案不要求用户安装专用的v*n 客户端。只要客户端电脑装有 支持SSL连接技术的Web浏览器,v*n用户就可以通过浏览器连接到v*n服务器。
ike-scan
ike-scan是探测、识别并测试IPSecv*n系统的安全工具。IPSec是特别常见的Lan-to-Lan连 接技术,同时也是多数v*n方案所采用的远程访问技术。
IPSec采用了下述三种主要协议。
● Authentication Headers(AH):提供了数据的完整性。
● Encapsulating Security Payloads(ESP):保障数据的完整性和保密性。
● Internet Key Exchange(IKE):通信终端之间进行参数协商的通信协议。它用于安全关联 (Security Association)的建立、维持和终止。
IKE建立安全关联时分为下述几个阶段。
● IKE phase 1:在两个IPSec 终端间协商参数,协商加密算法、完整性算法、认证类型、***分发机制、生命周期等,以建立安全的通信隧道。IKE phase 1 会采用main mode 或 aggressive mode建立双向安全关联。main mode 通过3 对消息协商安全关联。相比之下, aggressive mode通过3 对消息的交换,却能提供更快的安全关联。
● IKE phase 2:用于数据保护。
● IKE phase 1.5 或extended authentication phase:这个阶段是可选阶段,通常出现在远程 访问的v*n方案里。
ike-scan程序向v*n服务器发送IKE phase 1的数据包,然后分析目标主机的响应数据。
ike-scan程序具备下述几个特点。
● 能够向任意数量目标主机发送IKE 数据包。
● 能够以灵活的方式组建IKE 的探测数据包。
● 能够解码并显示所有的服务器响应数据包。
● 能够配合psk-***** 工具**预共享**。
总而言之,ike-scan程序具有下述作用。
● 探测:通过显示响应IKE 请求的主机,搜索运行IKE 的主机。
● 识别:识别IPSec v*n服务器采用的IKE 实现手段。通常,响应信息包含v*n 服务器厂商 和型号。这在接下来漏洞分析过程中是十分有用的。
通常来说,只有ike-scan 这类工具才能找到IPSec v*n服务器。因为IPSec 服务端程序并不 监听TCP 端口,所以端口扫描程序不能探测IPSec v*n服务器。而且这种服务器并不会回复 ICMP unreachable 的错误信息,所以UDP 扫描程序也无法搜索到IPSec v*n服务器。另外, 无论是向UDP 500 端口发送随机数据,还是向50 号或51 号IP 协议发送随机数据,这类服务 器并不进行任何响应。也就是说,如果要搜索 IPSec v*n 服务,就只能使用发送合法IKE数 据包的检测程序,分析服务器的有关响应。
ike-scan -M -A –Pike-hashkey 192.168.0.10
其中,各选项的作用分别如下。
● -M:将payload 的解码信息分为多行显示,以便于阅读。
● -A:使用IKE 的aggressive mode。
● -P:将aggressive mode 的预共享**的哈希值保存为文件。
在SA(安全关联)payload中有意义的信息如下。
● Encryption:3DES。
● Hash:SHA1。
● Auth:PSK。
● Diffie-Hellman group:2。
● SA life time:28800 seconds。
该指令将预共享**的哈希值被保存为ike-hashkey文件。
之后,使用psk-*****程序**v*n连接的哈希值。有关指令如下。
psk-***** –d rockyou.txt ike-hashkey
此处,-d选项用于指定字典文件
下一步任务是识别v*n服务器。这时要不断尝试各种转换(transform)参数,直到找到可接 受的参数为止。
有关转换参数的详细介绍,请参见http://www.nta-monitor.com/wiki/index.php/Ikescan_User_Guide#Trying_Different_Transforms。
参考前面的安全关联payload信息,我们使用下述指令进行识别。
ike-scan -M --trans=5,2,1,2 --showbackoff 192.168.0.10