Google Hacking,有時也會被稱為 Google dorking,是一種利用谷歌搜尋的高階使用方式進行資訊收集的技術。這個概念最早在2000年由黑客 Johnny Long 提出並推廣,一系列關於 Google Hacking 的內容被他寫在了《Google Hacking For Penetration Testers》一書中,並受到媒體和大眾的關注。在 DEFCON 13的演講上,Johnny 創造了 “Googledork" 這個詞,“Googledork" 指的是“被 Google 透露了資訊的愚蠢、無能的人們”。這是為了引起人們注意到,這些資訊能被搜尋到並不是 Google 的問題,而是由使用者或使用者安裝程式時無意識的錯誤配置造成的。隨著時間的推移,“dork" 這個詞成為了“定位敏感資訊的搜尋”這個行為的簡稱。

黑客們可以使用 Google 的高階操作符搜尋那些易被攻擊的 Web 應用程式或者特定檔案型別( .pwd.sql...), 查詢 Web 應用程式中的安全漏洞、收集目標資訊、發現洩露的敏感資訊或錯誤訊息以及發現包含憑據和其他敏感資料的檔案。

雖然 Google 在國內無法直接訪問,但作為技術人員,理應找到恰當的訪問途徑。另外這種技術雖然名為 “Google Hacking”,但同樣的思路,類似的搜尋技巧,也是完全適用於其他搜尋引擎的。所以這裡僅是拋磚引玉性質的介紹,觸類旁通地可以靈活應用在其他的搜尋場景裡,只需要注意各種搜尋引擎在搜尋操作符operator)使用上的細小差異。

