目录

2.2 操作系统指纹识别... 1

2.2.1 Banner抓取... 1

2.2.2 TCP 和 ICMP 常规指纹识别技术... 3

TCP数据报格式... 4

ICMP首部格式... 5

TTL与TCP窗口大小... 5

FIN探测... 5

BOGUS flag 探测... 6

TCP ISN 抽样... 6

IPID 抽样... 6

TCP Timestamp. 6

ACK值... 6

ICMP错误信息... 6

DHCP. 6

2.2.3 数据包重传延时技术... 6

2.2.4 使用Nmap进行操作系统探测..

一般性探测

指定网络扫描类型.

设置扫描条件

推测结果.

2.2.5 使用Xprobe2进行操作系统探测

2.2.6 使用p0f进行操作系统探测

2.2.7 使用miranda进行操作系统探测

小结

2.2 操作系统指纹识别

识别目标主机的操作系统,首先,可以帮助我们进一步探测操作系统级别的漏洞从而可以从这一级别进行渗透测试。其次,操作系统和建筑在本系统之上的应用一般是成套出现的,例如LAMP或者LNMP。操作系统的版本也有助于我们准确定位服务程序或者软件的版本,比如windows server 2003 搭载的IIS为6.0,windows server 2008 R2 搭载的是IIS7.5。

操作系统指纹识别技术多种多样,这里我简要介绍我所知道的几种常用技术,不会具体深入到细节中,若您感兴趣可自己查阅资料。

2.2.1 Banner抓取

Banner抓取是最基础、最简单的指纹识别技术,而且在不需要其他专门的工具的情况下就可以做。操作简单,通常获取的信息也相对准确。

严格的讲,banner抓取是应用程序指纹识别而不是操作系统指纹识别。Banner信息并不是操作系统本身的行为,是由应用程序自动返回的,比如apathe、exchange。而且很多时候并不会直接返回操作系统信息,幸运的话,可能会看到服务程序本身的版本信息,并以此进行推断。

凡事皆有利弊,越是简单的方法越容易被防御,这种方法奏效的成功率也越来越低了。

先来看一个直接Banner抓取的例子。

在上图中,直接telnet 80端口,在返回的服务器banner信息中,看到“Server: Microsoft-HTTPAPI/2.0”的字样。

在IIS中使用ISAPI扩展后,经常会看到这样的Banner。下表可以帮助我们识别操作系统:

Server Header Value

Windows Server Version

Microsoft-HTTPAPI/2.0

Windows 2003 Sp2, Windows 7, Windows 2008, Windows 2008 R2

Microsoft-HTTPAPI/1.0

Windows 2003

如果没有ISAPI拦截,我们可能会看到如下图的信息,

准确的IIS版本,会帮助我们更准确的判断操作系统,可以参考下表:

IIS Version

Windows Server Version

IIS 5.0

Windows 2000

IIS 5.1

Windows XP

IIS 6.0

Windows 2003

IIS 7.0

Windows 2008, Windows Vista

IIS 7.5

Windows 2008 R2, Windows 7

对于asp.net站点,通常会看到“X-Powered-By”字样,会指示.net 版本,但是这对判断操作系统版本帮助不大。

其他web服务器如apache、nginx,除非直接输出操作系统版本,否则根据服务程序版本无法推断操作系统版本。配置不当的服务可能会输出如下信息:

HTTP/1.1 200 OK

Date: Mon, 16 Jun 2003 02:53:29 GMT

Server: Apache/1.3.3 (Unix)  (Red Hat/Linux)

Last-Modified: Wed, 07 Oct 1998 11:18:14 GMT

ETag: "1813-49b-361b4df6"

Accept-Ranges: bytes

Content-Length: 1179

Connection: close

Content-Type: text/html

有经验的管理员都会修改banner或者禁止输出banner信息,比如下面的测试:

我们可以看到图中目标站点并未输出任何banner信息。

