首先我想先對不懂什麼是油猴的人說明一下功能。
網頁是由js html css 所操控的,而後兩者都是作為裝飾性的元素存在的(這邊暫且這樣解釋),因此您所做的操作都是由js的程式碼所控制的。因此從簡而言我們只要覆蓋掉原本的js 程式碼,在貼上我們想要他實現的功能就能夠完成目的
程式碼你看不懂沒關係,因為他們都是根據網頁的內碼改過來的。
這邊你可能會有兩個問題
- 為什麼會出現登入驗證碼錯誤的問題
- 請問可以不要出現這個錯誤
首先北科登入的流程是這樣(其實兩個月前寫的code 有些已經記不請楚了)
- 送給你一個需要返回驗證碼的session(你可以把它理解是token,如下表的對應關係。屬性是httpOnly),目的是上資料庫知道你現在所使用的驗證碼是哪一組的
| session | 驗證碼 | 圖片 |
|---|---|---|
| dhjajbjsaehrj(類似亂碼) | ggit | (這邊就不放圖片了) |
| 反正就是這樣的對應關係 |
-
你輸入的驗證碼,並且把session也一併回傳回去
-
如果你的驗證碼與session所對應的驗證碼一模一樣,那麼就是通過測試
-
如果你不通過的話還會再登入一次,此時神奇的就來了,這時再一次用封包的方式就可以成功登入(因為原本的session已經失效了),可能因為後端程式的寫法導致有此漏洞
以上就是整個登入的原理,若你看不懂的話。 我建議你把上面的專有名詞都查一遍,並且用burpsuite或wireshark抓一遍封包流看看。
你可能會好奇說,我能一開始就不要回傳session嗎?這樣就可以不會出現『驗證碼錯誤』的問題了
很可惜這個在瀏覽器上面做不到(至少以我目前的功力來說),由於他是httpOnly的屬性,代表瀏覽器已經將它鎖死了,所以我們並不能去更改他。
不過你會問說,那麼我不用瀏覽器的方式登入,而使用純封包的方式溝通行嗎?當然可以,但這樣的方式有點麻煩,我懶
最後給大家看一張sesion cookie的照片
圖:4個cookie (username是我自己加入的, 在此並沒有任何作用)