跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透基础——Exchange版本检测和漏洞检测

精选回复

发布于

0x00 前言

Exchange版本多,历史漏洞多,需要通过程序实现版本检测和漏洞检测。本文将介绍通过Python进行版本检测的两种方法,并介绍漏洞检测和开源代码的实现细节。

0x01 简介

本文将介绍以下内容:

实现理念

实施细节

开放源代码

0x02 实现思路

1.版本识别

(1)获得精确版本(Build number)

访问EWS接口,具体版本可以通过响应头中的X-OWA-Version获取,如下图所示

2-1.png

优点:确切的版本(内部版本号)可以对应具体的发布日期。

缺点:方法不通用,部分旧版Exchange不支持。

(2)获得粗略版本

访问OWA界面,回显内容时可以得到大致版本,如下图所示

2-2.png

优点:方法通用。

缺点:粗略的版本无法对应确切的发布日期,只能对应一个范围。

综上所述,在版本识别中,首先尽量获取精确版本,如果不能,再尽量获取粗略版本。

获得版本号后,可以去官网查询对应的Exchange版本和发布日期。查询地址是:https://docs . Microsoft . com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019

2.漏洞检测

例如,可以通过访问https://msrc.microsoft.com/update-guide/vulnerability/,来查看Exchange漏洞的详细信息:

CVE-2020-0688对应的网址:https://msrc . Microsoft . com/update-guide/vulnerability/CVE-2020-0688

在漏洞检测中,补丁时间可以作为判断依据。如果所识别的交换机版本的发布日期低于补丁日期,则判断该交换机具有补丁中描述的漏洞。

0x03 实现细节

1.版本识别

访问EWS接口,获取版本的实现代码:

url1='https://'主机'/ews '

req=requests.get(url1,headers=headers,verify=False)

如果请求标头中有“X-OWA-版本”:

Version=req . headers[' X-OWA-版本']

打印(版本)

访问OWA接口,获取版本的实现代码:

url2='https://'主机'/owa '

req=requests.get(url2,headers=headers,verify=False)

pattern _ version=re . compile(r '/OWA/auth/(。*?)/themes/resources/favicon . ico’)

version=pattern _ version . find all(req . text)[0]

打印(版本)

获得版本号后,需要与已知的版本信息进行匹配。为了提高效率,可以选择将已知的版本信息存储在列表中。这些元素包括Exchange版本、发布时间和内部版本号。

首先从官网复制已知的版本信息,然后通过字符串替换的方式将版本信息存储在列表中。

在版本匹配中,需要区分精确版本和粗略版本,精确版本可以对应唯一的结果,而粗略版本需要筛选出所有可能的结果。

数字格式示例:15.1.2375.24

粗略版本格式示例:15.1.2375

版本的粗略筛选方法:

截取内部版本号字符串,删除最后一个字符“.”后的数据,将数据与粗略版本进行比较,并输出所有结果。

代码示例:

versionarray=[

[' Exchange Server 2019 CU11 mar 22 su ',' 2022年3月8日',' 15.2.986.22'],

[' Exchange Server 2019 CU11 Jan 22su ',' 2022年1月11日',' 15.2.986.15'],

[' Exchange Server 2019 CU11 nov21 su ',' 2021年11月9日',' 15.2.986.14'],

[' Exchange Server 2019 CU11 oct 21 su ',' 2021年10月12日',' 15.2.986.9'],

['Exchange Server 2019 CU11 ',' 2021年9月28日',' 15.2.986.5'],

[' Exchange Server 2019 CU10 mar 22 su ',' 2022年3月8日',' 15.2.922.27']

]

版本='15.2.986 '

对于versionarray中的值:

如果版本在值[2]中[:值[2]。rfind(' . ')]:

打印('[ ]版本: '值[2])

打印('产品: '值[0])

打印('日期: '值[1])

2.漏洞检测

以补丁时间作为判断依据,为了提高效率,将已知漏洞信息存储在列表中,元素包括发布时间和漏洞编号。

为了比较时间,需要改变时间格式,比如2021年9月28日到2021年9月28日。

代码示例:

vularray=[

['CVE-2020-0688 ',' 2020年2月11日'],

['CVE-2021-26855 CVE-2021-27065 ',' 2021年2月3日'],

['CVE-2021-28482 ',' 2021年4月13日']

]

日期=' 2021年3月1日'

对于vularray中的值:

if (date.split('/')[2] value[1]。split('/')[2]):

打印('[ ]'值[0]','值[1])

否则:

if(date . split('/')[2]==value[1]。split('/')[2])(date . split('/')[0]value[1]。split('/')[0]):

打印('[ ]'值[0]','值[1])

否则:

if(date . split('/')[2]==value[1]。split('/')[2])(date . split('/')[0]==value[1]。split('/')[0])(date . split('/')[1]value[1]。split('/')[1]):

打印('[ ]'值[0]','值[1])

0x04 开源代码

由于代码内容较长,完整的实现代码已经上传到github的以下地址:

https://github . com/3g student/Homework-of-Python/blob/master/Exchange _ GetVersion _ match vul . py

数据库的日期是2022年3月21日。

漏洞信息包括以下数字:

CVE-2020-0688

CVE 2021-26855 CVE 2021-27065

CVE-2021-28482

CVE 2021-34473 CVE 2021-34523 CVE 2021-31207

CVE 2021-31195 CVE 2021-31196

CVE-2021-31206

CVE-2021-42321

代码可以自动识别准确的版本。如果不能,它可以改为识别粗略版本,并标记所有匹配的漏洞。

0x05 小结

介绍了通过Python进行Exchange版本检测的两种方法,并介绍了实现细节和开源代码,作为很好的学习范例。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。