除了web服务器程序,很多ftp、smtp服务也会返回banner信息。在2.3节《服务程序指纹识别》一节中,还会讲解Banner抓取,本节就简要介绍到这里。

2.2.2 TCP 和 ICMP 常规指纹识别技术

正常而言,操作系统对TCP/IP的实现,都是严格遵从RFC文档的,因为必须遵从相同的协议才能实现网络通信。但是在具体实现上还是有略微的差别,这些差别是在协议规范之内所允许的,大多数操作系统指纹识别工具都是基于这些细小的差别进行探测分析的。

如果您不熟悉TCP/IP协议,那么可以查询资料或者跳过这一部分,不影响对工具的使用。

为了节省篇幅,不影响实践学习,我只是简单列出使用的技术,并未深入。

TCP数据报格式

tcp 头

中间的标志位(flags)就是用于协议的一些机制的实现的比特位大家可以看到有6比特,它们依次如下:

URG、ACK、PSH、RST、SYN、FIN。

URG表示紧急指针字段有效;

ACK置位表示确认号字段有效;

PSH表示当前报文需要请求推(push)操作;

RST置位表示复位TCP连接;

SYN用于建立TCP连接时同步序号;

FIN用于释放TCP连接时标识发送方比特流结束。

源端口(Sequence Number)和目的端口:各为16比特,用于表示应用层的连接。源端口表示产生数据包的应用层进程,而目的端口则表示数据包所要到达的目的进程。

序列号:为32比特,表示数据流中的字节数。序列号为首字节在整个数据流中的位置。初始序列号随机产生,并在连接建立阶段予以同步。

确认号:表示序号为确认号减去1的数据包及其以前的所有数据包已经正确接收,也就是说他相当于下一个准备接收的字节的序号。

头部信息:4比特,用于指示数据起始位置。由于TCP包头中可选项的长度可变,因此整个包头的长度不固定。如果没有附加字段,则TCP数据包基本长度为20字节。

窗口:16位,表示源端主机在请求接收端等待确认之前需要接收的字节数。它用于流量控制,窗口大小根据网络拥塞情况和资源可用性进行增减。

校验位:16位。用于检查TCP数据包头和数据的一致性。

紧急指针:16位。当URG码有效时只向紧急数据字节。

可选项:存在时表示TCP包头后还有另外的4字节数据。TCP常用的选项为最大数据包(并非整个TCP报文)MSS。每一个TCP段都包含一个固定的20字节的段头。TCP段头由20字节固定头和一些可选项组成。实际数据部分最多可以有65495(65535-20-20=65495)字节。

ICMP首部格式

icmp首部

对于上图中的Data部分,不同的ICMP类型,会拆分成不同的格式,这里就不一一介绍了。

TTL与TCP窗口大小

下表是几个典型的操作系统的TTL和TCP窗口的大小数值。

Operating System

Time To Live

TCP Window Size

Linux (Kernel 2.4 and 2.6)

64

5840

Google Linux

64

5720

FreeBSD

64

65535

Windows XP

128

65535

Windows Vista and 7 (Server 2008)

128

8192

iOS 12.4 (Cisco Routers)

255

4128

产生上表中数据差别的主要原因在于RFC文档对于TTL和滑动窗口大小并没有明确的规定。另外需要注意的是,TTL即时在同一系统下,也总是变化的,因为路由设备会修改它的值。

基于TTL与TCP窗口大小的操作系统探测需要监听网络,抓取数据包进行分析,这种方法通常被称之为被动分析。

FIN探测

在RFC793中规定FIN数据包被接收后,主机不发送响应信息。但是很多系统由于之前的固有实现,可能会发送一个RESET响应。比如MS Windows, BSDI, CISCO, HP/UX, MVS, 和IRIX。

BOGUS flag 探测

发送一个带有未定义FLAG的 TCP SYN数据包,不同的操作系统会有不同的响应。比如Linux 2.0.35之前的系统会在响应包中报告未定义的FLAG。

