干貨 | HOST碰撞漏洞挖掘技巧
0x01 前言
在實戰中,我們總會對一個企業進行資產收集,在這個過程中會收集到許多資產,有域名有 ip
但有的時候打開的域名指向的是一個內網 ip 非常無奈 :(
而打開的 ip 狀態碼更是直接顯示 400,403,404 禁止我們訪問
還有一種狀態碼顯示 200 但是輸入啥都沒啥變化的
同時對它們進行目錄掃描,也是常常沒有結果
那么這種情況下, HOST 碰撞技術就可以嘗試使用了
0x02 host 碰撞原理
當數據包的 host 頭替換為某個域名時在訪問該反代服務器的 ip, 如果 nginx/Apache 的反向代理的 host 配置沒刪除,就會把請求轉發到內網對應的 host 業務服務器上, 接著返回該業務的信息, 實現本該隱藏的業務訪問
簡單點就是: 當數據包的 host 頭替換為某個域名時在訪問時該反代服務器的 ip, 如果頁面發生了變化,返回了對應的資源, 即可判斷為存在 host 碰撞
0x03 host 碰撞什么時候存在?
1業務通過 DNS 解析到外網,后面刪除了 A 記錄(但是 nginx/Apache 的反向代理還沒刪除)
2測試業務(不對外開放的業務,只流傳于開發或是測試使用)
0x04 什么樣的 ip 能進行 host 碰撞?
這里我看網上很多人寫文章都是寫 ip 狀態碼為 40X 的時候,在進行 host 碰撞
但是我想說,這不一定正確!!!
實際上,我認為應該改為任何一個 ip 都有 host 碰撞的價值!!!
這個點的問題在于,現在很多較大的公司比較流行,資產統一把控,也就是自己所有的資產全部收縮進內網
然后整個 nginx 或是 Apache 服務器,想對外網開放某個資產的時候就通過這個反代服務器新添加個配置映射出去
這就導致了一個問題, 那就是如果配置不當了, 忘記刪除這臺 nginx 或是 Apache 服務器的域名指向了
那么我們通過修改 host 就可以重新訪問這些以前在外網后面被收縮進內網的資產了
例如說: 現在外網有個 ip: 47.10.10.1(虛構的) 它的域名為: testmiao.com 現在它對映射規則配置不當了 然后打開狀態碼顯示 200,出現的是一個站點,返回的數據為一段 json 對外映射的: a.testmiao.com 對外映射的: b.testmiao.com 內部 nginx/Apache 還映射的: oa.testmiao.com 那么這種情況下如果我們進行爆破式 host 碰撞 撞了一個 oa.testmiao.com 進去 那么 nginx 或是 Apache 服務器接收到這個 host: oa.testmiao.com 直接去請求了這個所謂的被收縮進內網的資源,然后返回
這種情況, 我對大公司進行測試時, 已經發現不下于三次
因此我認為只要是個 ip 能夠訪問,那么它就有進行 host 碰撞的價值
當然這個是我自己個人實戰經驗,讀者們看個樂乎就好了 :)
0x05 host 碰撞檢測方法-思路
網上大佬是遇到 40X,或是收集到了內網域名在進行 host 碰撞
這里我的檢測方法對比網上那些大佬的比較泛~~
我的檢測方法是:
第一步:
收集目標域名
PS: 內外網的域名都要
第二步:
收集目標 ip 段
第三步:
將外網域名保存為一個 hostList.txt 備用
第四步:
將外網域名全部 ping 一下獲取一下 ip,并將收集到的目標 ip 段加外網域名 ip 段保存為一個 ipList.txt 備用
PS: 只要外網可訪問的 ip 哦
第五步:
將收集到的 ipList.txt 與 hostList.txt 進行 host 碰撞檢測
第六步:
將可以互相解析的 ip 提取出來
例如:
域名: aa.testmiao.com 解析的 ip: 42.169.88.55
域名: bb.testmiao.com 解析的 ip: 42.142.165.49
ip:42.169.88.55 修改 host 為:bb.testmiao.com
然后打開: bb.testmiao.com 顯示的還是 bb.testmiao.com 的內容
這就說明有價值了 :)
第七步:
重點測試提取的 ip 進行 host 碰撞爆破
例如:
域名: aa.testmiao.com 解析的 ip: 42.169.88.55
自己構造常見的內網重要的域名
如:
oa.testmiao.com
user.testmiao.com
mail.testmiao.com
sso.testmiao.com
portal.testmiao.com
0x06 host 碰撞檢測方法-實際
測試方法的話,我這里提供兩種比較高效的測試方法
0x06.1 測試數據
測試數據: // 拿來做碰撞的 ip 域名: https://sso.testmiao.com 解析的 ip: 42.xxx.xxx.xxx // 拿來做碰撞的 host 域名: vms.testmiao.com 解析的 ip: 10.xxx.xxx.xxx 域名: a.testmiao.com 解析的 ip: 無法解析(猜的內網可能有這個域名) 域名: b.testmiao.com 解析的 ip: 無法解析(猜的內網可能有這個域名) 域名: c.testmiao.com 解析的 ip: 無法解析(猜的內網可能有這個域名) 域名: d.testmiao.com 解析的 ip: 無法解析(猜的內網可能有這個域名) 域名: scm.testmiao.com 解析的 ip: 118.xx.xxx.xxx
0x06.2 方法一 - 使用工具 HostCollision
下載地址: https://github.com/pmiaowu/HostCollision
下載完畢以后
第一步:
打開 HostCollision/dataSource 目錄
將: ipList.txt 與 hostList.txt 分別填寫進對應的數據(一行一個)
第二步:
打開 HostCollision 目錄
執行命令: java -jar HostCollision.jar
執行完畢以后會在根目錄生成一個 年-月-日_8 位隨機數 csv/txt 文件
里面會保存碰撞成功的結果


0x06.3 方法二 - 使用 burp
但是這個方法,只能一個 ip 一個 ip 的測試,無法批量 host 爆破
第一步: 找一個你認為有漏洞 ip 我拿的測試數據的 42.xxx.xxx.xxx
第二步: 將找到的 host 保存成一個 hostList.txt 分別填寫進對應的數據(一行一個)
第三步: 構造數據包如下圖

有了這個包以后,發送到測試器里面進行 host 爆破








0x06.4 瀏覽器訪問的方法
0x06.4.1 方法一 - 系統 hosts 文件修改
這里就教如何利用 windows 訪問對應的站點
例如:
ip: 42.xxx.xxx.xxx
host: vms.testmiao.com
打開文件: C:\Windows\System32\Drivers\etc\hosts


0x06.4.1 方法二 - 使用 burp


如果還看不明白,這里也有中文版的可以看一眼

0x07 總結
1. 收集一些內網常見的重要域名
例如:
oa.testmiao.com
user.testmiao.com
mail.testmiao.com
sso.testmiao.com
portal.testmiao.com
2. 盡量多可能的收集目標所有可對外訪問的 ip
3. 盡量多可能的收集目標的域名
4. 下載 HostCollision
5. 等待老天爺的寵幸~~~~
要是前面的文章還看不是很懂的話,可以看看這張網站訪問流程的圖會更加清晰

多試試總會成功的 :)