# google hacking
以下介紹許多種查詢資料的方法,有些可以用於爬蟲等應用
# 目錄
1. [頁庫存檔](#頁庫存檔)
2. [進階搜尋用法](#進階搜尋用法)
3. [避免自己架設的網站被搜尋](#避免自己架設的網站被搜尋)
4. [google搜尋與一些關鍵字](#google搜尋與一些關鍵字)
5. [進階搜尋](#進階搜尋)
6. [情資蒐集](#情資蒐集)
7. [進階技巧](#進階技巧)
8. [防禦技巧](#防禦技巧)
9. [推薦網站](#推薦網站)
10. [這裡是一些工具以及平台](#這裡是一些工具以及平台)
11. [避免被搜尋到太敏感資訊的方法](#避免被搜尋到太敏感資訊的方法)
12. [參考資料](#參考資料)
## 頁庫存檔
有 2 種方法 :
1. 先用google搜尋後,看到想要進去的網站時可以通過點擊圖中三個點的位置就會跳出更多選項,之後可以進去頁庫存檔中看資料

點擊頁庫存檔之後會跳到這種介面

然後可以檢視原始碼去得知html等訊息以方便爬蟲之類的運用
2. 如果已經知道想查詢的介面網址的話可以直接使用下面的方法 :
`cache:<網址>`
## 進階搜尋用法
可以進入下列網址 :
https://www.google.com.tw/advanced_search?hl=zh-TW
裡面有詳細說明用法
## 避免自己架設的網站被搜尋
* 使用 `<meta> noindex` 標籤阻攔 :
在不希望被收錄的網頁 html 的 `<head>` 中使用 : `<meta name="robots" content="noindex">`
優點是非常簡易,但缺點是我們需要在每個頁面中都進行一次設定
* 在網站主機設定 robots.txt :
寫好此檔案後須放置在網站根目錄,寫法如下(大概會長這樣) :

解析 : https://hackmd.io/-wfBYlYZSWq8LHjEROdCxw
如果要爬蟲一個網址,大部分都會先確認過該網址的 robots.txt ,可以透過 `<網址>/robots.txt` 得到我們可以執行的指令
## google搜尋與一些關鍵字
**關於Google搜尋的貼心小提醒** :
-1. 順序是「由左至右」的比對,但有唯㇐會影響優先順序的符號是 **圓括弧**
-2. 不分大小寫(OR是特例)
-3. 忽略部分特殊符號或單字(EX:a、the、I、who、how)
-4. 條件式有32個字詞的限制
-5. 雙引號會強制搜索包含關鍵字的內容
* `""` : 用來設定條件,執行精確查詢,並且強制限定關鍵字文字內容的順序(必須與關鍵字完全吻合)
* `+` : 放在關鍵字前,會搜索所有包含關鍵字的資料
例子 : `"資安" + 密碼學`,就是搜尋包含資安並且包含密碼學的資料
* `$` : 搜尋有符合價格的網頁
例子 : `IPAD $25000`,就是搜尋 IPAD 並且符合25000的價格
* `-` : 放在關鍵字前,會在搜尋結果中 **排除** 含有關鍵字的資料
例子 : `搜尋引擎 -google`,就是要找搜尋引擎,但要排除google
* `~` : 搜尋關鍵字的相關同義字
例子 : `~摩托車`,就是搜尋所有跟摩托車相關的同義字
* `.` : 表示任何㇐個字元(包括空格及無物)
但如果用在排除的關鍵字時,會被當成句點而非任意字元
例子 : `搜尋引擎 -goo.le`,就是要找搜尋引擎,但要排除goo。le
* `*` : 表示任何㇐個或多個字元,但位置一定要在兩個文字之間
例子 : `資訊*工程` 代表搜尋所有`資訊...工程`的訊息
但如果用在排除的關鍵字時,會被當成星號而非任意字串
例子 : `搜尋引擎 -g*e`,就是要找搜尋引擎,但要排除g開頭e結尾的關鍵字
* `..` 、 `...` : 放在兩數字之間:表示在此範圍內的數字或金錢
例子 : `IPAD $20000..$30000`,就是搜尋 IPAD 並且符合 20000 到 30000 的價格之間
* `OR` 、 `|` : 在英文小寫搜尋時會被當成㇐般文字,但除此之外會搜尋關鍵字組合群的其中之㇐關鍵字,使用時㇐般會搭配圓括弧做限定
例子 : `桃園(“高中”|”榜單”)`
::: danger
搜尋時盡量有收斂的情況,可以透過逐㇐加入必要條件,並且清楚要搜尋的標的
但會有例外情況 : 就是當希望搜索到大量資訊時先盡量不要設定太多條件
:::
### 這裡補充一點練習題
* 練習-1 :
在.net系統中,SQL異常會造成網頁出現錯誤,會出現「server error in」的訊息
可以試著搜尋該訊息並研判是否有可利用的漏洞(情資蒐集)
寫法參考 :
- `“server error in”`
- `“server error in” “Sql server” “SqlException”`
- `“server error in” “Sql server” “SqlException”
“0x80131904” “net version:4”`
(知道錯誤代碼,又知道系統版本,就可更精確,並且可再加上限定區域條件)
* 練習-2 :
比較以下兩者條件式的差異
`"Microsoft OLE DB Provider"` `"edu.tw"` $\Rightarrow$ 搜尋到的資訊比較多
`"Microsoft OLE DB Provider"` `site:"edu.tw"` $\Rightarrow$ 因為已經限定網域,所以搜索到的東西比較少
## 進階搜尋
### 使用規則
* 運算子、冒號( : )和搜尋關鍵詞間不能有空格(但引號內可含空格)
* 關鍵字詞可以是㇐個單字或用雙引號(" ")括起來的短句
* 查詢條件可使用布林運算子和特殊字元(像是 `OR` 和 `-` )
* 大多數進階運算子可以和基本搜尋搭配使用
* 少部分進階運算子只能單獨使用
* 綜合運用不同的運算子時中間可留空格
### 進階搜尋運算子
* `intitle` 或 `allintitle` : 搜尋網頁的標題內容,也就是找網頁原始碼中 `<title>......</title>` 的標籤內容
**語法** : `intitle:關鍵詞`
**例子** : 搜尋標題為 hacker attack 的網頁
```
#1 intitle:hacker intitle:attack
#2 intitle:attack intitle:hacker
#3 allintitle:hacker attack
```
**補充** : <font color="#f00">`intitle` 可以疊加使用,`allintitle` 只能單獨使用</font>
* `intext` 或 `allintext` : 搜尋網頁的本文、論壇的內文或新聞內容
**語法** : `intext:關鍵詞`
**例子** : 搜尋本文內容有包含「量子、電腦、程式」的資訊
```
#1 intext:量子 電腦 程式
#2 intext:量子|電腦|程式
#3 intext:量子 intext:電腦 intext:程式
#4 allintext:量子 電腦 程式
```
**補充** : <font color="#f00">`intext` 可以疊加使用,`allintext`只能單獨使用</font>
* `inurl` 或 `allinurl` : 搜尋網頁的 URL 內容
**語法** : `inurl:關鍵詞`,但會忽略特殊符號
**例子** :
-1. 搜尋所有 `ABC.edu.tw`、`CDE.edu.tw` 和 `FGH.edu.tw` 的 `URL` 中使用 `8080 port` 的網頁
```
#1 inurl: ABC.edu.tw.8080 | inurl: CDE.edu.tw.8080 | inurl: FGH.edu.tw.8080
#2 inurl:"ABC|CDE|FGH.edu.tw.8080"
```
-2. 搜尋 URL 中有 `edu.tw.login`、網頁標題有「系統」、網頁中有「帳號」的頁面
```
inurl:edu.tw.login intitle:系統 帳號
```
-3. 搜尋php主機的相關系統參數資料,條件如下 : URL中有`phpinfo.php`、`php.ini`,並且限縮URL中網域的範圍 `edu.tw`、`com.tw`
```
inurl:phpinfo inurl:edu.tw
```
**補充** : 「網址的唯㇐性」!=「搜尋條件式的網址」,範例 : `inurl:edu.tw.portal`
另外關鍵字詞中「 . 」的特性是搜尋特定 port 的網頁服務,範例 : `inurl:edu.tw.8080`
<font color="#f00">`inurl` 可以疊加使用,`allinurl`只能單獨使用</font>
* `inanchor` 或 `allinanchor` : 搜尋網頁上的超連結的 **內容文字** ,並回傳該連結所指向的網頁(不是鏈結文字所在的網頁)
**語法** : `inanchor:要搜尋的連結`
**補充** : <font color="#f00">`inanchor` 可以疊加使用,`allinanchor`只能單獨使用</font>
* `link` : 搜尋網頁內超連結的 **有效網址** ,關聯顯示㇐般搜尋的結果(聯集的概念)
**語法** : `link:<要搜尋的網址>`
**例子** : 通常網址會是 `html` 中的
```
<a
href="有效網址">超連結</a>
```
* `filetype` 或 `ext` : 搜尋特定類型的檔案
**語法** : `filetype:<類型>`
**補充** : 常會搜尋的副檔名如下 pdf、txt、csv、doc、zip、7z、conf、config、json…
並且常搭配其他運算子或關鍵字使用
* `site` : 限制搜尋的對象只能來自指定的網址或網域,或想要找某個網站裡的特定的內容
**語法** : `關鍵詞 site:<網址>`
**例子** :
```
#1 3c site:www.facebook.com
#2 book site:amazon.com
#3 neuroscience site:edu
#4 Site:edu.tw -inurl:www.edu.tw
#5 inurl:login site:ntu.edu.tw
```
**補充** : 不用寫http於限定的網址中,另外`.`不是萬用字元而是網域定位符號,而且比對採由右至左
<font color="#f00">`site` 只能單獨使用</font>
* `Daterange` : 過濾在特定時間內被Google編入索引的網頁
**語法** : `daterange:<start_date> - <end_date>`
**例子** : `daterange:2023-08-01..2023-08-14`
**補充** : 日期數值只能輸入儒略日(Julian date),<font color="#f00">必須要搭配其他運算子使用(link除外)</font>
* `after before` : 過濾在特定時間內被Google編入索引的網頁
**語法** : `after:start_date before:end_date`
**例子** : `LK99 after:2023-08-01 before:2023-08-14`
**補充** : 日期格式須為 `西元年-月-日` 或 `西元年/月/日`,但不能用 `.` 區隔,<font color="#f00">必須要搭配其他運算子使用(link除外)</font>
* `cache` : 搜尋Google頁庫存檔中最近㇐次歸檔的網頁
**例子** : `cache:tw.news.yahoo.com/`
**補充** : 須指定有效的URL或網址且只能從頁庫存檔中找㇐個庫存網頁,當指定的網址有多筆網頁符合時則會回應執行錯誤
* `related` : 查詢和指定的網址或URL有關聯的網頁
**例子** : `related:www.edu.tw`
**補充** : <font color="#f00">不能和運算子合併使用</font> $\Rightarrow$ related放在前面,後面的運算子會被忽略;related放在後面,會被視為㇐般搜尋
另外也可從更多選項(頁庫存檔的旁邊)利用「類似內容」找到關聯的網頁
* `numrange` : 搜尋有指定範圍內數值的網頁
**例子** : `"ipad" numrange:20000-30000`
**補充** : 兩數字之間使用「..」或「-」,此外數字可用小數點,但不能是負值(負值會被忽略),<font color="#f00">`numrange`可和其他運算子合併使用</font>
* `define` : 搜尋術語的定義
* `location` 或 `source` : 縮減新聞資料的搜尋範圍(常用在新聞搜尋)
**例子** :
```
# 在台灣的區域中,找尋日本的相關新聞
Location:台灣 日本
# 搜尋自由時報有關美國的資料
Source:自由時報 美國
```
### 延伸--駭客應用(可能會違反網路安全條款,請斟酌使用)
* 利用 `intitle` 調取重要資訊
`intitle: "index of"`
可以查找 web 或 ftp 的歷史存放資料目錄
之後可以收斂收索範圍,增加一個關鍵字
`intitle:"index of" "ftp.passwd"`
找出存放密碼的地方
- 再更延伸(解讀密碼的部分,通常是Hash) :
組成:ID + (Hash) salt 隨機字串 + 密文
小補充 : ID 的部分通常會在最一開始的地方,並且用 2 個 `$` 包起來
* ID=1:採用 md5 加密
* ID=5:採用 SHA256 加密
* ID=6:採用 SHA512 加密
* salt:㇐串隨機字串,用在與使用者密碼拼接,執行加密演算法,得到不可重複的加密密碼
* `inurl` 常用的搜尋
- `inurl:admin`
- `inurl:/manage`
- `inurl:admin site:XXX.edu.tw`
- `inurl:phpmyadmin site:XXX.edu.tw`
- `inurl:index.php.bak intitle:index.of`
- `inurl:config.php.bak`
- `inurl:phpinfo.php`
- `inurl:cgi-bin filetype:sh`
- `inurl:index.php.bak`
## 情資蒐集
通常會利用頁庫存檔進行匿名偵查,裡面可以改成純文字版本比較好搜尋
我們可以透過目錄清單找出弱點
### 目錄清單
由於網站伺服器都是由階層式目錄架構所組成,所以我們可以透過了解各網頁顯示組成元素,再進行搜尋,收斂目標
#### 系統判斷方法 :
* 網頁伺服器 Apache or nginx 的網頁顯示元素:
- (頁首) `index of`
- (頁中) `Parent Directory`、`name`、`size`、`/`
- (頁尾) Apache 版本 `server at`
* 網頁伺服器IIS的網頁顯示元素:
- (頁中) `To Parent Directory`、`<dir>`、`AM`、`PM67`
#### 可以利用的目錄清單暴露的弱點 :
* `intitle:index.of`
* `intitle:index.of "Parent directory" name size`
* `intitle:index.of "server at"`
* `"To Parent directory" dir AM PM`
#### 運用方法(會感興趣的目錄)
* `Admin`
用途 : 存放管理功能的網頁,目錄可能用 `admin`、`administrator`、`administration`、`adm` 命名
搜尋方式 : `inurl:admin` 、 `inurl:adm`
* `Auth`
用途 : 存放分配權限或認證的網頁,目錄可能用 `auth`、`authentic`、`authentication` 命名
搜尋方式 : `inurl:auth` 、 `inurl:authen`
* `Backup`
用途 : 存放備份檔案/程式版本
搜尋方式 : `inurl:back` 、 `inurl:bak` 、 `inurl:bk`
* `Conf` 、 `config` 、 `settings`
用途 : 組態設定檔
搜尋方式 : `inurl:conf` 、 `inurl:setting`
* `Download` 、 `Files` 、 `upload`
用途 : 檔案上下載的目錄 或 檔案儲存的目錄
搜尋方式 : `inurl:download` 、 `inurl:upload` 、 `inurl:file`
* `logfile`
用途 : 程式或系統日誌檔
搜尋方式 : `inurl:log` 、 `inurl:logfile`
* `Login` 、 `logon` 、 `sso`
用途 : 系統登入功能的網頁
搜尋方式 : `inurl:login` 、 `inurl:logon`
* `manage`
用途 : 存放管理功能的網頁
搜尋方式 : `inurl:manag` 、 `inurl:mgr`
* `Temp` 、 `tmp`
用途 : 暫存區
搜尋方式 : `inurl:temp` 、 `inurl:tmp`
### 找出Google沒有爬到的網頁
* **目錄瀏覽**
* **遞增替換法**
替換前 : `https://www.tycg.gov.tw/ch/home.jsp?id=10460&parentpath=0,10405,10461`
替換後 : `https://www.tycg.gov.tw/ch/home.jsp?id=10462&parentpath=0,10405,10461`
主要差別在 **id** 的部分
* **副檔名切換法**
切換前 : `http://~~~~/~smart/110run/index.php`
切換後 : `http://~~~~/~smart/110run/index.php.bak`
主要差別在 `.bak` 的部分
### 找機敏資料
* **組態檔**
- 檔案類型 : `.ini` 、 `.conf` 、 `.config` 、 `.cfg`
- 使用 `ext` 運算子
- 排除 `sample` 或 `example` 的範例資料
- 確認系統服務或應用程式的名稱
- 使用 `site` 限縮範圍
**範例** : 在 `net` 網域中,找尋所有 `ws_ftp` 的 `ini` 組態檔案
**Ans參考** : `site:net "ws_ftp" ext:ini -sample -example -cvs`
* **日誌檔**
- 檔案類型 : `.csv` 、 `.txt` 、 `.log` 、 `.bak`
- 使用 `ext` 運算子
- 資料可能放在 `log` 或 `logs` 目錄內
- 確認系統服務或應用程式的名稱
- 使用 `site` 限縮範圍
**範例** : 在 `edu` 網域中,找尋所有 `log` 或 `logs` 目錄內的紀錄檔案
**Ans參考** : `site:edu inurl:"log|logs" ext:log -sample -example`
* **其他**
- 目標 : 帳號、身分證、電子郵件、password、phone
- 檔案類型 : `.csv` 、 `.xls` 、 `.xlsx` 、 `.doc` 、 `.docx` 、 `.pdf` 、 `.odt` 、 `.ods` 、 `.xml` 、 `.htm` 、 `.html` 、 `.txt`
- 使用 `ext` 運算子
- 使用 `site` 限縮範圍
**範例-1** : 在 `edu.tw` 網域中,找尋個資機敏 `xls` 檔案資料
**Ans-1參考** : `ext:xlsx ("身分證"|"電子郵件"|EMAIL|"帳號"|PASSWORD|PASSWD|PHONE) site:edu.tw`
**範例-2** : 搜尋 `edu.tw` 網域中,附檔名是 `xlsx` 內有手機號碼的資訊
**Ans-2參考** : `0900..0999 100001..999999 site:edu.tw ext:xlsx`
### 找尋管理登入網頁
* 標頭可能包含網站管理登錄、網頁管理、後台管理 ... 等字眼
eg : `<title>網站管理登錄</title>`
* 副檔名可能是 `php` 、 `aspx` 、 `asp` 、 `jsp`
* 網址可能包含 `login` 、 `logon` 、 `portal`
總結上述的範例 : `intitle:管理登錄 filetype:php`
* 其他搜尋語法 :
`site:xxx.edu.tw intext:管理`
`site:xxx.edu.tw inurl:login`
`site:xxx.edu.tw intitle:後台`
* 除此之外網址還可能包含 `admin` 、 `manage` 、 `config`
* 也使用site限縮你的範圍
範例-1 : 在 `edu.tw` 網域中,找尋後台管理登入網頁
Ans-1參考 : `inurl:"admin|manage|config" inurl:"login|portal"site:edu.tw`
範例-2 : 在 `net` 網域中,搜尋 `phpPgAdmin` 的登入頁面
Ans-2參考 : `intitle:"phpPgAdmin -Login" site:net`
* **備註**
如果這些結果之中有弱強度密碼,就可以很容易攻破
### 找尋資料庫資訊
* **phpMyAdmin** :
`inurl:main.php phpmyadimin`
`intitle:"index of /phpmyadmin" modified`
* **SQLite** :
`intext:SQLiteManager inurl:"main.php"`
### ㇐些常用的關鍵字
* `intitle:index.of`
* `error|warning`
* `login|logon`
* `username|userid|ID`
* `password|passcode`
* `admin|administrator`
* `-ext:html|-ext:htm|-ext:asp|-exp:php` (為了過濾掉常見的)
* `inurl:temp|inurl:tmp|inurl:backup|inurl:bak`
### 找尋上傳漏洞
* `site:XXX.edu.tw inurl:upload`
* `site:XXX.edu.tw inurl:load`
* `site:XXX.edu.tw inurl:file`
* `Inurl:"data|databackup|bak|upfile|upload|download"`
## 進階技巧
* 可以參考 exploit-db 網站 :
https://www.exploit-db.com/google-hacking-database

在左側工具列中會出現以下幾個分頁
- EXPLOITS : 各式漏洞攻擊程式
- GHDB : Google Hacking條件式的資料庫
- SHELLCODES : 漏洞可用的Payload
另外,右上角也可以看到 filters 可以進行篩選(選擇分類、查詢關鍵字)
然後直接點擊 Dork 就可以查看詳細資訊
* 也可以參考通用漏洞資料庫(CVE)

可以點擊左上角的 Search CVE List
## 防禦技巧
* 保護管理登入網頁被攻擊的風險
- 管理介面不外開放存取 (限制IP)
- 隱藏管理介面目錄 (複雜的目錄名稱)
- 加強後台防禦 (驗證碼/2階段驗證)
* 預防遭受Google Hacking的方法
- 機敏/重要文件不放置網路空間上供人下載
- 不在公開網站留個人資料
- 定時利用相關蒐尋引擎進行自我搜尋,看重要文件是否露餡
## 推薦網站
1. https://www.exploit-db.com/google-hacking-database
*列有各式各樣如何運用 Google搜尋來找漏洞的方式*
其中會有些舉例 :
* 搜尋 login 網頁 :
`intitle:”index” intext:”Login to the Administrative Interface”`
可以找到該網站有系統管理的登入頁面
* 搜尋特定 Apache Web server :
`intitle:”Apache Status” “Apache Server Status for”`
可以蒐尋相關 Apache Web Server,再針對Apache 已知的弱點進行攻擊
* 查找到使用者敏感資訊 :
`inurl:admin inurl:userlist`
可能會列出系統管理者與指用者資訊
2. https://ithelp.ithome.com.tw/users/20114110/ironman/3806
*web 滲透教學(關於Burp Suite)*
## 這裡是一些工具以及平台
* Kali
* Firefox
* OWASP ZAP
* Burp Suite
## 避免被搜尋到太敏感資訊的方法
1. 設定 robot.txt,並且把路徑寫的比較複雜
2. Web Server 設定不回傳Server資訊
3. 架設 firewall阻擋可以行為包括但不限於 :
`短時間有大量的 Login try and Error` 、
`偵測到 SQL injection 的特徵 or 1 = 1 —` 、
`偵測到異常的 JavaScript 輸入`之類的
## 參考資料
1. robot.txt 寫法 :
https://www.cloudflare.com/zh-tw/learning/bots/what-is-robots-txt/
2. 幾乎都是參考這篇寫的,我只有做到整理重點的部分而已
http://webnas.bhes.ntpc.edu.tw/wordpress/wp-content/uploads/2022/05/GoogleHacking%E6%93%8D%E4%BD%9C%E4%BB%8B%E7%B4%B9.pdf