nmap服务识别和操作系统探测

nmap服务识别和操作系统探测
扫描对外公开的服务器信息,是 nmap 的主要⽤途之⼀。为了识别服务器上运⾏的是哪种服务,nmap 把主流服务的特征信息存储在
nmap-services-probes 和 nmap-os-db 这两个⽂件中。其中前者包含应⽤程序的特征信息,后者放置操作系统的特征信息。不同操作系
统上,这两个⽂件的位置不⼀样,可以通过 locate 或其他相似的全盘搜索⼯具出它们具体的位置。
接下来让我们解读下这两个⽂件,看看 nmap 是如何利⽤这些信息来识别服务的。
服务识别
当我们指定 -sV 选项运⾏ nmap 时,它会根据 nmap-services-probes ⽂件⾥⾯存储的是服务类型特征数据去判断具体扫描到的是哪种服
防盗报警装置务。
nmap-services-probes 看上去⽐较乱。事实上,如果这部分数据可以组织成 xml 或 yaml 这种树型结构的格式,看上去会明显清晰得减温减压装置技术要求
多。
贴个⽚段看下:
Probe TCP GetRequest q|GET / HTTP/1.0\r\n\r\n|
rarity 1
ports 1,70,79,80-85,88,113,139,143,280,497,505,514,515,540,554,591,620,631,783,888,898,900,901,1026,1080,1042,1214,1220,1234,1314,1344,1503,1610,1 sslports 443,993,995,1311,1443,3443,4443,5061,7443,8443,9443,10443,14443,44443,60443
...
match http m|^HTTP/1\.[01] \d\d\d.*?\r\nServer: nginx\r\n|s p/nginx/ cpe:/a:igor_sysoev:nginx/
match http m|^HTTP/1\.[01] \d\d\d.*\r\nServer: nginx/([\d.]+)\r\n|s p/nginx/ v/$1/ cpe:/a:igor_sysoev:nginx:$1/
nmap-services-probes 没有直接列出各种服务的特征,⽽是描述了服务识别扫描过程中的操作步骤。其中 Probe 开头表⽰新起⼀个探测
项。后⾯跟着的 TCP GetRequest 表⽰该探测项的种类和名字。q|GET / HTTP/1.0\r\n\r\n| 表⽰探测时采取的动作,这⾥就是发送⼀个最⼩
的 GET 请求。
下⼀⾏的 rarity 表⽰该探测的罕见性。nmap 默认只会执⾏ rarity 7 以下的探测,不过可以通过 --version-intensity N 选项更改。
再往下,是需要执⾏该探测的端⼝列表。在发起识别服务的扫描之前,nmap 已经扫描出当前可⽤的端⼝列表了。对于列表中的端⼝,如果
它在某个探测的端⼝列表⾥,nmap 就会对该端⼝执⾏对应的探测。不⽤担⼼每个端⼝都执⾏许多探测会明显减慢扫描速度 —— nmap 会
并⾏扫描多个端⼝。
sslports 类似于 ports,不同之处在于⽣效的时间。当 nmap 完成 tls 握⼿后,会根据 sslports 登记的配置去运⾏对应的探测。
接下来是⼀连串的 match 语句。顾名思义,它们都是响应的匹配规则。其中 m 开头的是正则表达式,p 开头的是产品名字,v 开头的是版
本号,cpe 开头的是 cpe 编号, i 开头表⽰附加的信息。这⾥列出的匹配规则表⽰,如果 GET 请求对应的响应匹配到 ^HTTP/1\.[01]
\d\d\d.*?\r\nServer: nginx\r\n,说明对应的服务是 Nginx。单个产品可能会有多个与之相关的规则,⽐如 nmap 会有以下⽅法去匹配
Nginx:
1. 响应报头⾥包含 Server: nginx
2. 错误页⾯中包含 <center>nginx</center>
3. 构造⼀个畸形的 HTTP 请求,返回 <head><title>400 Bad Request</title></head>\r\n<h1>400 Bad Request</h1>
4. 向 HTTPS 端⼝发送 HTTP 请求,返回 HTTP/1.1 400 Bad Request\r\n.*<title>400 The plain HTTP request was sent to HTTPS
port</title>
match 语句最多只会匹配到⼀个服务。如果想匹配多个服务,⽐如 Nginx 代理的 PHP 应⽤,可以结合 softmmatch 使⽤。添加下⾯⼀
⾏:
softmatch http m|^HTTP/1\.[01] .*\r\nX-Powered-By: PHP/(\d[\w._-]+)|s i/PHP $1/
最后输出结果⾥会多⼀个括号:8080/tcp open http nginx (PHP 5.6.25)。
除了 HTTP 请求,nmap 也会⽤其他⽅式探测⽬标服务,⽐如这个为 Redis 量⾝定制的请求:Probe TCP redis-server
q|\*1\r\n\$4\r\ninfo\r\n|。甚⾄连 minecraft 都有:Probe TCP minecraft-ping q|\xFE\x01|。
nmap-service-probes 开头的 Probe TCP NULL q|| 值得介绍。这个 Probe 是为了检测出某些会主动给连上来的客户端发送数据的服务设置的。跟其他 Probe 不同,它不发送请求,只是⼲等 6 秒。当你给 nmap 抓包时,端⼝探测和服务识别间会相差 6 秒,就是这个探测导致的。
防震阻尼器
附赠⼀个列出所有可探测的服务的 Python 脚本:
import re
# 以实际位置替换下⾯的路径
nmap_service_probes_file = "/usr/local/share/nmap/nmap-service-probes"
pat = repile(r"^match .+ p/([^/]+)/ .+$")
溴代环丙烷products = set()
with open(nmap_service_probes_file) as f:
for line in f:
m = pat.search(line)
if m is not None and up(1).startswith('$'):
# 会存在 product 名中间含有 $xx 变量的情况,这⾥就忽略吧
products.up(1))
for p in sorted(list(products)):
温湿度控制系统print(p)
操作系统探测
跟 -sV 选项类似,有⼀个名为 -O 的选项可以开启操作系统探测的扫描功能。依本⼈的经验,nmap 的 操作系统探测的准确度仅到操作系统类型这⼀级,对于具体的版本,其扫描结果可能会不准。
扫描过程中会⽤到 nmap-os-db 这个⽂件⾥⾯的特征信息识别遇到的 OS。如果说 nmap-service-probes 相对还好阅读,那 nmap-os-db ⽆疑便是天书⼀般了。还好 nmap 的⽂档⾥⾯对此有充分的解释,参见:
操作系统探测利⽤的是 IP/TCP 层⾯上的特征。在 nmap-os-db ⾥⾯,每个特征以 Fingerprint 开头,接着是该特征对应的操作系统信息,然后是具体的特征值。
举个例⼦,像下⾯这样的特征数据:
Fingerprint Linux 3.10
灯管支架Class Linux | Linux | 3.X | general purpose
CPE cpe:/o:linux:linux_kernel:3.10 auto
SEQ(SP=FB-105%GCD=1-6%ISR=109-113%TI=Z%CI=I%II=I%TS=A)
OPS(O1=M548ST11NW7%O2=M548ST11NW7%O3=M548NNT11NW7%O4=M548ST11NW7%O5=M548ST11NW7%O6=M548ST11)
WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=3908%O=M548NNSNW7%CC=Y%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)

本文发布于:2024-09-21 20:25:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/201113.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:服务   探测   扫描
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议