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
进行系统指纹识别
这里虽然没有识别出来系统类型,但是看到端口62078的监听服务是iphon-sync,所以可以推出这个系统应该是ios。这个端口是iphon中默认的wifi同步服务端口,但可能从未使用过此端口,所以可以将它关闭,我在搜这个端口时发现了一篇文章,可以参考一下。
这里在给出另一个例子:
可以看出,工具推测此台电脑最有可能是windows 10操作系统。
指纹识别工具p0f
p0f是一款被动指纹识别工具,通过分析目标主机的数据包对主机上的操作系统进行识别,即便装有性能良好的防火墙也没有用。
官方提供的功能描述:
- 高度可扩展且极快地识别vanilla TCP连接的两个端点上的操作系统和软件 - 特别是在Nmap探测器被阻塞,速度太慢,不可靠或简单地引发警报的设置中。
- 测量系统正常运行时间和网络连接,距离(包括NAT或数据包过滤器后面的拓扑),用户语言首选项等。
- 自动检测连接共享/ NAT,负载平衡和应用程序级代理设置。
- 检测伪造声明性语句的客户端和服务器,例如X-Mailer或User-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
可以看到打开的端口,服务类型和服务版本
服务枚举工具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
有点多,所以截取了有特征的一部分
可以看到,有些端口可以链接,有些不可以,有些可以分析出什么服务在监听端口,比如图中的http, apache , IIS
这里我只是在随着书的内容学习,内容不深,所以在以后,结束这本入门书的学习之后,我还会返回来更深入的学习和介绍nmap和相关的软件。 也许对这部分的深入会在后面的博文中介绍。
至此,一些简单的基础的信息收集手段介绍就完成了,接下来的文章中将会学习一些其他的信息收集方法
博主还在学习kali的相关内容,如有错误,还请各位指出,谢谢支持。