Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86387641

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00 前言在滲透測試中,為了蒐集信息,常常需要從外網獲得Exchange服務器的內網IP,公開資料顯示msf的auxiliary/scanner/http/owa_iis_internal_ip插件支持這個功能,但是這個插件公開於2012年,已不再適用於Exchange 2013、2016和2019,本文將要介紹一種更為通用的方法,開源代碼,記錄細節。

0x01 簡介本文將要介紹以下內容:

owa_iis_internal_ip插件介紹

更為通用的方法

Python開源代碼

0x02 owa_iis_internal_ip插件介紹msf的auxiliary/scanner/http/owa_iis_internal_ip插件支持探測Exchange服務器的內網IP,對應kali系統下的位置為:/usr/share/metasploit-framework/modules/auxiliary/scanner/http/owa_iis_internal_ip.rb

github上的地址為:https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/http/owa_iis_internal_ip.rb

通過閱讀源碼,可以總結出實現原理:

設置HTTP協議為1.0並訪問特定URL

在返回數據中,如果狀態碼為401,在Header中的'WWW-Authenticate'會包含內網IP

在返回數據中,如果狀態碼位於300和310之間,在Header中的'Location'會包含內網IP

在提取IP時,使用正則表達式(192\.168\.[0-9]{1,3}\.[0-9]{1,3}|10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|172\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}),這裡存在bug:只能篩選出格式為'192.168.*.*'的內網IP

為了修復這個bug,可以將正則表達式修改為([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|172\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

注:

修改插件後需要執行命令reload_all來重新加載msf插件

修復上面的bug後,我在測試Exchange 2013、2016和2019時仍然無法獲得準確的內網IP

0x03 更為通用的方法這裡給出一種基於owa_iis_internal_ip插件的方法,使用Python實現,適用範圍更廣

思路如下:

利用Python設置HTTP協議為1.0並訪問特定URL,在報錯結果中暴露出Exchange服務器的內網IP

需要細節如下:

(1)Python設置HTTP協議為1.0

Python2:

importrequests

importhttplib

httplib.HTTPConnection._http_vsn=10

httplib.HTTPConnection._http_vsn_str='HTTP/1.0'Python3:

importrequests

fromhttpimportclient

client.HTTPConnection._http_vsn=10

client.HTTPConnection._http_vsn_str='HTTP/1.0'(2)設置訪問URL

owa_iis_internal_ip插件中提到的URL:

urls=['/Microsoft-Server-ActiveSync/default.eas',

'/Microsoft-Server-ActiveSync',

'/Autodiscover/Autodiscover.xml',

'/Autodiscover',

'/Exchange',

'/Rpc',

'/EWS/Exchange.asmx',

'/EWS/Services.wsdl',

'/EWS',

'/ecp',

'/OAB',

'/OWA',

'/aspnet_client',

'/PowerShell']經過多個環境的測試,更為精確的URL如下:

urls=['/OWA',

'/Autodiscover',

'/Exchange',

'/ecp',

'/aspnet_client'](3)測試代碼

#python3

importrequests

importurllib3

urllib3.disable_warnings()

fromhttpimportclient

client.HTTPConnection._http_vsn=10

client.HTTPConnection._http_vsn_str='HTTP/1.0'

try:

url='https://mail.test.com/OWA'

response=requests.get(url,verify=False)

print(response.status_code)

print(response.text)

print(response.headers)

exceptExceptionase:

print(e)回顯結果:

HTTPSConnectionPool(host='192.168.1.1', port=443): Max retries exceeded with url:/owa/auth/logon.aspx?url=https://192.168.1.1/OWA/reason=0 (Caused by NewConnectionError('

從報錯信息中,我們可以看到Exchange服務器的IP,這裡只需要加一個正則表達式host='(.*?)',即可提取出來IP

0x04 開源代碼完整的實現代碼已上傳至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/Exchange_GetInternalIP.py

代碼支持5種方式探測內網IP

目前測試結果顯示,該腳本支持Exchange 2010、2013、2016和2019,能夠穩定獲得內網IP

0x05 小結本文分析了msf的auxiliary/scanner/http/owa_iis_internal_ip插件,對於獲得Exchange服務器的內網IP,給出了一個更為通用的方法,開源代碼,記錄細節。