目录

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

转载于:https://www.cnblogs.com/xuanhun/p/3494608.html

Kali Linux渗透测试实战 2.2 操作系统指纹识别相关推荐

  1. Kali Linux渗透测试实战 第一章

    玄魂 · 2013/12/26 16:23 作者博客:www.xuanhun521.com/ 1.1 Kali Linux简介 如果您之前使用过或者了解BackTrack系列Linux的话,那么我只需 ...

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

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

  3. Kali Linux渗透测试实战 1.3 渗透测试的一般化流程_商洛学院司徒荆_新浪博客

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

  4. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  5. 视频教程-Kali Linux渗透测试基础入门到进阶实战全程课-渗透测试

    Kali Linux渗透测试基础入门到进阶实战全程课 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥499.00 立即订阅 ...

  6. Kali Linux渗透测试——MSF实战篇(一)

    笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程 文章目录 一.信息收集 (一)db_nmap (二)Auxiliary模块 1.arp扫描 2.端口扫描 3.空闲扫描 4.UDP扫 ...

  7. 《Kali Linux渗透测试的艺术》—第2章2.3节安全测试方法论

    本节书摘来自异步社区<Kali Linux渗透测试的艺术>一书中的第2章2.3节安全测试方法论,作者[英]Lee Allen , [印尼]Tedi Heriyanto , [英]Shake ...

  8. Kali Linux渗透测试 128 拒绝服务--TearDrop 攻击

    本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的<Kali Linux 渗透测试>课程 Kali Linux渗透测试(苑房弘)博客记录 1. ...

  9. KALI LINUX渗透测试学习笔记

    KALI LINUX渗透测试学习笔记 (苑房弘主讲) 第1章 课程介绍 任务1:Kali Linux渗透测试介绍.exe 安全问题的根源: 分层思想 只求功能实现 最大的威胁是人 渗透测试: 尝试挫败 ...

最新文章

  1. 这个AI模型用最少的训练数据学习对象之间的关系
  2. AI将成科学家“高级定制”工具
  3. 解决无线网卡 RTL8723BE ubuntu环境下不稳定情况
  4. .NET系统学习----Globalization Resources
  5. foxtable制作管理系统实例_某河道治理工程实例
  6. 关于strlwr,strupr等函数在此作用域中尚未声明的问题
  7. Ubuntu 12.10 安装 JDK1.7.0_15
  8. linux mint 安装php,使用apt-get方式为Linux Mint 13安装PHP+MYSQL+Apache
  9. java数据库连接类,已经把数据库操作的方法都封装好了
  10. linux安装rz命令_Linux 安装dep安装包命令
  11. HTML5的非主体结构元素(header、footer、hgroup、assress)
  12. 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
  13. 消除数字鸿沟,这些开发者要让代码有“温度”
  14. TransactionScope oracle不能用的问题(转载)
  15. 闲置android平板电脑,让闲置的iPad / Android平板电脑成为计算机屏幕的扩展监视器!...
  16. css背景颜色跟随文字颜色、设置文字颜色反色
  17. 电风扇计算机控制系统,电脑控制型电风扇电路原理与检修
  18. Linux 邮件服务
  19. RH413企业安全加固 第14章 配置系统日志
  20. Android类似微信详细地址选择(高德地图)

热门文章

  1. No space left on device错误解决
  2. android客户端证书到期了,在Android设备上生成客户端证书
  3. java程序并行机制_Java语言具有多种优点和特点,下列选项中,______反映了Java程序并行执行机制的特点。A.多线程B.健...
  4. AndroidStudio gradle配置
  5. android popupwindow 自定义背景,android – 无法将PopupWindow背景设置为透明
  6. win7优化设置_win7优化性能的操作步骤
  7. JZOJ 5623. 【NOI2018模拟4.2】program
  8. linux查看网卡传输,Linux下查看网卡实时流量工具
  9. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs
  10. docker yum php mysql_Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)