Google Hacking 搜索引擎攻擊與防範

Google Hacking,有時也會被稱為 Google dorking,是一種利用Google搜索的高級使用方式進行資訊收集的技術。這個概念最早在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 中協議的部分,比如 //
  • 在實際情況中,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="//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"
▲在 Google 中搜索 「@gmail.com

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

lynx --dump '//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 操作符指定一個站點、域名或子域名。

pic

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

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

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

搜索結果:

pic

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

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

lynx --dump '//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 的搜索語句,如果是想要提升自己搜索的能力,或者是想要拓展視野,這裡絕對是絕佳的去處。

pic

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. 儒略日期