操作系统识别
目标:
通过对操作系统的扫描,识别操作系统的类型和使用的版本。
目的:
扫描端口后面服务的目的是发现应用服务的版本;通过应用服务版本的信息来判断这个版本上是否存在有漏洞,如果存在漏洞的话,我们可以利用这些漏洞进行渗透测试。
无论是windows、linux、unix,默认安装之后,都会默认开放一些端口,通过扫描操作系统的版本,可以识别这些默认开放的服务和端口上面存在的漏洞,可以利用操作系统本身自带的漏洞,也有可能进入到目标系统。
操作系统识别技术:
种类繁多,
最简单的识别方法是通过ttl值。
1. TTL起始值
不同类型的操作系统,默认的起始ttl值是不同的。但是也不够准确,目标服务器可以伪造自己的操作系统类型,难度较大,但是可以实现。
- windows:128(65-128)
- linux/unix:64(1-64)
- 某些Unix:255
也可以通过python编程来实现对ttl值抓取的判断。
ttl_os.py脚本:
#!/usr/bin/python
from scapy_all import *
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
import sys
if len(sys.argv)!=2;
print "Usage - ./ttl_os.py [IP Address]"
print "Example - ./ttl_os.py 10.0.0.5"
print "Example will perform ttl analysis to attempt to determine whether the system is Windows or Linux/Unix"
sys.exit()
ip=sys.argv[1]
ans=sr1(IP(dst=str(ip))/ICMP(),timeout=1,verbose=0)
if ans == None;
print "No response was returned"
elif int(ans[IP].ttl)<=64;
print "Host is Linux/Unix"
else:
print "Host is Windows"
2. nmap
nmap 1.1.1.1 -O
#-O 判断操作系统具体的版本
3. xprobe
是一个专门用来识别操作系统的工具,得出的结果并不精确。
xprobe2 1.1.1.1
4. 被动操作系统识别
扫描器不主动向目标ip发包。
工作原理:
基于网络抓包、网络监听。
不同的操作系统发出去的包都是不一样的,比如linux和windows的ping包。不同的linux发出来的包也不尽相同,通过差别可以判断。
被动式扫描,你可以把他部署在网络出口的地方,凡是有进出的数据包,可以通过抓包或交换机做镜像端口或地址欺骗抓包,总之让这些数据包流经到我被动扫描器的主机上,被动扫描器所在主机上面可以运行一个被动操作系统扫描的软件,通过这个软件去分析收到的包,通过这些包里面的特征来判断ip分别是什么样的操作系统。
工具:
p0f
可结合ARP地址欺骗识别全网OS
p0f
#然后被动触发流量