# JWT Lab2 本題是基於 JWT 的機制來處理會話,伺服器配置為接受未簽名的 JWT 不安全,要解決該實驗室問題,請修改的工作階段令牌以訪問的管理面板 ,然後刪除使用者 carlos。 登入帳號:`wiener:peter` 一樣登入帳號。 ![image](https://hackmd.io/_uploads/ryF8o5hPee.png) ![image](https://hackmd.io/_uploads/HJcOoq2wll.png) 發現是 JWT 格式,所以我們拿去解碼。 ![image](https://hackmd.io/_uploads/BJvco9hvex.png) 這裡直接改 admin 是不行的,因為他會去做驗證,但現在我想繞過驗證的話,我們可以嘗試使用:`alg: none` :::info ### 為什麼要改 `alg: none`? 一些開發者或框架誤以為 `alg: none` 只是跳過驗證而已,沒處理簽章段,結果導致這樣的情況: - `alg = "none"` ➜ 不驗證簽章 ➜ 但不管你簽章有沒有,它都不管了 - ### 為什麼要刪除第三段? - 為什麼要移除簽名? ➜ 因為 `alg: none` 的 JWT 根據規範不該有簽章(要以 .<末尾> 結束)。 - 如果沒移除會怎樣? ➜ 視伺服器而定:安全實作會拒絕,不安全實作可能誤接受(但不建議賭)。 - 怎麼改最安全? ➜ 把 alg 改為 "none",移除第三段簽章並保留結尾 `.`。 ::: ![image](https://hackmd.io/_uploads/S1N5Ji3Dee.png) ``` eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc1NDIxMzI5Miwic3ViIjoiYWRtaW5pc3RyYXRvciJ9. ``` ![image](https://hackmd.io/_uploads/S18tyjhwgl.png) 結果確實登入進來了。 ![image](https://hackmd.io/_uploads/SJvhJonPeg.png) ---