(置頂圖片來自 Yancy Min

講真,呢啲時候真係無心機寫野,但網絡安全的確要推廣,由於撐送中聯署會網站已將特別資料關閉了公開存取的權限,故此 Gap撈Tech 希望籍此案例,提升公眾對香港網絡安全意識及認知。

簡介

一名有份參與開發撐送中聯署會網站的 Developer / DevOps 於網站伺服器内公開了一個資料夾 - .git,雖然.git 資料夾內的資料沒有顯示在網站中,但公眾仍可透過互聯網公開存取這些「正常網頁看不見的資料」。

由於.git這個資料夾是由開發撐送中聯署會網站的 Developer 主動設定為公開,公眾自然可以合情、合理、合法地自由存取這些公開的資料。

對 git 有認識的 Developer 都必然會知道 .git 資料夾內基本上有三個必定存在的檔案,包括 HEADconfigindex,存取這些 .git 內的資料完全不需要任何 Hacking,只要輸入正確的網絡地址就可以存取,

例如:
https://joint-sign.safeguardhongkong.hk/.git/HEAD

https://joint-sign.safeguardhongkong.hk/.git/config

https://joint-sign.safeguardhongkong.hk/.git/index

以下是截圖:

除此之後,開發者可以利用開源工具 GitTools 自動下載更多有關 .git 資料夾內的資料。(提醒:若下載得到的資料出現敏感資料,如資料庫密碼,切忌使用敏感資料進行任何動作,並應第一時間通知網站負責人,切勿以身試法)

GitTools 的使用方法:

./gitdumper.sh https://joint-sign.safeguardhongkong.hk/.git/ ./safe-guard-hk

git checkout —- .  # restore source code
git log	# see commit history 

運行結果於以下截圖:

部份洩出的代碼

無法從 .git 還原的代碼

.git 洩出的特別資訊

以下是不敏感及公眾可透過互聯網直接取得的資訊:

  • 網站使用了 PHP 開發(透過.git/index 得知)
  • 網站不斷使用 git pull 去更新網站 (透過.git/logs/HEAD 得知)
  • 存在一些沒有在網頁中使用的頁面例如 sign_demo.phpgernerate_data.phpsubmit_demo.php (透過.git/index得知)
  • 網站是由作者 fentoo [email protected] 開發,並存放於 [email protected]/fentoo/safe-guard-hk.git(透過.git/configgit log 得知)
  • 被公開的  .git 資料夾僥幸地未能夠還原Model/db.phpModel/Cdb.class.phpgernerate_data.php ⋯⋯等等非常敏感的資料

以下是已知但沒有在本文章公開的敏感資料:

  • 部份透過 .git 資料夾中取得的 Source Code (透過git checkout —- . 得知)
  • 部份有可能存在的安全漏洞並已轉告開發者 (透過 Code Review 不完整的 Source Code 得知)

謠言止於洩出 ?

由於 Source Code 不完整關係,並不能辟「造數之謠」,筆者對此表示:

深感遺憾

但伺服器中存在一個 generate_data.php 令人不禁聯想起「這是一段產生資料庫數據的代碼」,筆者不希望讀者們故亂會作出揣測並造謠生事,有需要可向有關當局証實該檔案之用法。

不過筆者逐個 Git Commit 比較時,有一個小發現

commit 3c1fc42d0b6721f22bc2d412c54cebd5ac909042
Author: fentoo <[email protected]>
Date:   Wed Apr 17 10:18:00 2019 +0800

commit d9023a5d073cdb010b5d94e48fc2554daf26e8d1
Author: fentoo <[email protected]>
Date:   Sun Jun 9 13:10:03 2019 +0800

git diff 3c1fc4 7ab592 -- get_data.php

結果如下:

過去由網站使用的 get_data.php由建立至 2019 Apr 17 的數目有 +1000 之嫌,不知道何時才移除亦不知道有沒有「上」這個 +1000 版本;事關可能開發者修改了 +1000 後但沒有 Commit 直至 Jun 9 才 Commit,所以不能推斷確實時間,又或者 +1000 版本其實重來沒有「上」過伺服器,不能妄下定論!

不過筆者能夠分享作為一個 Developer 的開發經驗:

Developer 開發時沒有習慣去擴大數字,除非這是一個 Requirement

小結

只是開啟了一個 .git 資料夾存取權限,居然連代碼都會洩出?冇錯!網絡安全認知就係咁重要,希望讀者們能以史為鑑!避免:

他朝君體也相同

最後,一直令筆者耿耿於懷就係花費了三小時精力仍無法闢除造數之謠,對 86萬個已簽署的市民不公平,自愧並欠他們一個交代;筆者希望,倘若有機會的話,撐送中聯署會能夠將整個 Source Code Open Source(代碼開源),並切忌修改 Git 的歷史以免造成混亂及引起其他 Developer 的猜疑,筆者深信:

代碼開源謠自破  真金不怕洪爐火

後記

另外值得一提嘅係 GitTools 的教學中更有自動掃描全球知名度排名一百萬以內的網站有沒有洩出 https://domain/.git/HEAD,有興趣可以自行測試

wget http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
unzip top-1m.csv.zip
sed -i.bak ’s/.*,//‘ top-1m.csv
./gitfinder.py -i top-1m.csv

聲明

筆者由連登相關討論《IT技術交流 撐送中聯署會係8月尾完結,而家以穩定每分鐘8個簽名增長中》得知此事件,並希望盡早協助撐送中聯署會了解有關洩出的資料範圍的廣度和深度,故使用 GitTools 嘗試完整取得洩出的資料,發佈此網絡安全教育文章後便會永久移除所有撐送中聯署會網站代碼,特此聲明。