一、搜尋基礎點

  1. 可以使用雙引號 ( “ " ) 進行短語搜尋;
  2. 關鍵字不區分大小寫;
  3. 可以使用萬用字元 ( * );
  4. 會在搜尋中忽略一些詞語,這些詞語被稱為 stop words,比如:how,where 等;
  5. 關鍵詞最多可以有32個詞語,但 Google 並不會把萬用字元 ( * ) 算入關鍵詞的長度,所以可以使用萬用字元擴充套件搜尋內容的長度;
  6. 布林運算子和特殊字元:
  • + 加號 (AND)

    會強制搜尋加號後面跟隨的單詞,後面不能有空格。使用加號可以讓那些 Google 預設忽略的單詞可以被搜尋;
  • - 減號 (NOT)

    會強制忽略減號後面跟隨的單詞,後面也不能有空格;
  • | 管道符 (OR)

    會在搜尋中搜索被管道符分割的關鍵詞中的任意一個。

二、高階操作符

在 Google Hacking 中可以使用高階運算子,以縮小搜尋結果範圍,最終獲取到需要的資訊。高階操作符雖然容易使用,但也需要遵循嚴格的語法。

1. 需要知道

  • 基本語法是:operator:search_term ,當中不能有空格
  • 布林運算子和高階操作符可以結合使用;
  • 多個高階操作符可以在一次搜尋中配合使用;
  • all 開頭的操作符在一次搜尋中僅能使用一次,不能與其他高階操作符同時使用。

2. 基本操作符(operator)

· intitle & allintitle ·

使用 intitle 可以搜尋網頁的的標題,標題指的是在 HTML 中的 title 標籤的內容。比如搜尋 intitle:"Index of" 會返回所有 title 標籤中含有關鍵字短語 “Index of" 的搜尋結果。

allintitle 的使用方法和 intitle 類似,但 allintitle 後面可以跟隨多個內容。比如

allintitle:"Index of""backup files"

返回所有 title 標籤中含有關鍵字短語 Index ofbackup files 的搜尋結果。

但使用 allintitle 會有很大的限制,因為這樣搜尋的內容只會限制於返回 intitle 的內容,而不能使用別的高階操作符。在實際使用中,最好使用多個 intitle,而不是使用 allintitle。

· allintext ·

這個是最容易理解的一個操作符,作用就是返回那些包含搜尋內容的頁面。當然,allintext 不能與其他高階操作符結合使用。

· inurl & allinurl ·

在介紹過 intitle 後,inurl 其實也很好理解:可以搜尋網頁 url 的內容。然而在實際使用中,inurl 往往並不能如預期般獲得想要的結果,原因如下:

  • Google 並不能很有效地去搜索 url 中協議的部分,比如 http://
  • 在實際情況中,url 通常會包含大量的特殊字元。為了在搜尋的同時相容這些特殊字元,搜尋的結果就不會如預期那樣精準;
  • 其他的高階操作符(比如:site, filetype 等)可以搜尋 url 內特定的部分,在搜尋中的效率也比 inurl 高的多。

所以 inurl 並不如 intitle 那樣好用。但即便 inurl 或多或少有一些問題,inurl 在 Google Hacking 中也是不可或缺的。

和 intitle 相同,inurl 也有一個對應的高階操作符 allinurl。而且 allinurl 同樣不能與別的高階操作符結合使用,所以如果想要去搜索 url 中多個關鍵字,最好使用多個 inurl 操作符。

· site ·

site 操作符可以在特定的網站中指定搜尋內容,比如搜尋 site:apple.com,返回的內容就只會是 www.apple.com 這個域名或者其子域名下的內容。

不過需要注意的是,Google “閱讀” 域名的順序是從右到左,和人閱讀的順序是截然相反的。如果你搜索 site:aa,Google 會去搜索以 .aa 為結尾的域名,而不是以 aa 開頭的域名。

· filetype ·

filetype 操作符能搜尋的檔案型別,也就是指定搜尋檔案的字尾名。比如搜尋 filetype:php,搜尋將會返回以 php 為結尾的 URL。此操作符往往會與其他高階操作符配合使用,達到更精確的搜尋結果。

· link ·

link 操作符可以搜尋跳轉到指定 URL 的連結,link 操作符後面不僅可以寫一些基礎 URL,也可以寫一些複雜的、完整的 URL。link 操作符也不能與其他高階操作符或關鍵字一起使用。

· inanchor ·

inanchor 操作符可以搜尋 HTML 連結標籤中的錨文字,“錨文字”是網頁中關於超連結的一段描述,比如下面這段 HTML 語言:

<a href="http://en.wikipedia.org/wiki/Main_Page">Wikipedia</a>

其中的Wikipedia就是這段連結中的錨文字。

· cache ·

當 Google 爬到網站的時候,會生成一個連結來儲存這個網站的快照,也被稱為網頁快取。運用 cache 操作符就可以搜尋指定 URL 的網頁快照,而且網頁快照不會因為原網頁的消失或變更而發生改變。

· numrange ·

numrange 操作符後面需要加上兩個數字來表示數字的範圍,以 “-" 為分割,形如: numrange:1234-1235。當然 Google 也提供了一個更簡潔的方式來搜尋數字,形如: 1234..1235,這樣就可以不使用 numrange 操作符來達到搜尋範圍數字的目的了。

· daterange ·

daterange 操作符可以搜尋指定時間範圍內 Google 索引的網站,操作符後面使用的日期格式是“儒略日期(Julian Day)”。關於“儒略日期”的解釋請參見相關文件。使用時可以通過線上版查詢工具獲得需要的"儒略日期"數值,如:

www.onlineconversion.com/julian_date.htm

· info ·

info 操作符會返回一個站點的摘要資訊,操作符後面的內容必須是一個完整的站點名稱,否則不會返回正確的內容。info 操作符不能與其他操作符一起使用。

· related ·

related 操作符會搜尋那些和輸入的 URL 相關或者相似的頁面,related 操作符不能與其他操作符一起使用。

· stocks ·

stocks 操作符會搜尋相關的股票資訊,stocks 操作符不能與其他操作符一起使用。

· define ·

define 操作符會搜尋關鍵字的定義,define 操作符不能與其他操作符一起使用。

三、簡單應用

1. 郵箱抓取

如果要對一個目標進行測試,Google Hacking 能幫助我們搜尋到足夠的資訊。其中,收集相關的郵箱地址(往往也是網站的使用者名稱)則是 Goolge Hakcing 運用中簡單且又能證明其強大的一個例子。

首先我們先在 Google 中搜索 “@gmail.com",發現搜尋返回的結果並不好,但也包含了需要的搜尋結果。



▲在 Google 中搜索 “@gmail.com"

隨後,用 Lynx(Linux 下的純文字網頁瀏覽器),將所有的結果輸出至一個檔案:

lynx --dump 'http://www.google.com/[email protected]' > test.html

最後,用 grep 和正則表示式就可以找出所有的郵箱地址:

grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}' test.html