TCP ISN 抽样

TCP连接的初始序列号(ISN),是一个随机值,但是不同的操作系统的随机方式不一样,还有的操作系统每次的ISN都是相同的。针对ISN做多次抽样然后比对规律可以识别操作系统类型。

IPID 抽样

IP标识是用来分组数据包分片的标志位,和ISN一样,不同的操作系统初始化和增长该标识值的方式也不一样。

TCP Timestamp

有的操作系统不支持该特性,有的操作系统以不同的更新频率来更新时间戳,还有的操作系统返回0。

ACK值

在不同场景下,不同的请求,操作系统对ACK的值处理方式也不一样。比如对一个关闭的端口发送数据包,有的操作系统ACK+1,有的系统则不变。

ICMP错误信息

ICMP错误信息是操作系统指纹识别的最重要手段之一,因为ICMP本身具有多个类型,而错误信息又是每个操作系统在小范围内可以自定义的。

DHCP

DHCP本身在RFC历史上经历了1541、2131、2132、4361、4388、4578多个版本,使得应用DHCP进行操作系统识别成为可能。

2.2.3 数据包重传延时技术

之所以把数据包延时重传技术单独拿出来,是因为相对于上面说的技术,它属于新技术,目前大多数系统都没有针对该方法做有效的防御。但是基于该技术的工具也不是很成熟,这里希望引起读者的重视或者激发你对该技术的热情。

对于在2.2.2节中介绍的技术,很大程度上受到网络环境、防火墙、入侵检测系统的影响。那么数据包重传延时技术能解决这些问题吗?

由于数据包丢失,或者网络阻塞,TCP数据包重传属于正常情况。为了识别重复的数据包,TCP协议使用相同的ISN和ACK来确定接收的数据包。

包重传的延时由重传定时器决定,但是确定一种合适的延时算法比较困难,这是源于以下原因:

确认信号的延迟在实际网络环境中是可变的;

传输的分段或确认信号可能丢失,使得估计往返时间有误。

TCP采用了自适应的重传算法,以适应互连网络中时延的变化.该算法的基本思想是通过最近的时延变化来不断修正原有的时延样本,RFC中并没有明确具体如何执行。

由于不同操作系统会选择采用自己的重传延迟算法,这就造成了通过分析各系统重发包的延迟来判断其操作系统类型的可能性,如果各操作系统的重传延迟相互存在各异性,那么就很容易将它们彼此区分开来。

由于此种技术,采用标准的TCP数据包,一般情况下可以有效的躲过防火墙和入侵检测系统。但是目前基于此种技术的工具还很少。

2.2.4 使用Nmap进行操作系统探测

一般性探测

使用Nmap进行操作系统识别最简单的方法为使用-O参数,如下是我对内网扫描的几个数据。

nmap -O 192.168.1.1/24

上面的命令表示对192.168.1.1 所在网段的C类255个ip进行操作系统版本探测。

对192.168.1.1的扫描结果(1.1是Tp-link路由器):

MAC Address: A8:15:4D:85:4A:30 (Tp-link Technologies Co.)

Device type: general purpose

Running: Linux 2.6.X

OS CPE: cpe:/o:linux:linux_kernel:2.6

OS details: Linux 2.6.23 - 2.6.38

Network Distance: 1 hop

对192.168.1.101的扫描结果(实际为android系统手机):

MAC Address: 18:DC:56:F0:65:E0 (Yulong Computer Telecommunication Scientific(shenzhen)Co.)

No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).

TCP/IP fingerprint:

OS:SCAN(V=6.40%E=4%D=12/27%OT=7800%CT=1%CU=39712%PV=Y%DS=1%DC=D%G=Y%M=18DC5

OS:6%TM=52BD035E%P=x86_64-unknown-linux-gnu)SEQ(SP=100%GCD=1%ISR=109%TI=Z%C

OS:I=Z%II=I%TS=7)OPS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O3=M5B4NNT11NW6%O4=M5B4S

