【技術原創】滲透基礎——Exchange版本探測的優化

語言: CN / TW / HK

0x00 前言

在上篇文章 《滲透基礎——Exchange版本探測和漏洞檢測》 介紹了通過Python進行版本探測的兩種方法,在版本識別上,首先從官網獲得已知的版本資訊,將版本資訊儲存在列表中,然後通過字串匹配的方式獲得Exchange版本的詳細資訊。開源的程式碼Exchange_GetVersion_MatchVul.py反饋很好。但是這個方法存在一個缺點:需要定期訪問官網,手動更新掃描指令碼中的版本資訊列表。

為了進一步提高效率,本文介紹另外一種實現方法,通過訪問官網,從返回資料中直接提取出詳細的版本資訊,優點是不再需要定期更新指令碼。

0x01 簡介

本文將要介紹以下內容:

· 通過BeautifulSoup解析網頁資料

· 實現細節

·開原始碼

0x02 通過BeautifulSoup解析網頁資料

BeautifulSoup是一個可以從HTML或XML檔案中提取資料的Python庫,可以提高開發效率。

安裝:

1.基本使用

在Python實現上,需要先通過requests庫獲取網頁內容,再呼叫BeautifulSoup進行解析。

測試程式碼:

以上程式碼將會訪問http://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019,將網頁資料交由BeautifulSoup進行優化並顯示。

執行程式碼的部分輸出結果示例:

對於以上結果,每個"tr"節點對應一個版本資訊,子節點"td"為具體的版本細節。

2.只篩選出"tr"節點的內容

測試程式碼:

執行程式碼的部分輸出結果示例:

接下來,嘗試去除無效資料。

3.提取出版本資訊

測試程式碼:

執行程式碼的部分輸出結果示例:

接下來,可以嘗試對精確版本進行匹配。

4.精確匹配版本

測試程式碼:

執行程式碼的輸出結果示例:

對於Exchange較老的版本,無法獲得準確的版本號,所以還需要實現粗略匹配版本的功能。

5.粗略匹配版本

測試程式碼:

執行程式碼的輸出結果示例:

6.提取出網頁資料時間

為了能夠準確獲得版本資訊,這裡還需要提取出網頁資料的更新時間。

標記網頁資料時間的位置:

定位該時間的程式碼:

執行程式碼的輸出結果示例:

提取出時間的程式碼:

執行程式碼的輸出結果示例:

結合以上資訊,我們可以寫出新的識別Exchange版本的程式碼,通過從官網讀取資料資訊來獲得準確的版本,考慮自動化判斷多個目標的情況下,為了避免多次訪問網站讀取資料資訊,在程式碼結構上做了適當優化,只需訪問一次http://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019,將網頁結果儲存在變數中。程式碼已上傳至github,地址如下:

http://github.com/3gstudent/Homework-of-Python/blob/master/Exchange_GetVersion_ParseFromWebsite.py

考慮到內網無法訪問官網的情況,實現了一個從本地解析網頁檔案來獲得準確的版本,程式碼已上傳至github,地址如下:

http://github.com/3gstudent/Homework-of-Python/blob/master/Exchange_GetVersion_ParseFromFile.py

可以先訪問官網並將網頁內容儲存為exchange.data,再執行指令碼Exchange_GetVersion_ParseFromFile.py即可

0x03 小結

本文介紹了在Exchange版本識別上的優化方法,可以不必手動更新掃描指令碼中的版本資訊列表,開原始碼Exchange_GetVersion_ParseFromWebsite.py和Exchange_GetVersion_ParseFromFile.py

本文為 3gstudent 原創稿件,授權嘶吼獨家釋出,如若轉載,請註明原文地址