kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

系统指纹识别

在书中这样描述系统指纹识别,指纹识别是识别系统的一个典型模式,包括指纹图像获取、处理、特征提取和对等模块(这里就是把系统识别比作了指纹识别)。也就是通过获取到的数据包特征来推测目标主机使用的系统。在Nmap官网中提到“Nmap将一系列TCP和UDP数据包发送到远程主机,并检查响应中的每一位。在执行了TCP ISN采样,TCP选项支持和排序,IP ID采样以及初始窗口大小检查等数十项测试后,Nmap将结果与其进行比较 nmap-os-db 超过2,600个已知操作系统指纹的数据库,如果匹配则打印出操作系统详细信息。”同时大多数指纹还具有通用平台枚举(CPE) 表示。

          CPE通用格式: cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>

part         表示目标类型   a(应用程序)| h(硬件平台)| o(操作系统)
vendor    表示向量类型 这里我觉得就是供应商名称
product    表示产品名称
version   表示版本号
update     表示更新包
edition     表示版本
anguage  表示语言项

当然也并不是每次都能准确识别,如果不能正确识别,它会提供一个网站,若你已知系统类别,你可以上传,这样可以丰富公共数据库。

同时,在进行检测是也可以搜集一些信息,比如进行时间检测,使用时间戳选项(-ts)来估计主机上次重启时间; 或者进行TCP***预测分类,可以用来测试针对远程主机建立一个伪造的TCP连接的可能性。

基本选项
-O 可以同时使用-A进行版本检测
--osscan-limit  只对存在打开和关闭的TCP端口的主机进行分析,这样可以大大加快扫描时间
--osscan-guess; --fuzzy 当Nmap无法判断时会尽可能匹配,使用这些选项可以使得推测更加有效

实例:

首先先发现活跃主机(在之前的文章中写过) nmap -sP 192.168.2.1/24

kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

 进行系统指纹识别

kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

这里虽然没有识别出来系统类型,但是看到端口62078的监听服务是iphon-sync,所以可以推出这个系统应该是ios。这个端口是iphon中默认的wifi同步服务端口,但可能从未使用过此端口,所以可以将它关闭,我在搜这个端口时发现了一篇文章,可以参考一下

这里在给出另一个例子:

kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

可以看出,工具推测此台电脑最有可能是windows 10操作系统。


指纹识别工具p0f

p0f是一款被动指纹识别工具,通过分析目标主机的数据包对主机上的操作系统进行识别,即便装有性能良好的防火墙也没有用。

官方提供的功能描述:

  • 高度可扩展且极快地识别vanilla TCP连接的两个端点上的操作系统和软件 - 特别是在Nmap探测器被阻塞,速度太慢,不可靠或简单地引发警报的设置中。
  • 测量系统正常运行时间和网络连接,距离(包括NAT或数据包过滤器后面的拓扑),用户语言首选项等。
  • 自动检测连接共享/ NAT,负载平衡和应用程序级代理设置。
  • 检测伪造声明性语句的客户端和服务器,例如X-MailerUser-Agent

选项列表:p0f [options] ['filter rule']

-i interface 在指定的网络接口上侦听
-r 文件 从给定文件读取离线pcap数据
-p 侦听界面置于混杂模式
-L 列出所有可用的接口

-f 文件

列出所有可用的接口
-o 文件 将信息写入指定的日志文件
-s 名称 在命名的unix套接字上回答API查询
-u 用户

切换到指定的无特权帐户和chroot

-d-fork

切换到指定的无特权帐户和chroot

-S 限制 并行API连接数限制(20)

实例:首先使用wireshark抓包生成test.pcap

然后 p0f -r 下载/test.pcap -o p0f-result.log 进行分析

###截取的部分内容

