為什麼要掃描操作系統呢? 其實和上一篇博客:《服務掃描》類似,都是為了能夠發現漏洞 發現什麼漏洞? 不同的操作系統、相同操作系統不同版本,都存在著一些可以利用的漏洞 而且,不同的系統會預設開放不同的一些埠和服務 如果能夠知道操作系統和版本號,那麼就可以利用這些預設選項做一些“事情” OS的識別技術 ...
為什麼要掃描操作系統呢?
其實和上一篇博客:《服務掃描》類似,都是為了能夠發現漏洞
發現什麼漏洞?
不同的操作系統、相同操作系統不同版本,都存在著一些可以利用的漏洞
而且,不同的系統會預設開放不同的一些埠和服務
如果能夠知道操作系統和版本號,那麼就可以利用這些預設選項做一些“事情”
OS的識別技術多種多樣,有簡單的也有複雜的,最簡單的就是用TTL值去識別。
不同類型的OS預設的起始TTL值是不同的。
比如,windows的預設是128,然後每經過一個路由,TTL值減一。
Linux/Unix的值是64,但有些特殊的Unix會是255。
1.利用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")
使用場景:
我主機IP:10.14.4.252
Kali機器:192.168.22.130
Metasploitable機器:192.168.22.129
使用腳本:
如果腳本是從windows移過來的:
vi xxx.py
:set fileformat=unix
:wq
chmod u+x xxx.py
./xxx.py
我還多掃描了一個本地的機器,得到的結果都很準確
不過呢,這隻是利用TTL簡單判斷出操作系統
利用Nmap,不僅可以實現這裡的功能,甚至還可以得到版本:
-O:參數,識別操作系統
除了強大的工具,還有一些其他的:
xprobe2:直接輸入IP地址即可
這個掃描工具相對於Nmap,差距很大,結果不精確
上邊的工具都是主動識別操作系統的:主動向目標發送數據包,分析回包
而下邊這個工具是被動識別的:
基於網路監聽的工作原理:Windows和Linux發送出來的包是有很大區別的。
被動式的掃描可以部署在網路進出口的地方,目的是讓所經過的流量通過我的流量分析器。
同樣在Kali中也存在這般的工具p0f,他會監聽凡是通過本地網卡的流量。
開啟:p0f
這裡是開啟了監聽,如果什麼都不做,他也沒有反應
接下來我訪問某網站,看看變化:
隨意挑出一條信息來看看:
我49024埠向某IP發送了SYN包,這裡就得到了我Kali機的版本:3.11或者更高
總之,我推薦Nmap