當然,網路上還有更“完美”的正則表示式能涵蓋更多的郵箱地址格式(比如:emailregex)。這個例子不過是拋磚引玉,僅僅是利用 Google 搜尋就可以達到搜尋基礎資訊的目的。

2. 基礎網站抓取

作為一名安全測試人員,如果我們需要對一個指定的網站進行資訊收集,可以使用 site 操作符指定一個站點、域名或子域名。

可以看到搜尋結果非常的多,Google 會智慧地將更顯而易見的結果放在前面。而我們往往希望看到的並不是這些常見內容,而是那些在平時可能看不到的結果。我們可以使用 - 來篩選我們的搜尋結果。

將上圖中的幾個站點排除後搜尋關鍵字:

site:microsoft.com -site:www.microsoft.com -site:translator.microsoft.com -site:appsource.microsoft.com -site:bingads.microsoft.com -site:imagine.microsoft.com

搜尋結果:

可以看到,結果已經不包含第一次搜尋中的幾個站點了。想要進一步挖掘,就必須重複這個篩選的動作,那最後搜尋內容的長度肯定會到 Google 限制的32個單詞的上限。不過這個操作可以簡單地就達成域名的收集工作,雖然有點乏味和繁瑣。

和之前相同,我們可以使用 Lynx 將這個過程簡化一點:

lynx --dump 'https://www.google.com/search?q=site:microsoft.com+-site:www.microsoft.com&num=100' > test.html
grep -E '/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/' test.html

【優點】

雖然站點名和域名收集並不是一件新鮮事,但通過 Google 完成這項任務有以下幾項優點:

  • 低調:不會直接向測試目標傳送任何資料包,不會被目標捕捉行為;
  • 簡單:返回的結果是被 Google 按照一定順序排序好的,往往更有用的資訊會被放在“下面”,所以可以對結果進行簡單篩選而尋找到需要的資訊;
  • 指向性:通過 Google 進行資訊搜尋,可以得到的不僅僅是站點名和域名,還有電子郵箱地址、使用者名稱等等更有用的資訊。這些資訊往往能指向下一步的測試操作。

四、複雜應用

1. Google Hacking Database

www.exploit-db.com/google-hacking-database

Google Hacking Database (GHDB) 是一種網際網路搜尋引擎查詢的索引,旨在發現那些在網際網路上公開透明且敏感的資訊。這些敏感資訊在大多數情況下是不應被公開的,但因為某些原因,這些資訊被搜尋引擎抓取到,然後被放在了公開的網路中。GHDB 中包含了大量 Google Hacking 的搜尋語句,如果是想要提升自己搜尋的能力,或者是想要拓展視野,這裡絕對是絕佳的去處。

GHDB 把所有的搜尋內容分為了以下 13 類:

  • Footholds 演示頁面
  • Files Containing Usernames 使用者名稱檔案
  • Sensitive Directories 敏感目錄
  • Web Server Detection 網站伺服器檢測
  • Vulnerable Files 有漏洞的檔案
  • Error Messages 錯誤資訊
  • Files Containing Juicy Info 有價值的檔案
  • Files Containing Passwords 口令檔案
  • Sensitive Online Shopping Info 線上商業資訊
  • Network or Vulnerability Data 安全相關資料
  • Pages Containing Login Portals 登入頁面
  • Various Online Devices 線上裝置
  • Advisories and Vulnerabilities 公告和漏洞

由此可見,Google Hacking 幾乎沒有做不到,只有想不到,如果需要精進,那肯定還需要漫長的學習的。

2. 指令碼利用

前面也提到過,利用 Lynx 等相關的命令列可以比較簡單地對 Google 出來的資料進行處理,進而得到想要的結果。同時,Google 也提供了很多 API 可以方便進行呼叫。所以編寫指令碼,能更為有效且快捷地得到所需要的資訊。這裡列舉兩個利用 Google 搜尋的指令碼,用以展示指令碼的強大和靈活性。

· dns-mine ·

github.com/sensepost/SP-DNS-mine

利用 dns-min.pl 可以更加快捷的達成之前介紹的網站抓取的目的。

· bile ·

github.com/sensepost/BiLE-suite

