在Shodan搜索中有一個關於網站icon圖標的搜索語法,http.favicon.hash,我們可以使用這個語法來搜索出使用了同一icon圖標的網站,不知道怎么用的朋友請參考我上一篇文章。
通過上一篇文章我們了解到,由於hash為一個未知的隨機數,所以是無法通過輸入一個確定的hash值來搜索帶有指定圖標的網站的,只能夠通過查看一個已經被Shodan收錄的網站的hash值,來進一步獲取到所有帶有某icon的網站。那么這里的用法就非常的有局限性,你只能是碰運氣的來找到你所需要查找的網站,因為Shodan不一定收錄了你想要搜索的網站。接着上一篇講,那么如果Shodan收錄了某個ip,這個服務器帶有某個icon圖標,我能不能搜索所有帶有此icon的服務器ip?答案是可以的。
這里拿百度舉例,這里有一個ip為180.97.34.35的服務器,截圖如下,
如果我想搜索帶有這個icon的所有ip地址的話,可以先在Shodan搜索這個ip,這里要用到一個之前沒注意到的東西,就是Shodan的原始數據(Raw Data)功能,
點擊詳情里的View Raw Data,打開可以看到Shodan所存儲的關於這個ip所有信息的原始數據,由於東西篇幅太多,就不一一截圖,
這里我們需要用到關於icon hash的字段是這個,data.0.http.favicon.hash,如圖所示可以看到結果為-1507567067,這個數值就是http.favicon.hash中所需要的搜索值,
根據上面我們得到的hash值來嘗試使用http.favicon.hash語法進行搜索,可以看到我們成功得到了所有的帶有這個icon的網站,
Shodan的原始數據中還有其他很多東西,這里看一下data.0.http.favicon.data字段,從字面意思上來看應該是和favicon有關的,是他的數據,而這個格式看起來有沒有很像我們熟悉的base64?沒錯了,其實這個字段就是圖標base64之后的結果,
這里我們可以使用python腳本簡單的進行下檢驗,腳本如下,可以看到結果與網站中數據大致是一樣的,后來詢問了Shodan的工程師,確認了這個字段中存儲的就是圖標結果的base64格式。
import requests response = requests.get('https://www.baidu.com/favicon.ico') data = response.content.encode('base64') print data
至此我們已經對Shodan的一些細節有了更進一步的了解,現在出現了一種新的狀況:假如你有一個網站,打開只有一個登陸界面,沒有其他任何信息,但是此時你發現他有一個icon圖標,所以猜想他可能是使用了某個不知名的cms之類,這里想到可以使用Shodan來搜索出帶有同樣icon的網站,從其他使用了相同模板的網站來尋找突破口。根據我們上面講的,去Shodan中搜索這個ip,然而當你在Shodan中搜索時,卻發現Shodan並沒有收錄這個ip地址,沒有搜到任何結果,這個時候該怎么辦?
這里就要講到今天的重點,如何通過一個網站icon逆推出Shodan搜索所需要的hash值。其實也非常簡單,結合我上面說到的腳本就可以實現,通過一些渠道了解到,Shodan在處理這個結果時,使用了一個名為mmh3的python庫,用的是MurmurHash3函數,一般用來進行哈希檢索操作,關於mmh3庫的具體用法可以看這里——>傳送門點我。所以Shodan這里對於icon圖標hash值的產生就清楚了,首先獲取網站的icon,網站圖標進行base64編碼,並使用mmh3進行hash計算。mmh3模塊可以通過pip安裝,安裝時可能會報錯,我這里遇到需要安裝C++ Compiler Package for Python 2.7,有其他報錯的話根據報錯安裝即可,使用的為python2.7,不需要添加seed,腳本如下:
import mmh3 import requests response = requests.get('https://www.baidu.com/favicon.ico') favicon = response.content.encode('base64') hash = mmh3.hash(favicon) print hash
通過計算會得出一串數字,結果為-1507567067,再結合Shodan語法http.favicon.hash即可搜索出剛才的結果。
這里進行測試,拿博客園舉例,f12查看圖標的地址,為http://common.cnblogs.com/favicon.ico,看一下沒有問題,是icon。
之后將腳本中的地址改為這個,進行計算,得出一個值-395680774。
之后在Shodan中進行搜索,可以看到成功搜到了我想要的結果,雖然數量比較少。