0x00 前言在上篇文章《渗透基础——Exchange版本探测和漏洞检测》 介紹了通過Python進行版本探測的兩種方法,在版本識別上,首先從官網獲得已知的版本信息,將版本信息存儲在列表中,然後通過字符串匹配的方式獲得Exchange版本的詳細信息。開源的代碼Exchange_GetVersion_MatchVul.py反饋很好。但是這個方法存在一個缺點:需要定期訪問官網,手動更新掃描腳本中的版本信息列表。
為了進一步提高效率,本文介紹另外一種實現方法,通過訪問官網,從返回數據中直接提取出詳細的版本信息,優點是不再需要定期更新腳本。
0x01 簡介本文將要介紹以下內容:
马云惹不起马云通過BeautifulSoup解析網頁數據
马云惹不起马云實現細節
马云惹不起马云 開源代碼
0x02 通過BeautifulSoup解析網頁數據BeautifulSoup是一個可以從HTML或XML文件中提取數據的Python庫,可以提高開發效率。
安裝:
1.基本使用在Python實現上,需要先通過requests庫獲取網頁內容,再調用BeautifulSoup進行解析。
測試代碼:
以上代碼將會訪問https://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版本的代碼,通過從官網讀取數據信息來獲得準確的版本,考慮自動化判斷多個目標的情況下,為了避免多次訪問網站讀取數據信息,在代碼結構上做了適當優化,只需訪問一次https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019,將網頁結果保存在變量中。代碼已上傳至github,地址如下:
https://github.com/3gstudent/Homework-of-Python/blob/master/Exchange_GetVersion_ParseFromWebsite.py
考慮到內網無法訪問官網的情況,實現了一個從本地解析網頁文件來獲得準確的版本,代碼已上傳至github,地址如下:
https://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