目标操作系统识别

版权声明: https://blog.csdn.net/fageweiketang/article/details/84500667

0x00:简介

操作系统识别判断有两种形式,一种是简单的根据 ttl 的值来做判断,一种是根据服务器的通信特征然后和已有的特征库做对比,最后做判断。

在识别的过程中也分两种形式,一种是主动探测,一种是被动探测。主动探测是主动向目标发送请求做的判断,被动是拦截通信的数据包,然后根据数据包的特征来做判断。主动方面可以使用 scapy 和 nmap,被动可以使用 p0f。

0x01:ttl

最简单的可以直接 ping 目标地址,根据 ttl 来判断,windows 系统的 ttl 是 65-128,请求的包每跳一个路由,ttl 值便会减 1,这个范围可以初步判断系统 windows。

请输入图片描述

上面是虚拟机的 2003 系统,因为在内网,所以这里 ttl 没有减是 128。linux 的 ttl 范围是 1-64,请求包每跳一个路由,ttl 值也会减 1,示例如下:

请输入图片描述

ttl 是 64,内网,所以 ttl 没有减,除此之外,某些 unix 系统的 ttl 比较特殊是 255.

0x02:scapy

scapy 构造数据包然后发送给目标服务器,原理的话和 ttl 一样,python 脚本如下:

#!/usr/bin/python
from scapy.all import *
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
import sys

if len(sys.argv)!=2:
    print "error,tip:./osttl.py 1.1.1.1"
    sys.exit()

ip = sys.argv[1]

answer = sr1(IP(dst=str(ip))/ICMP(),timeout=1,verbose=0)
if answer == None:
    print "No response"
elif int(answer[IP].ttl)<=64:
    print "Host is Linux/Unix"
else:
    print "Host is Windows"

脚本很简单,发送 icmp 包然后根据响应包中的 ttl 值做的判断结果,其实和 ping 一样,如果不是其他脚本有需要的话,像这种粗略的结果可以直接 ping。运行也很简单,跟个 ip 即可。

请输入图片描述

0x03:nmap

上面介绍了下 ttl 的检测方式,这种方式只能粗略的判断出目标系统,不会具体到系统的版本,而且 ttl 这种方式也可以手动修改,欺骗那些检测者。所以相对可以作为参考信息,但不是百分百确定。nmap 的话,也不能百分百确定,但它会根据其特征行为指纹 cpe 等来判断,参考性会更高一点。参数为大写 O。

win 示例如下:

请输入图片描述

检测结果给出了版本 2003,说是 sp1 或者是 sp2,我虚拟机 win2003 是 sp2 的,结果还是很准的。

linux 示例如下:

请输入图片描述

结果显示 linux 内核为 2.6. 几几,范围也给了 2.6.9-2.6.33,我虚拟机的 linux 内核版本是 2.6.24,在给的范围中,这个结果还是不错的。

0x04:p0f

p0f 是一个被动探测系统的工具,kali 直接命令行 p0f 就开始检测来往的数据包然后做判断,也可以从应用程序打开,位置在信息搜集栏。示例如下,访问下百度,看 p0f 探测的信息:

请输入图片描述

开启 p0f 后,只要有流量经过都会被探测到,以上是部分探测信息,可以看到除了系统探测,中间件以及浏览器也可以被获取到。

0x05:总结

在系统探测中,没有百分百可以确定的,即使是 nmap 也只能给出其具体的版本范围,但相对来说,nmap 还是目前相对跟精准一点的。获取到系统的类型和版本,可以查看下系统有没有一些公开的漏洞,有没有打补丁等,为后续渗透做准备。

公众号回复数字“8”领取CIS加固全套手册。

微 信:fageweiketang,朋友圈不定期干货分享,欢迎讨论。

公众号:发哥微课堂,专注于代码审计、WEB渗透、网络安全。

                     

猜你喜欢

转载自blog.csdn.net/fageweiketang/article/details/84500667
今日推荐