OS:T11NW6%O5=M5B4ST11NW6%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5

OS:=7120%W6=7120)ECN(R=Y%DF=Y%T=40%W=7210%O=M5B4NNSNW6%CC=Y%Q=)T1(R=Y%DF=Y%

OS:T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=

OS:R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T

OS:=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=

OS:0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(

OS:R=Y%DFI=N%T=40%CD=S)

从上面的结果可以看出,nmap对android系统识别率不高。

对192.168.1.102的结果如下(实际系统为windows 7 sp1):

Device type: general purpose

Running: Microsoft Windows 7

OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1

OS details: Microsoft Windows 7 SP0 - SP1

对192.168.1.106的探测结果如下(实际系统为ios 5.0):

MAC Address: CC:78:5F:82:98:68 (Apple)

Device type: media device|phone

Running: Apple iOS 4.X|5.X|6.X

OS CPE: cpe:/o:apple:iphone_os:4 cpe:/a:apple:apple_tv:4 cpe:/o:apple:iphone_os:5 cpe:/o:apple:iphone_os:6

OS details: Apple Mac OS X 10.8.0 - 10.8.3 (Mountain Lion) or iOS 4.4.2 - 6.1.3 (Darwin 11.0.0 - 12.3.0)

对192.168.1.106的探测结果如下(实际为苹果一体机、windows7 sp1):

MAC Address: 7C:C3:A1:A7:EF:8E (Apple)

Too many fingerprints match this host to give specific OS details

对192.168.1.119的探测结果如下(实际为windows server 2008 r2,vmware虚拟机):

MAC Address: 00:0C:29:AA:75:3D (VMware)

Device type: general purpose

Running: Microsoft Windows 7|2008

OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_server_2008::sp1 cpe:/o:microsoft:windows_8

OS details: Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, or Windows 8

Network Distance: 1 hop

对192.168.1.128探测结果如下(centOS 6.4,VMware虚拟机):

MAC Address: 00:0C:29:FE:DD:13 (VMware)

Device type: general purpose

Running: Linux 3.X

OS CPE: cpe:/o:linux:linux_kernel:3

OS details: Linux 3.0 - 3.9

指定网络扫描类型

nmap支持以下扫描类型:

l  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon

l  -sN/sF/sX: TCP Null, FIN, and Xmas

l    --scanflags <flags>: Customize TCP scan flags

l    -sI <zombie host[:probeport]>: Idlescan

l    -sO: IP protocol scan

l    -b <ftp relay host>: FTP bounce scan

比如要使用TCP SYN扫描,可以使用如下的命令:

nmap –sS -O 192.168.1.1/24

设置扫描条件

采用--osscan-limit这个选项,Nmap只对满足“具有打开和关闭的端口”条件的主机进行操作系统检测,这样可以节约时间,特别在使用-P0扫描多个主机时。这个选项仅在使用 -O-A 进行操作系统检测时起作用。

如:

nmap -sS -O --osscan-limit 192.168.1.119/24

推测结果

从上面的扫描示例,我们也能看出,Nmap默认会对无法精确匹配的结果进行推测的。按官方文档的说法,使用--osscan-guess; --fuzzy选项,会使推测结果更有效,实际测试没有任何区别。

2.2.5 使用Xprobe2进行操作系统探测

Xprobe2是一款使用ICMP消息进行操作系统探测的软件,探测结果可以和Nmap互为参照。但是该软件目前公开版本为2005年的版本,对老的操作系统探测结果较为准确,新系统则无能为力了。

下面命令为xprobe2简单用法:

xprobe2 -v www.iprezi.cn

结果如下:

2.2.6 使用p0f进行操作系统探测

p0f是一款被动探测工具,通过分析网络数据包来判断操作系统类型。目前最新版本为3.06b。同时p0f在网络分析方面功能强大,可以用它来分析NAT、负载均衡、应用代理等。

p0f的命令参数很简单,基本说明如下:

-f fname指定指纹数据库 (p0f.fp) 路径,不指定则使用默认数据库。

-i iface   指定监听的网卡。

-L        监听所有可用网络。

-r fname  读取由抓包工具抓到的网络数据包文件。

-o fname  附加之前监听的log文件,只有同一网卡的log文件才可以附加合并到本次监听中来。

-d   以后台进程方式运行p0f ;

-u user   以指定用户身份运行程序,工作目录会切换到到当前用户根目录下;

-p       设置 –i参数指定的网卡为混杂模式;

-S num   设置API并发数,默认为20,上限为100;

-m c,h    设置最大网络连接数和同时追踪的主机数 (默认值: c = 1,000, h = 10,000).

-t c,h     设置连接超时时间

下面使用如下命令进行测试:

p0f -i eth0 –p

上面命令的含义为监听网卡eth0,并开启混杂模式。这样会监听到每一个网络连接,部分结果摘录如下:

p0f监听结果1

p0f监听结果2

在p0f监听结果2图中,检测的结果我windows7或8,对比下nmap的结果为windows7,实际该机器系统为 windows7 sp1。

nmap检测结果

p0f监听结果3

在p0f监听结果3图中,捕获的数据是浏览器发送的请求数据,我们可以看到浏览器请求信息中“Windows NT 6.1; WOW64; Trident/7.0; rv:11.0”的字样,从这段UserAgent中,可以看出发出请求的系统为windows7 64位,IE11。

2.2.7 使用miranda进行操作系统探测

miranda工具是一个通过UPNP功能来探测主机信息的工具,并不限于探测操作系统。下面我们通过一个实例,演示如何使用miranda。

在终端输入如下命令:

miranda -v -i eth0

上面的命令是指定打开网卡eth0,返回结果如下:

miranda提示输入开启upnp的主机,现在我们不知道哪台主机开启了upnp,输入命令“msearch”,会自动搜索upnp主机,

接着我们会看到扫描到的upnp主机:

按 CTRL +C终止扫描,输入host list。

可以看到搜集的主机列表,然后使用host get [index]命令可以查看该主机的upnp设备列表。

使用host info [index]查看主机详细信息。

从上图信息可以看到,这是一台TP-Link路由器。同样的方法,查看一台windows 7主机。

小结

本节大致罗列了操作系统识别的常用技术和典型工具。因为本书是实践性质的,所以没有对指纹识别技术做深入的讲解。

基于数据包延时重传技术的工具,笔者只知道RING和Cron-OS,但是这两款工具没有集成到Kali Linux 中,同时也很久没有更新,故没有做介绍。

2.3节--《服务程序指纹识别》。

更多相关文章  www.xuanhun521.com,原文链接

ps:对此文章或者安全、安全编程感兴趣的读者,可以加qq群:Hacking:303242737;Hacking-2群:147098303;Hacking-3群:31371755;hacking-4群:201891680;Hacking-5群:316885176

Kali Linux渗透测试实战 2.2 操作系统指纹识别的更多相关文章

  1. Kali Linux渗透测试实战 2.1 DNS信息收集

    目录 2.1 DNS信息收集1 2.1.1 whois查询3 2.1.2 域名基本信息查询4 Dns服务器查询4 a记录查询4 mx记录查询5 2.1.3 域名枚举5 fierse 5 dnsdict ...

  2. Kali Linux渗透测试实战 1.1 Kali Linux简介

    1.1 Kali Linux简介 如果您之前使用过或者了解BackTrack系列Linux的话,那么我只需要简单的说,Kali是BackTrack的升级换代产品,从Kali开始,BackTrack将成 ...

  3. Kali Linux渗透测试实战 1.3 渗透测试的一般化流程

    1.3 渗透测试的一般化流程 凡事预则立,不预则废,做任何事情都要有一个预先的计划.渗透测试作为测试学科的一个分支,早已形成了完整的方法论.在正式开始本书的实践教学章节之前,我也想谈一谈使用Kali ...

  4. Kali Linux渗透测试实战 1.2 环境安装及初始化

    1.2 环境安装及初始化 目录(?)[-] 环境安装及初始化 下载映像 安装虚拟机 安装Kali Linux 安装中文输入法 安装VirtualBox增强工具 配置共享目录和剪贴板 运行 Metasp ...

  5. Kali Linux渗透测试实战 1.4 小试牛刀

    目录 1.4 小试牛刀 1.4.1 信息搜集 whois查询 服务指纹识别 端口扫描 综合性扫描 1.4.2 发现漏洞 1.4.3 攻击与权限维持 小结 1.4 小试牛刀 本节作为第一章的最后一节,给 ...

  6. Kali linux渗透测试常用工具汇总1

    1.ProxyChains 简介:代理工具.支持HTTP/SOCKS4/SOCK5的代理服务器,允许TCP/DNS通过代理隧道. 应用场景:通过代理服务器上网. 配置:/etc/proxychains ...

  7. kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)

    上次我们使用 arpspoof 工具在命令行中完成了 arp 欺骗实验,今天我们用另一种工具 ettercap 工具来实现.ettercap支持图形化操作,对新手非常友好,并且操作非常简单, ette ...

  8. kali Linux渗透测试技术详解

    kali Linux渗透测试技术详解 下载:https://pan.baidu.com/s/1g7dTFfzFRtPDmMiEsrZDkQ 提取码:p23d <Kali Linux渗透测试技术详 ...

  9. kali Linux 渗透测试 | ARP 欺骗

    目录 ARP 欺骗及其原理 ARP 欺骗实施步骤 必备工具安装 nmap 工具 dsniff 工具 driftnet 工具 ettercap 工具 ARP 欺骗测试 ARP 断网攻击 ARP 欺骗(不 ...

随机推荐

  1. Hive 系列(一)安装部署

    Hive 系列(一)安装部署 Hive 官网:http://hive.apache.org.参考手册 一.环境准备 JDK 1.8 :从 Oracle 官网下载,设置环境变量(JAVA_HOME.PA ...

  2. [转]11种常见sqlmap使用方法详解

    sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了.今天把我一直 ...

  3. 摹客 · Veer 第二届设计大赛邀你来战!

    2018年12月,摹客设计大赛一年一度一归来. 继2017年摹客全国首届原型设计大赛成功举办后,本次大赛是摹客第二届设计大赛.大赛由摹客主办,Veer独家冠名赞助,iSlide和创客贴协办,国内多家知 ...

  4. Split Array Largest Sum LT410

    Given an array which consists of non-negative integers and an integer m, you can split the array int ...

  5. Sophus libSophus.so

    在编译包含Sophus的源文件的时候,出现如下错误 ../lib/libmyslam.so: undefined reference to `Sophus::SO3::SO3(double, doub ...

  6. https的名词解释

    原文 http://www.cnblogs.com/guogangj/p/4118605.html 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等) ...

  7. 使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    虽然现在JS做报表和图形展示已经非常普遍和漂亮了,但是不能忽略有jfreechart 这样一种东西! 这些翻阅资料,在看以前写的示例时发现了关于jfreechart 的简单示例,不管怎样发上来分享一下 ...

  8. 690. Employee Importance

    好几种写法,这里贴几个出来 第一种:暴力解法,除去递归栈,空间复杂度O(1).时间复杂度略高 /* // Employee info class Employee { public: // It's ...

  9. JS将时间戳转化为时间

    //将时间戳转化为时间 function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10位需*1 ...

  10. Tomcat架构解析(三)-----Engine、host、context解析以及web应用加载

    上一篇博文介绍了Server的创建,在Server创建完之后,就进入到Engine的创建过程,如下: 一.Engine的创建   1.创建Engine实例 当前次栈顶元素为Service对象,通过Se ...