繞過網站CDN查找網站真實ip方法大全(持續更新中)


這是一篇全網(無論國內還是國外)最全、最詳細、最新、最實用的關於 CDN 網絡對抗攻擊的文章,滲透測試中若碰到 CDN 類的問題,只需要看這一篇指南即可。我也會在 Github (https://github.com/bin-maker/2021CDN/)長期保持此文的更新,更新與修正新的對抗技術、工具和網站。

Content Delivery Network,中文全稱為內容分發網絡,簡稱為 CDN 。

使用 CDN 技術可以有效的提高網站的訪問速度和安全性,因此目前互聯網上,超過 50% 的 Alexa 前 1000 網站和超過 35% 的 Alexa 前 10000 的網站都部署在 CDN 網絡后面,所有請求網站內容的用戶都將從最近的 CDN 代理服務器獲取其緩存版本,因此內容加載速度更快,網站的性能得到改善。

具體 CDN 的相關原理網上都有闡述,有興趣的讀者可以去自行了解,本篇指南旨在攻擊,追求簡潔、高效、實用,就不再多贅述一些概念性相關的東西。


0x01 常見 CDN 服務商

一、國內 CDN 服務商

  • 阿里雲 CDN
  • 百度雲 CDN
  • 七牛雲 CDN
  • 又拍雲 CDN
  • 騰訊雲 CDN
  • Ucloud
  • 360 CDN
  • 網宿科技
  • ChinaCache
  • 帝聯科技

二、國外 CDN 服務商

  • CloudFlare
  • StackPath
  • Fastly
  • Akamai
  • CloudFront
  • Edgecast
  • CDNetworks
  • Google Cloud CDN
  • CacheFly
  • Keycdn
  • Udomain
  • CDN77

 

0x02 判斷網站是否使用了CDN

  • 反查域名 IP,看結果是否有大量不相關的域名存在
  • 觀察請求響應的返回數據的頭部,是否有 CDN 服務商標識
  • 使用超級 ping,通過不同定位地點的 ping 測試,看返回的 IP 是否不同
  • 判斷 IP 是否在常見 CDN 服務商的服務器 IP 段上
  • 若 asp 或者 asp.net 網站返回頭的 server 不是 IIS、而是 Nginx,則多半使用了nginx反向代理到 CDN
  • 利用 Nslookup 查詢域名,看是否返回多個應答 IP

 

0x03 如何繞過 CDN 朔源網站真實 IP

一、通過查詢 DNS 記錄 / IP 歷史記錄 / 子域名 等數據記錄

  • 很多網站只給關鍵的域名或者主域名做了 CDN,其下很多子域名沒有使用 CDN 服務,所以我們可以通過查詢目標網站的根域名、二級域名、三級域名甚至多級子域名來獲得真實IP。不過有時候查出來的並不是真實 IP,可能僅僅做了 A 記錄 ,這種情況下可以繼續掃描同 C 段的 IP 和端口,然后逐個探測是否為目標網站。
  • 在網站使用 CDN 服務之前,解析的是真實IP,所以可以查詢 DNS 歷史記錄,看是否能探測到使用 CDN 之前的 IP 。
  • DNS 解析記錄中重點關注 TXT 記錄和 SPF 記錄,是否有泄露真實IP。

1、在線查詢平台

1.SecurityTrails (https://securitytrails.com/)

SecurityTrails(前身為 DNS Trails)擁有大約3.5萬億DNS記錄,3億whois記錄,8億SSL證書記錄以及超過4.5億子域的記錄數據。自2008年以來,網站每天都收集和更新海量數據。

SecurityTrails 是我最常用的平台之一,免費、精准,數據量極其龐大,足夠支撐日常。

DNS 記錄:

IP歷史:

子域名:

2.Complete DNS(https://completedns.com/)

Complete DNS 擁有超過 22 億個DNS變更記錄,提供API,支持同時進行多域名/IP查詢。

3.WhoISrequest (https://whoisrequest.com/)

WhoISrequest 這個網站自2002年以來一直在跟蹤和記錄DNS歷史變更,數據底蘊很足。

這種時間線設計的UI風格很不戳,點贊。

4.Whoxy(https://www.whoxy.com/)

Whoxy 擁有爬取超過 3.65億個子域數據,該網站 API 調用非常方便,以 XML 和 JSON 格式返回數據。

5.微步Threatbook(https://x.threatbook.cn/)

Threatbook 微步在線針對 IP、域名 進行綜合查詢威脅情報、歷史記錄、子域名解析、DNS解析等等信息,支持 API 查詢,非常方便。

6.Netcraft(https://netcraft.com/)

Netcraft 不用多說了吧,很多人都知道,不過仁者見仁智者見智吧,經過時代的變遷,Netcraft 也不是曾經的那個少年了,這里只是提一下,僅供參考。

7.Viewdns(https://viewdns.info/)

Viewdns 可以說是非常的簡潔直觀了,就算你不懂任何英文,我相信你也看的懂,至少你知道在哪里輸入對吧。響應速度也是非常快了,首頁一目了然,集成了超多的查詢功能。

找你需要的功能查詢就好,用網站提供的 API 也可以

8.Whoisxmlapi(https://reverse-ip.whoisxmlapi.com/)

Whoisxmlapi 數據庫包含了超過1.4億多個域名生態數據,用來反查 IP 和 DNS 數據,在繞過 CDN 時候做反向對比非常有用。網站和 whoxy 一樣,也是以 XML 和 JSON 格式返回數據,支持自定義。

9.Dnsdb(https://dnsdb.io/)

Dnsdb 功能非常強大,老平台了,也是我常用平台之一。

搜索前可以先簡單學習一下搜索語法:

覺得難?不想學?那也沒關系,站長已經考慮到你這種懶人情況了,首頁就有給懶人准備的搜索構造器,十分友好:

10.SubDomainTools(https://ruo.me/sub)

在線子域名查詢,支持實時模式和后台模式,不阻塞前端線程,不占CPU,小測試的時候非常方便。

2、IOT 物聯網絡空間測繪搜索引擎

1.Censys(https://censys.io/)

Censys 可幫助安全從業人員發現可從Internet訪問的設備,包括 IP 地址、開放端口、物理定位、域名信息、托管服務商、SSL 證書 等等數據,從中發現需要的信息追蹤到網站真實的 IP 地址。

2.FOFA(https://fofa.so/)

FOFA 可以迅速進行網站資產匹配,加快后續工作進程,如漏洞影響范圍分析,應用分布統計,應用流行度排名統計等。FOFA 非常友好,即使免費,也可以查詢足夠多的數據量,只要你不是商用或者大需求用戶,是不需要開會員的。

3.Shodan(https://www.shodan.io/)

Shodan 被稱為互聯網上最強大的搜索引擎,主要是用來搜索網絡空間中在線設備的,可以通過 Shodan 搜索指定的設備,或者搜索特定類型的設備,它可以幫助安全研究人員找到有關他們所研究目標的有用信息。

語法特別強大,建議搜索前好好瀏覽一下篩選器文檔,可以達到事半功倍的效果。

4.Zoomeye

Zoomeye,鍾馗之眼,知道創宇打造的宇宙級網絡空間搜索引擎,Shodan 側重於主機設備,Zoomeye 則偏向於 Web 發現。

3、工具和腳本

1.SubDomainsBrute

項目地址:https://github.com/lijiejie/subDomainsBrute

SubDomainsBrute 是通過純 DNS 爆破來尋找子域名,為了最大提升腳本效率,采用協程+多進程的方式進行爆破。Python 3.5 以上需要安裝 aiodns 庫進行異步查詢,python 2 需要安裝 dnspython 庫和 gevent 協程庫。

之前是不支持掃描泛解析域名的,10月份作者更新已經支持泛解析,使用 -w 參數。

如圖,我們針對一個泛解析的域名進行爆破,subDomainsBrute 會提示 any-sub 錯誤,之后使用 -w 參數開啟泛解析強制爆破:

2.ESD

項目地址:https://github.com/FeeiCN/ESD

相比於的暴力收集手段,ESD 在很多方面有獨特的想法。

  • 基於RSC(響應相似度對比)技術對泛解析域名進行枚舉。
  • 基於aioHTTP獲取一個不存在子域名的響應內容,並將其和字典子域名響應進行相似度比對,超過閾值則說明是同個頁面,否則為可用子域名,並對最終子域名再次進行響應相似度對比。
  • 基於AsyncIO異步協程技術對域名進行枚舉。
  • 基於AsyncIO+aioDNS將比傳統多進程/多線程/gevent模式快50%以上。
  • 解決各家DNS服務商對於網絡線路出口判定不一致問題。
  • 解決各家DNS服務商緩存時間不一致問題。
  • 解決隨機DNS問題。
  • 根據網絡情況自動剔除無效DNS,提高枚舉成功率。

ESD 通過使用文本相似度,判斷閾值的方法來過濾泛解析,這種方法現在看來很笨重,我們可以自己修改腳本,否則因此會導致機器的內存、CPU都負荷,對機器性能要求比較高,且不支持 python2。

python3 環境下通過 pip 直接安裝:

$ pip install esd

基本用法(項目官方給出):

# 掃描單個域名 esd -d qq.com # debug模式掃描單個域名 esd=debug esd -d qq.com # 掃描多個域名(英文逗號分隔) esd --domain qq.com,tencent.com # 掃描單個域名且過濾子域名中單個特定響應內容 esd --domain mogujie.com --filter 搜本店 # 掃描單個域名且過濾子域名中多個特定響應內容 esd --domain mogujie.com --filter 搜本店,收藏店鋪 # 掃描文件(文件中每行一個域名) esd --file targets.txt # 跳過相似度對比(開啟這個選項會把所有泛解析的域名都過濾掉) esd --domain qq.com --skip-rsc # 使用搜索引擎進行子域名搜索(支持baidu、google、bing、yahoo,使用英文逗號分隔) esd --domain qq.com --engines baidu,google,bing,yahoo # 平均分割字典,加快爆破 esd --domain qq.com --split 1/4 # 使用DNS域傳送漏洞獲取子域名 esd --domain qq.com --dns-transfer # 使用HTTPS證書透明度獲取子域名 esd --domain qq.com --ca-info 

但是實際上我們從源碼出發,發現很多功能作者目前並未實現:

  parser = OptionParser('Usage: python ESD.py -d feei.cn -F response_filter -e baidu,google,bing,yahoo -p user:pass@host:port') parser.add_option('-d', '--domain', dest='domains', help='The domains that you want to enumerate') parser.add_option('-f', '--file', dest='input', help='Import domains from this file') parser.add_option('-F', '--filter', dest='filter', help='Response filter') parser.add_option('-s', '--skip-rsc', dest='skiprsc', help='Skip response similary compare', action='store_true', default=False) parser.add_option('-S', '--split', dest='split', help='Split the dict into several parts', default='1/1') parser.add_option('-p', '--proxy', dest='proxy', help='Use socks5 proxy to access Google and Yahoo') parser.add_option('-m', '--multi-resolve', dest='multiresolve', help='Use TXT, AAAA, MX, SOA record to find subdomains', action='store_true', default=False) parser.add_option('--skey', '--shodan-key', dest='shodankey', help='Define the api of shodan') parser.add_option('--fkey', '--fofa-key', dest='fofakey', help='Define the key of fofa') parser.add_option('--femail', '--fofa-email', dest='fofaemail', help='The email of your fofa account') parser.add_option('--zusername', '--zoomeye-username', dest='zoomeyeusername', help='The username of your zoomeye account') parser.add_option('--zpassword', '--zoomeye-password', dest='zoomeyepassword', help='The password of your zoomeye account') parser.add_option('--cuid', '--censys-uid', dest='censysuid', help="The uid of your censys account") parser.add_option('--csecret', '--censys-secret', dest='censyssecret', help='The secret of your censys account') (options, args) = parser.parse_args() 

不難發現 通過 HTTPS 證書透明度域傳送漏洞 等功能均未實現。

ESD 目前僅支持 Linux 系統,這是其源碼決定的,不過我們可以 DIY 讓它支持 windows

可以看到,engine.py 引擎腳本中,寫死了目錄是 /tmp/esd ,如果要在 windows 上使用,我們只需要替換這里為 windows 的輸出目錄即可。

 # write output tmp_dir = 'C:\\temp\\' if not os.path.isdir(tmp_dir): os.mkdir(tmp_dir, 0o777) output_path_with_time = '{td}/.{domain}_{time}.esd'.format(td=tmp_dir, domain=self.domain, time=datetime.datetime.now().strftime("%Y-%m_%d_%H-%M")) output_path = '{td}/.{domain}.esd'.format(td=tmp_dir, domain=self.domain) if len(self.data): max_domain_len = max(map(len, self.data)) + 2 else: max_domain_len = 2 output_format = '%-{0}s%-s\n'.format(max_domain_len) with open(output_path_with_time, 'w') as opt, open(output_path, 'w') as op: for domain, ips in self.data.items(): # The format is consistent with other scanners to ensure that they are # invoked at the same time without increasing the cost of # resolution if ips is None or len(ips) == 0: ips_split = '' else: ips_split = ','.join(ips) con = output_format % (domain, ips_split) op.write(con) opt.write(con) 

3.Layer 子域名挖掘機

項目地址:https://hub.fastgit.org/euphrat1ca/LayerDomainFinder/releases/tag/3

Seay 法師的作品,很早就有了,非常強大的一款 windows 上的 GUI 圖形化工具,經歷了數個版本的迭代,官方最新版是5.0,當然還有不計其數的網友自定義修改版本在野流傳。

4.Xray

項目地址:https://github.com/chaitin/xray

xray 是一款強大的安全評估工具,一款自動化掃描器,我們可以用其自帶的 subdomain 子域名發掘功能來針對性探測:

subdomain 功能支持暴力破解模式和非暴力模式,可以只探測 web 服務或者只探測 ip 可解析的子域,另外支持 webhook 數據傳遞,作為插件端或者分發消息的接收端來使用都非常方便快捷。

5.Bypass-firewalls-by-DNS-history

項目地址:https://github.com/vincentcox/bypass-firewalls-by-DNS-history

Bypass-firewalls-by-DNS-history 是一款集成全自動化的探測工具,通過探測 DNS 歷史記錄,搜索舊的 DNS A Record,收集子域,並檢查服務器是否對該域名進行答復。 另外它還基於源服務器和防火牆在HTML響應中的相似性閾值來判斷。

用法:

bash bypass-firewalls-by-DNS-history.sh -d example.com

-d --domain: domain to bypass
-o --outputfile: output file with IP's -l --listsubdomains: list with subdomains for extra coverage -a --checkall: Check all subdomains for a WAF bypass 

此外,類似的還有 subfinder 、dnsprobe 等等工具,有興趣的讀者可以自行去研究了解其工作原理和機制。

二、通過 Email 郵局

一般大型網站自己部署架設的郵件服務器如果向外部用戶發送郵件的話,如果中間未經任何數據處理和防護措施,那么郵件頭部的源碼中會包含此郵件服務器的真實 IP 地址。常見的郵件觸發點有:

  • RSS 訂閱
  • 郵箱注冊、激活處
  • 郵箱找回密碼處
  • 產品更新的郵件推送
  • 某業務執行后發送的郵件通知
  • 員工郵箱、郵件管理平台等入口處的忘記密碼

另外這里還有一個奇淫技巧,通過發送郵件給一個不存在的郵箱地址,比如 000xxx@domain.com ,因為該用戶不存在,所以發送將失敗,並且還會收到一個包含發送該電子郵件給你的服務器的真實 IP 通知。

生產上多關注這些點,一個不成功繼續測試下一個郵件觸發點,很多大型網站的郵件服務器不止一台,並不是所有都做了防護處理,細節決定成敗。

三、通過 SSL 證書

  • 證書頒發機構 (CA) 必須將他們發布的每個 SSL/TLS 證書發布到公共日志中,SSL/TLS 證書通常包含域名、子域名和電子郵件地址。因此可以利用 SSL/TLS 證書來發現目標站點的真實 IP 地址。
  • CDN 運營商在給服務器提供保護的同時,也會與其服務器進行加密通信(ssl),這時當服務器的 443 端口接入域名時也會在 443 端口暴露其證書,我們通過證書比對便可發現網站的真實 IP 地址。

1.利用 Censys 引擎(https://censys.io/)

  • Censys 搜索引擎能夠掃描整個互聯網,每天都會掃描 IPv4 地址空間,以搜索所有聯網設備並收集相關的信息,可以利用 Censys 進行全網方面的 SSL 證書搜索,找到匹配的真實 IP 。

可以看到,當我們針對一個互聯網 IP 地址進行搜索時,是有匹配到證書 sha1 簽名的

同理,我們根據域名指紋搜索 SSL 證書指紋,然后再反查 IP 就可以了。

首先針對目標域名,選擇 Certificates 證書搜索,結果出來一堆 有效 的證書和 無效 的證書:

測試過程中,很容易陷入思維誤區,認為 有效 的證書才是我們需要的,但其實並不一定,很多服務器配置錯誤依然保留的是 無效 的證書,就比如例子中,在結果特別多的情況下,我又使用 Censys 的語法搜索,來精准定位 有效 SSL 證書,減少結果:

parsed.names: xxx.com and tags.raw: trusted 

瞬間減少到了 2 個結果,我們逐個點開,然后 sha1 簽名反查 IPV4 主機:

不過很遺憾,兩條記錄全都沒查到:

這也從側面說明了,不是所有的網站只有其 有效 證書會匹配其 IP 服務器。

於是只能回到最開始,從所有的結果里面依次打開往下反查指紋,最終定位到了真實 IP :

安全不僅是個技術活,也是個細心活。

2.使用命令行

  • 通過 openssl 和 curl 等常見的基礎命令,也同樣可以達到反查 SSL 證書的效果。

openssl:

openssl s_client -connect 123.123.123.123:443 | grep subject 

curl:

curl -v https://123.123.123.123 | grep 'subject' 

3.使用工具和腳本

  • 通過自己寫工具腳本,集成前面的1、2兩點,完全可以做到一個簡易版的 SSL 全網證書爬取,也可以利用現有的一些腳本工具和網站,省的我們自己費力了。

例如 CloudFlair ,項目地址:https://github.com/christophetd/CloudFlair

腳本兼容 python2.7 和 3.5,需要配置 Censys API,不過只針對目標網站是否使用 CloudFlare 服務進行探測。

在 Censys 注冊一個賬號並進入 https://censys.io/account/api 獲取 API ID 和 Secret:

將 CloudFlair 克隆到本地並把 API ID 和 Secret 導入環境變量:

$ git clone https://github.com/christophetd/CloudFlair $ export CENSYS_API_ID="xxx" $ export CENSYS_API_SECRET="xxx" 

通過 requirements.txt 安裝依賴:

$ pip install -r requirements.txt

運行 cloudflair.py :

$ python cloudflair.py --censys-api-id xxx  --censys-api-secret xxx baidu.com


[*] The target appears to be behind CloudFlare.
[*] Looking for certificates matching "myvulnerable.site" using Censys [*] 75 certificates matching "myvulnerable.site" found. [*] Looking for IPv4 hosts presenting these certificates... [*] 10 IPv4 hosts presenting a certificate issued to "myvulnerable.site" were found. - 51.194.77.1 - 223.172.21.75 - 18.136.111.24 - 127.200.220.231 - 177.67.208.72 - 137.67.239.174 - 182.102.141.194 - 8.154.231.164 - 37.184.84.44 - 78.25.205.83 [*] Retrieving target homepage at https://myvulnerable.site [*] Testing candidate origin servers - 51.194.77.1 - 223.172.21.75 - 18.136.111.24 responded with an unexpected HTTP status code 404 - 127.200.220.231 timed out after 3 seconds - 177.67.208.72 - 137.67.239.174 - 182.102.141.194 - 8.154.231.164 - 37.184.84.44 - 78.25.205.83 [*] Found 2 likely origin servers of myvulnerable.site! - 177.67.208.72 (HTML content identical to myvulnerable.site) - 182.102.141.194 (HTML content identical to myvulnerable.site) 

其實完全可以通過 Censys 提供的 API 自己集成一款簡潔實用的全自動化探測腳本,如果后面我有時間寫好了,會同步更新到這里的。

4.證書收集

可以通過 https://crt.sh 進行快速證書查詢收集

附上查詢的 python 小腳本:

import requests import re TIME_OUT = 60 def get_SSL(domain): domains = [] url = 'https://crt.sh/?q=%25.{}'.format(domain) response = requests.get(url,timeout=TIME_OUT) ssl = re.findall("<TD>(.*?).{}</TD>".format(domain),response.text) for i in ssl: i += '.' + domain domains.append(i) print(domains) if __name__ == '__main__': get_SSL("baidu.com") 

獲得所有包含證書的子域:

四、通過海外 DNS 查詢

  • 針對國內市場用戶,大部分的 CDN 服務商並沒有做海外市場的 CDN ,所以可以通過尋找小眾、冷門的海外 DNS 查詢,看是否能獲得真實 IP 。
$ nslookup target.com <海外 DNS 地址>

也可以使用海外的超級ping類的平台在線多國家多地區測試,推薦 https://www.host-tracker.com/v3/check/ ,支持 140 多個地區的 ping 測試,另外支持針對某子域超長期的監控,通過郵件通知,簡直太強大了。

五、通過敏感文件泄露

包括但不限於:

  • 服務器日志文件
  • 探針文件,例如 phpinfo
  • 網站備份壓縮文件
  • .DS_Store
  • .hg
  • .git
  • SVN
  • Web.xml

字典非常重要,往往疏忽的點就在一台邊緣服務器。

六、通過變更的域名

  • 很多網站在發展的過程中,會更換域名,比如京東以前的域名是 360buy.com ,后來斥巨資購買了 jd.com 。
  • 網站在更換新域名時,如果將 CDN 部署到新的域名上,而之前的域名由於沒過期,可能未使用 CDN,因此可以直接獲得服務器 IP,所以,歷史域名也是一個很重要的點。

七、 通過 APP 移動端應用

  • 如果網站存在 APP ,可以通過抓包分析其 APP 的數據流量,看是否能找到網站真實 IP 地址,記得關注 APP 的歷史版本,里面會有很多 surprise 。

八、通過 F5 LTM 解碼

  • LTM 是將所有的應用請求分配到多個節點服務器上。提高業務的處理能力,也就是負載均衡。
  • 當服務器使用 F5 LTM 做負載均衡時,通過對 set-cookie 關鍵字的解碼,可以獲取服務器真實 ip 地址。

例如:

Set-Cookie: BIGipServerpool_9.29_5229=605532106.22012.0000
  • 先把第一小節的十進制數,即 605532106 取出來
  • 將其轉為十六進制數 2417afca
  • 接着從后至前,取四個字節出來: CA AF 17 24
  • 最后依次轉為十進制數 202.175.23.36,即是服務器的真實 ip 地址。

九、通過 CDN 標頭特征值

很多網站啟用 CDN 后,配置了拒絕直接訪問真實 IP ,比如 CloudFlare 的提示:

因此可以通過匹配特征標頭的方法,去縮小范圍,這里還是使用 Censys 查詢:

語法: <port>http.get.headers.server:<CDN特征>

eg: 80.http.get.headers.server:cloudflare

針對整個互聯網的搜索 IP 結果進一步匹配,比如通過 端口、地理位置、banner 特征、反查郵箱、聯系方式等等信息,繼續精確結果:

十、通過 XML-RPC PINGBACK 通信

  • XML-RPC 是支持 WordPress 與其他系統之間通信的規范,它通過使用 HTTP 作為傳輸機制和 XML 作為編碼機制來標准化這些通信過程。
  • 在 WordPress 的早期版本中,默認情況下已關閉 XML-RPC,但是從3.5版本開始,默認情況下開啟。
  • XML-RPC 支持 trackback 和 pingback。
  • 雖然 WordPress 啟用了 REST API 來代替 XML-RPC ,不過 XML-RPX 不會過時的,放心大膽的使用就好,雖然 XML-RPC 這個技術很老了,但依然可以通殺很多網站。

配置好 dnslog,POST 請求 XML-RPC:

POST /xmlrpc.php HTTP/1.1
Host: domain.com
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 323

<?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>pingback.ping</methodName> <params> <param> <value><string>http://2vbis4.dnslog.cn</string></value> </param> <param> <value><string>https://domain.com/</string></value> </param> </params> </methodCall> 

響應:

刷新一下 dnslog ,獲得了真實服務器 IP:

十一、通過 FTP/SCP 協議

  • 在很多情況下,網站需要將數據流從外部傳輸到內部服務器上,最安全的做法肯定是在用戶和服務器之間建立虛擬專用網絡(V*P+N 防和諧)。
  • 但實際上,仍然有大量可從外部訪問的 FTP / SCP 服務,從而容易被抓住機會找到源 IP 地址。

十二、利用 Websocket 協議

  • CloudFlare 等 CDN 服務商其實早就支持對 Websocket 的保護了,但太多的站長,不管大站小站,他們很多人都不知道,或者沒有針對 Websocket 進行部署。
  • 另一種原因是因為業務上的需求,畢竟 Websocket 要求客戶端和服務器之間保持長久的連接,所以很有可能沒有進行 CDN 部署。

十三、通過社會工程學

  • 凱倫·王,21世紀初傑出初思想家、哲學家、社會學家、經濟學家,社會工程學的鼻祖,括弧,自稱的。
  • http://www.333ttt.com/up/up2103510950.html,熟悉的 BGM 響起來,好似又回到了辣一段青蔥歲月。
  • 估計有人笑了,不過啊,可真別小看社工的威力,有多少大廠、運營商是倒在了社會工程學腳下的,郵件釣魚、水坑攻擊、物理社工、身份偽裝、客服欺騙、商務咨詢 等等,案例數不勝數,不勝枚舉。
  • 因為人不是機器,只要是人,那就一定存在漏洞。
  • 哦對,順帶推薦部電影,小李子的《貓鼠游戲》。

十四、通過網站漏洞

  • 如果目標網站本身存在漏洞的話,比如 SSRF、XXE、XSS、文件上傳、命令執行等漏洞,或者我們找到的其他突破口,注入我們自己的帶外服務器地址,然后在服務器上檢查 HTTP 日志記錄。
  • 應用本身的錯誤會造成當傳遞一些錯誤的參數值或者錯誤的地址時,內部會拋出異常,也就是日常所說的報錯,關注報錯點,經常會泄露一些真實的 IP 地址或者內網 IP 段。

十五、通過全網掃描

  • 什么年代了啊,怎么還在說全網掃描。為了寫全方法,這里還是提一下。
  • 首先從 apnic 網絡信息中心 或 IPdeny 獲取目標地區 ip 段。
  • 接着使用 Zmap、masscan 等工具對掃描出來端口開放的主機進行 banner 爬取。
  • 然后在 http-req 的 Host 字段,寫入我們需要尋找的子域。
  • 最后過濾特征,確認是否有對應的服務器響應。
  • 哦對了,如果端口不是常見或者固定,當場退役。
  • 實際上,全網掃描的方法十分笨重,不推薦。因為已經有很多的網站給我們提供了全網爬取服務,之前的方法里都有介紹到,何必自己全網掃描呢,受限於網絡、受限於設備,你個人爬的數據能有人家商業爬的全嗎?

十六、通過 virtual-host 碰撞

  • 當我們收集了目標足夠多的可能的真實 IP 時,可以通過 IP 和子域的碰撞,來批量獲得命中目標以及目標哪些的子域。

IP 正確,子域錯誤:

IP 正確,子域正確:

IP 錯誤,子域正確:

自動化的過程可以使用 virtual-host-discovery 工具,項目地址:https://github.com/jobertabma/virtual-host-discovery

克隆到本地

$ git clone https://github.com/jobertabma/virtual-host-discovery 

使用方法:

$ ruby scan.rb --ip=x.x.x.x --host=domain  --wordlist=<dict file>

其中wordlsit 參數可以省略,默認有一個字典加載,使用該參數則是指定我們自己想要跑的子域列表。

執行后,即可快速找出命中 IP 的子域

另外可以通過 find-virtual-hosts (https://pentest-tools.com/information-gathering/find-virtual-hosts#)工具來在線快速針對全網數據掃描比對得出結果:

十七、通過 favicon.ico 哈希特征

  • favicon.ico 是現代瀏覽器在網頁標題的左側顯示的一個小圖標。
  • 該圖標數據通常是從 https://anywebsite/favicon.ico 處獲取的,瀏覽器會在瀏覽任何網站時自動請求它。
  • 因為可以通過計算 favicon.ico 的指紋哈希,然后去 shodan 等搜索引擎搜索與之相同的主機結果,從而進一步探測是否能挖掘出目標網站的真實 IP 地址。

計算 favicon.ico 哈希的小腳本:

python 2

import mmh3 import requests response = requests.get('https://domain.com/favicon.ico') favicon = response.content.encode('base64') hash = mmh3.hash(favicon) print hash 

python 3

import mmh3 import requests import codecs response = requests.get('https://domain.com/favicon.ico') favicon = codecs.encode(response.content,"base64") hash = mmh3.hash(favicon) print(hash) 

安裝好環境依賴后執行腳本,計算得到目標網站的 favicon.ico 哈希值:

$ apt-get install build-essential
$ apt-get install gcc
$ apt-get install g++
$ python 3.py

然后用 shodan 搜索引擎搜索哈希,去命中 IP:

$ proxychains shodan search http.favicon.hash:1730752770 --fields ip_str,port --separator " " | awk '{print $1": 

另外值得一提的是,滲透過程中同樣可以根據 favicon 哈希、子域、IP 的命中,做好指紋排序並整理,另外做一張常見的中間件或者組件指紋哈希表,分類進行資產快速命中:

十八、通過網頁源碼特征值

  • 在服務器源 IP 地址允許訪問並且返回的也是類似的網站內容情況下,可以通過偵察頁面源碼中 JS 、CSS 、HTML 等一系列靜態特征值,然后用 Shodan 、Zoomeye 、Censys 等搜索引擎進行匹配搜索,從而定位 IP 。

例如源碼中找到一段 Google Analytics 的 JS 特征:

然后 shodan 搜索這些代碼特征:

http.html:UA-XXXXX-X
http.html:GTM-XXXXXX

定位到了服務器源 IP :

十九、通過網站遠程資源業務

  • 多找一下目標網站上支持遠程圖片、遠程文件等被動連接的業務地方,通過注入我們自己服務器的資源文件,然后查看 HTTP 日志來定位目標服務器的連接。
  • 常見的比如加載遠程頭像處。

二十、通過 CDN 機器

  • 有些網站是自搭建 CDN 機器做負載均衡的,很難保證每一台 CDN 機器都做到 100% 安全。沒有辦法的情況下,可以嘗試針對這些 CDN 機器進行滲透測試,如果能拿下一台,就什么都有了,目標主站的安全性好並不代表所有的生產邊路都不存在缺陷,安全不在於真正強的地方有多強,而在於薄弱的地方有多弱。

二十一、通過流量耗盡、流量放大攻擊

  • CDN 是收費的,那么其流量一定是有限的,對一些不是超大型目標網站在進行測試時,注意,一定要在項目方授權允許的情況下,可以嘗試進行 ddos 流量測試。
  • CDN 流量耗盡了,就不存在內容分發了,直接就可以拿到源 IP 。
  • 但是,CDN 是流量穿透的,別流量耗盡前,目標網站先 gg 了。
  • 另一種比較古老的做法是通過 CDN 設置中的自身缺陷,將要保護的源站 IP 設置成為 CDN 節點的地址,致使 CDN 流量進入死循環,一層層放大后,最終自己打死自己。不過大多數的 CDN 廠商早已限制禁止將 CDN 節點設置成 CDN 節點 IP ,並且啟用了自動丟包保護機制。

二十二、通過域名備案信息廣域探測

  • 針對目標域名,目標二級域名,如果都做了 CDN 的情況下,是不是就思路中斷了呢?
  • 肯定不是。這里分享一個很少有人去關注的獨門秘技。
  • 網站需要服務器,但是再土豪的公司,也不可能一個域名一台服務器,大多數情況下,都是多個域名業務,共用一台服務器。
  • 那么如果目標網站存在備案,可以查詢其備案信息,收集該單位或者個人備案的其他網站域名以及其他子域,然后再進行一輪廣域的探測,很有可能其中的某個邊緣子域,沒有做 CDN,就直接暴露了真實服務器的 IP 地址,然后再進一步驗證該 IP 是否也是目標網站的真實 IP 。

  • 特別提一哈,此方法成功率特別的高,而且找到的速度非常的快,所以寫在后面,有毅力堅持讀下來的同學可以看到。

二十三、利用 CDN 服務商默認配置

  • 不同的 CDN 服務商,產品默認配置不同。
  • 例如 CloudFlare ,默認配置 direct.domain.com 二級子域指向服務器源 IP。但是很多公司或者個人使用 CDN 保護的時候並沒有修改默認配置,導致 IP 泄露風險。
  • 其他一些高風險的子域如 ftp、mail、cpanel、direct-connect 等也可以重點關注,方便快速定位,畢竟眾測里時間就是金錢。

二十四、通過 SSH 指紋

  • 跑題了,SSH 指紋一般應用於匿名 Tor 網絡追蹤

二十五、使用 CloudFair 工具

  • 如果你的目標是 CloudFlare 保護的,建議先上這款工具跑。
  • CloudFail 是一種戰術偵察工具,旨在收集有關受 Cloudflare 保護的目標的足夠信息,以期發現服務器的 IP 位置。

該工具目前探測經過3個不同的攻擊階段:

1.使用 DNSDumpster.com 掃描 DNS 配置錯誤。
2.掃描和比對 Crimeflare.com 數據庫。
3.內置字典暴力掃描超過11000個子域名。

安裝和使用:

$ git  clone https://github.com/m0rtem/CloudFail $ pip install -r requirements.txt $ python cloudfail.py -t domain.com ____ _ _ _____ _ _ / ___| | ___ _ _ __| | ___|_ _(_) | | | | |/ _ \| | | |/ _` | |_ / _` | | | | |___| | (_) | |_| | (_| | _| (_| | | | \____|_|\___/ \__,_|\__,_|_| \__,_|_|_| v1.0.2 by m0rtem [16:12:31] Initializing CloudFail - the date is: 07/01/2021 [16:12:31] Fetching initial information from: domain.com... [16:12:31] Server IP: 104.xx.x.76 [16:12:31] Testing if domain.com is on the Cloudflare network... [16:12:31] domain.com is part of the Cloudflare network! [16:12:31] Testing for misconfigured DNS using dnsdumpster... [16:12:35] [FOUND:HOST] domain.com HTTP: cloudflare TCP8080: cloudflare 172.xx.xx.62 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] freelance.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] www.freelance.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] ctf.domain.com HTTP: nginx/1.10.3 HTTPS: nginx/1.10.3 SSH: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u7 185.231.245.55 TEAM-HOST AS Russia [16:12:35] [FOUND:HOST] www.ctf.domain.com HTTP: nginx/1.10.3 HTTPS: nginx/1.10.3 SSH: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u7 185.231.245.55 TEAM-HOST AS Russia [16:12:35] [FOUND:HOST] mail.domain.com 62.213.11.246 ROSTELECOM-ASRussia Russia [16:12:35] [FOUND:HOST] school.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] www.school.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] pentest.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] www.pentest.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] w.domain.com HTTP: nginx/1.6.2 HTTPS: nginx/1.6.2 SSH: SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u8 185.xx.xx.136 TEAM-HOST AS Russia [16:12:35] [FOUND:HOST] www.w.domain.com HTTP: nginx/1.6.2 HTTPS: nginx/1.6.2 SSH: SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u8 185.xx.xx.136 TEAM-HOST AS Russia [16:12:35] [FOUND:HOST] www.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] pay.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:HOST] www.pay.domain.com HTTP: cloudflare TCP8080: cloudflare 104.xx.xx.76 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:DNS] tim.ns.cloudflare.com. 173.xx.xx.145 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:DNS] tina.ns.cloudflare.com. 173.xx.xx.230 CLOUDFLARENETUnited States United States [16:12:35] [FOUND:MX] 62.xx.xx.246 ROSTELECOM-ASRussia 10 mail.domain.com. [16:12:35] [FOUND:MX] 62.xx.xx.246 ROSTELECOM-ASRussia 20 mail.domain.com. [16:12:35] Scanning crimeflare database... [16:12:36] [FOUND:IP] 62.xx.xx.230 [16:12:36] [FOUND:IP] 62.xx.xx.246 [16:12:36] Scanning 11219 subdomains (subdomains.txt), please wait... [16:15:52] [FOUND:SUBDOMAIN] mail.domain.com IP: 62.xx.xx.246 HTTP: 200 [16:16:13] [FOUND:SUBDOMAIN] pay.domain.com ON CLOUDFLARE NETWORK! [16:16:35] [FOUND:SUBDOMAIN] school.domain.com ON CLOUDFLARE NETWORK! [16:17:03] [FOUND:SUBDOMAIN] w.domain.com IP: 185.xx.xx.136 HTTP: 200 [16:17:10] [FOUND:SUBDOMAIN] www.domain.com ON CLOUDFLARE NETWORK! [16:17:14] Scanning finished... 

閉眼休息一會,一會就跑出來了:

喜歡偷懶的同學可以使用在線查詢:https://suip.biz/?act=cloudfail 已經將此工具集成到了后台,並做了前端 UI 頁面供安全信息從業人員在線查詢:

腳本執行的結果前端直接可以看到,另外提供 PDF 報告下載,這里我用的是 baidu.com 測試,因為 baidu.com 並沒有使用 CloudFlare CDN ,所以速度很快。

如果是查詢使用了 CloudFlare CDN 的域名,速度會比較慢,頁面會置空,什么都不顯示:

稍等一段時間就可以了,這里也給大家截個圖,防止有同學誤會工具不可以使用:

 

0x04 找到真實 IP 后如何使用

  • 通過修改 hosts 文件,將域名和 IP 綁定。(要是不會,不建議閱讀此文。)
  • 如使用 burpsuite 測試,可以在 Project options ——> Connections ——> Hostname Resolution 中增加域名和 IP 記錄。

 

0x05 來自高緯度的對抗

  • 協議層的管制 / 動靜態表 / 出口阻斷 / 並發機制轉換 / 編碼放大 …… 等等高緯度對抗的內容,將在(二)中細細道來。(未完待續)

 

-------------------------------------邪惡分割線---------------------------------

testssl據說也可以

 

 

 

 

 

 

 

 

參考:https://www.anquanke.com/post/id/227818


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM