为什么要扫描操作系统呢?
其实和上一篇所讲的“服务扫描”类似,都是为了能够发现漏洞。
发现什么漏洞?
不同的操作系统、相同操作系统不同版本,都存在着一些可以利用的漏洞;
而且,不同的系统会默认开放不同的一些端口和服务;
如果能够知道操作系统和版本号,那么就可以利用这些默认选项做一些“事情”。
OS的识别技术多种多样,有简单的也有复杂的,最简单的就是用TTL值去识别。
不同类型的OS默认的起始TTL值是不同的。
比如,windows的默认是128,然后每经过一个路由,TTL值减一。
Linux/Unix的值是64,但有些特殊的Unix会是255。
使用场景:
我主机IP:10.14.4.252
Kali机器:192.168.22.130
Metasploitable机器:192.168.22.129
一、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("Usage --/ttl_os.py [IP Address]")
print("Example --/ttl_os.py 192.168.0.1")
print("Example will preform 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")
使用脚本:
如果脚本是从windows移过来的:
vi xxx.py
:set fileformat=unix
:wq
chmod u+x xxx.py
./xxx.py
我还多扫描了一个本地的机器,得到的结果都很准确。
不过呢,这只是利用TTL简单判断出操作系统。
二、nmap
利用Nmap,不仅可以实现这里的功能,甚至还可以得到版本:
-O:参数,识别操作系统
root@kali:~# nmap -O 192.168.22.129
三、xprobe2
除了上面这些强大的工具,还有一些其它的。
xprobe2:直接输入IP地址即可!
root@kali:~# xprobe2 10.14.4.252
这个扫描工具相对于Nmap,差距很大,结果不精确!
四、p0f
上边的工具都是主动识别操作系统的:主动向目标发送数据包,分析回包。
而下边这个工具是被动识别的:
基于网络监听的工作原理:Windows和Linux发送出来的包是有很大区别的。
被动式的扫描可以部署在网络进出口的地方,目的是让所经过的流量通过我的流量分析器。
同样在Kali linux中也存在这样的工具p0f,他会监听凡是通过本地网卡的流量。
1、开启:p0f
root@kali:~# p0f
这里是开启了监听,如果什么都不做,他也没有反应。
2、接下来我访问某网站,看看变化;
我的49024端口向某IP发送了SYN包,这里就得到了我Kali机的版本:3.11或者更高。
总结:
总而言之,一句话,我推荐大家用Nmap工具。