bile 指令碼工具利用 Httrack 和 Google 能搜尋出和目標網站相關聯的站點,並且用演算法衡量各個結果的權重,最後有序輸出。

五、如何防範

前面已經介紹了許多不同的 Google Hacking 的方法,那麼對於網站的運營人員,應如何防範這種看似無孔不入的攻擊呢?

1. 禁止目錄列表

通常通過 .htaccess 檔案可以防止那些未授權的訪問網站中的目錄內容。在 Apache Web Server 上也可以通過編輯 httpd.conf 檔案 Options-Indexes-FollowSymLinks-MultiViews 欄位禁止訪問站點中的目錄列表。

2. 合理設定站點的 robots.txt

可以使用 /robots.txt 檔案向網路機器人提供有關其網站的說明, 這被稱為The Robots Exclusion Protocol

在網站根目錄建立 robots.txt,例如:

User-agent: Baiduspider
Disallow: /
User-agent: Sosospider
Disallow: /
User-agent: sogou spider
Disallow: /
User-agent: YodaoBot
Disallow: /
Disallow: /bin/
Disallow: /cgi-bin/

通過 User-agent 指定針對的爬蟲機器人,通過 Disallow 指定不允許機器人訪問的目錄。上面的例子的意思就是拒絕百度、搜搜、搜狗和有道的機器人爬取網站,同時禁止所有機器人爬取 /bin/ 和 /cgi-bin/ 目錄。

3. 合理設定頁面的 NOARCHIVE 標籤

通過 robot.txt 可以限制爬蟲機器人訪問你的站點,但對於單個頁面而言,robot.txt 就沒有那麼好用了,Google 等搜尋引擎依舊抓取網頁並且會生成網頁快照,要處理這種情況就需要使用 META 標籤。

<META NAME="ROBOTS" CONTENT="NOCARCHIVE">

將上面這個 META 標籤加入頁面的 head 中,可以有效地避免機器人爬取單個頁面生成網頁快照。

4. 合理設定頁面的 NOSNIPPET

為了不讓搜尋引擎生成網頁摘要,也可以在網頁中加入一條 META 標籤:

<META NAME="BAIDUSPIDER" CONTENT="NOSNIPPET">

這樣就可以避免搜尋引擎抓取網頁並生成網頁的摘要,同時 NOSNIPPET 也會讓搜尋引擎避免生成網頁快照。

六、擴充套件

最後推薦兩個網站,相對於 Google 他們更注重於搜尋網路安全方面的資訊收集。

1. 鍾馗之眼

www.zoomeye.org

ZoomEye 是一款針對網路空間的搜尋引擎,收錄了網際網路空間中的裝置、網站及其使用的服務或元件等資訊。

ZoomEye 擁有兩大探測引擎:Xmap 和 Wmap,分別針對網路空間中的裝置及網站,通過 24 小時不間斷地探測、識別,標識出網際網路裝置及網站所使用的服務及元件。研究人員可以通過 ZoomEye 方便地瞭解元件的普及率及漏洞的危害範圍等資訊。

搜尋內容包括:

  1. 網站元件指紋:包括作業系統,Web 服務,服務端語言,Web 開發框架,Web 應用,前端庫及第三方元件等等。

  2. 主機裝置指紋:結合 NMAP 大規模掃描結果進行整合。

2. Shodan

www.shodan.io

Shodan是一個搜尋引擎,它允許使用者使用各種過濾器查詢連線到網際網路的特定型別的計算機(網路攝像頭,路由器,伺服器等)。有些人還將其描述為服務橫幅的搜尋引擎,服務橫幅是伺服器傳送回客戶端的元資料。這可以是有關伺服器軟體的資訊,服務支援的選項,歡迎訊息或客戶端在與伺服器互動之前可以找到的任何其他資訊。

最後也需要提醒一下,在搜尋隱私相關資料時,也需要保持敬畏之心,不要濫用技術手段,否則可能引起爭議和觸發規條。(黃繆華 | 天存資訊)

Ref

  1. J. Long - Google Hacking for Penetration Testers
  2. J. Long - Using Google as a Security Testing Tool
  3. Google Search Help
  4. 錨文字(Anchor_text)
  5. robot.txt詳解
  6. 鍾馗之眼
  7. Shodan
  8. 儒略日期