.-[ 192.168.2.122/59278 -> 106.120.159.126/443 (syn) ]-
|
| client   = 192.168.2.122/59278        //客户端地址
| os       = Linux 3.11 and newer      //系统
| dist     = 0                         //矢量距离
| params   = none
| raw_sig  = 4:64+0:0:1460:mss*20,7:mss,sok,ts,nop,ws:df,id+:0
|
`----

.-[ 192.168.2.122/59278 -> 106.120.159.126/443 (mtu) ]-
|
| client   = 192.168.2.122/59278
| link     = Ethernet or modem     //接口类型
| raw_mtu  = 1500                  //最大包长度
|
`----

### 其中并不全
### 有时还有 app= 表示应用 lang= 表示语言类型

 


服务指纹识别

这里识别的服务指纹信息包括服务的端口、服务名和版本

nmap中的nmap-services记录了大约2200个知名服务端口的数据库,nmap将尽力去发现这些。但是并不能保证发现全部的服务,比如更改了服务端口就可能发现不了服务的正确端口了。

选项列表:

-sV 版本检测
--allports 扫描全部端口
--version-intensity 设置版本扫描强度,0到9之间,越大强度和可能性越高,但是速率也会越小,因此默认为7,当然也可以使用这个来更改
--version-light 轻量版的扫描,也就相当于把扫描强度设为2
--version-all 尝试所有探针,也就相当于吧扫描强度设为9
--version-trace 跟踪扫描过程,不光显示最终结果,也显示调试过程的信息

实例: nmap -sV 192.168.2.100

kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

可以看到打开的端口,服务类型和服务版本


服务枚举工具Amap

 被形容为下一代扫描工具,主要用于识别运行在某一些指定端口上的应用程序。

通常的使用方法 amap -bq ip port 例:amap -bq 192.168.2.100 1-1080

语法:amap [-A | -B | -P | -W] [-1buSRHUdqv] [[ - m] -o <file>] [-D <file>] [-t / -T sec] [-c cons] [-C retries] [-p proto] [-i <file>] [目标端口[端口] ] ...] 
模式:
-A地图应用程序:发送触发器并分析响应(默认)
-B只需抓取横幅,不发送触发器
-P无横幅或应用程序内容 - 是(完全连接)端口扫描程序
选项:
-1仅发送触发到端口,直到第一次识别。Speeeeed!
-6使用IPv6而不是IPv4 
-b打印响应的ascii标志
-i FILE Nmap机器可读输出文件从-u 读取端口
命令行上指定的端口是UDP(默认为TCP)
-R不要识别RPC服务
-H不要发送标记为可能有害的应用程序触发器
-U不要转储无法识别的响应(更好地用于脚本)
-d转储所有响应
-v详细模式,使用两次(或更多!)进行调试(不推荐- 
q不报告关闭的端口,也不要将它们打印为unidentified 
-o FILE [-m]将输出写入文件FILE,-m创建机器可读输出
-c CONS要进行的并行连接数量(默认为32,最大256)
-C RETRIES连接超时时重新连接的次数(请参阅-T)(默认值为3)
-T SEC连接尝试时连接超时(以秒为单位)(默认值为5)
-t SEC响应等待超时(以秒为单位)(默认值为5)
-p PROTO仅发送此协议的触发器(例如ftp)
目标端口要扫描的目标地址和端口(除-i之外)
amap是用于识别目标端口上的应用程序协议的工具。
注意:此版本未使用SSL支持进行编译!
用法提示:建议使用选项“-bqv”,为快速/紧急检查添加“-1”。

实例:amap -bq 192.168.2.100 1-1080

有点多,所以截取了有特征的一部分

kali linux 渗透技术学习笔记 5.信息收集——网络映射器工具Nmap (三) 系统指纹与服务指纹识别

可以看到,有些端口可以链接,有些不可以,有些可以分析出什么服务在监听端口,比如图中的http, apache , IIS

这里我只是在随着书的内容学习,内容不深,所以在以后,结束这本入门书的学习之后,我还会返回来更深入的学习和介绍nmap和相关的软件。 也许对这部分的深入会在后面的博文中介绍。

至此,一些简单的基础的信息收集手段介绍就完成了,接下来的文章中将会学习一些其他的信息收集方法


博主还在学习kali的相关内容,如有错误,还请各位指出,谢谢支持。