iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0

昨天剛講完 Cookie 原理,趁大家記憶猶新趕快來觀察一下 Github 的登入機制還有他是如何傳遞 cookie 的,我覺得觀察這個還滿有趣的,大家也可以跟著做做看,話不多說,馬上開始第一步吧

Step 1 - 到達 Github 登入頁面

用無痕模式剛到登入頁面時馬上就被 Set 很多個 Cookie,其中最重要的兩個分別是 logged_in=no_gh_sess=...,我想 _gh_sess 應該是 Github session 的意思,用來記錄目前這個使用者的 session,而 logged_in=no 很明顯就是記錄目前這個 session 目前有沒有登入

Step 2 - 嘗試看看把 Cookie 刪掉然後登入

我想知道剛剛那個 cookie _gh_sess=... 對於登入是不是很重要,所以我把它刪掉,再試試看能不能登入

刪掉 _gh_sess 之後我輸入正確的帳號密碼按下登入,結果果然失敗了,而且 Github 回傳 422 Unprocessable Entity,代表這個 _gh_sess 很重要,只有帳號密碼沒有 Github Session 是沒辦法登入的

你可以想說哪有這麼幸運,一次就可以找到 _gh_sess 是關鍵 cookie?其實我試了很多次才找到,就一個一個慢慢刪掉看看,多試幾次總會成功的XD

Step 3 - 正常登入

這次試試看不要把 _gh_sess 刪掉就登入,看著 _gh_sess 跟著請求傳出去然後就成功了,所以可以確定一定要有 _gh_sess 才能登入

Step 4 - 觀察登入之後拿回了什麼

登入後瀏覽器得到三個新的 cookie,分別是 user_session__Host-user_session_same_sitedotcom_user

這邊有一個很奇怪的地方是 user_session__Host-user_session_same_site 兩個 cookie 的值竟然是一樣的,個人猜測應該是用來驗證的,如果請求中的這兩個 cookie 值不一樣就拒絕請求

Step 5 - 嘗試刪掉 user session

因為我想知道 Github 到底是判斷哪個 cookie 知道我有沒有登入,於是我把 user_session 刪掉再重新整理,結果果然又回到了登入前的頁面,代表 user_session 存的東西應該是登入後的 session Id,沒有他就會被登出

整個登入流程

由上面五個步驟的觀察猜一下 Github 的登入流程:

  1. 第一次到 Github 時他會給你一個 Github session 記在 _gh_sess 裡面
  2. 要登入的時候必須帶著帳號密碼跟 Github session 去登入
  3. 登入成功後他會把你標記為已登入,然後給你一個 user session 記在 user_session 裡面
  4. 之後你要做任何操作都需要帶著 user_session 這張號碼牌,這樣 Github 就能辨識你是誰
  5. 如果你沒有 user session 只有 Github session 那就視同還沒登入

小結

這篇觀察篇是想跟大家分享我是怎麼觀察 Github 的登入機制以及怎麼找到關鍵 cookie,雖然看我做起來好像很簡單,但其實中間要一直反覆測試才能找到關鍵,所以也是花了非常多時間XD

俗話說「知己知彼,百戰百勝」,我們現在已經了解 Github 的登入機制了,要模仿他還會難嗎?

明天就要正式實作登入了,如果對這篇有什麼疑問可以在底下留言,我會盡力回答大家,大家如果有空的話也可以試著去觀察 Facebook、Gitlab 等等網站的登入機制,說不定會有意想不到的收穫哦


上一篇
Day11-Cookie & 登入 I(原理篇)
下一篇
Day13-Cookie & 登入 III(實作篇)
系列文
Go Phishing!30 天用 Go 實作 Reverse Proxy 之釣魚大作戰30

1 則留言

0
minchao
iT邦新手 5 級 ‧ 2018-11-11 20:50:58

__Host-user_session_same_site 設定了 SameSite=Strict,在跨域請求時 cookie 不會被加上去,主要用來作 CSRF 防禦,詳情可以參考這篇 https://blog.techbridge.cc/2017/02/25/csrf-introduction/

原來是這樣,謝謝你的補充~

我要留言

立即登入留言