JSON Web Token

JWT

什么是JWT

JWT(JSON Web Token)是一種用于在各方之間作為JSON對象安全地傳輸信息的開放標準(RFC 7519)。該信息經過數字簽名,因此是可驗證和可信的。JWT 可以使用HMAC算法或使用RSA的公鑰/私鑰對進行簽名

JWT的組成
  • Header(頭部):包含令牌的類型(JWT)和使用的簽名算法(如HMAC SHA256或RSA)。
  • Payload(負載):包含聲明(claims)。聲明是關于實體(通常是用戶)和其他數據的斷言。聲明有三種類型:
    • Registered claims(注冊聲明):這些是預定義的聲明,如iss(簽發者)、exp(過期時間)、sub(主題)、aud(受眾)等。它們不是強制的,但建議使用。
    • Public claims(公共聲明):這些是可以在JWT中使用的自定義聲明。為了避免沖突,應在IANA JSON Web Token Registry中定義或使用具有防沖突前綴的命名空間。
    • Private claims(私有聲明):這些是雙方之間使用的自定義聲明,通常是特定于應用程序的。
  • Signature(簽名):用于驗證消息在傳遞過程中是否未被篡改。首先,您需要將編碼后的頭部和負載進行簽名,然后使用指定的簽名算法創建簽名。簽名的過程如下:
    • 使用 Base64 URL 編碼對 Header 和 Payload 進行編碼。
    • 使用編碼后的 Header、編碼后的 Payload 和一個密鑰(對于 HMAC 算法)或私鑰(對于 RSA)創建簽名。

[HFCTF2020]EasyLogin

正常進行注冊登錄,發現有命令框,嘗試了各種讀取方式都沒用,抓包發現存在jwt

再查看一下源碼,看有沒有什么提示

發現了關于flag的提示

解釋一下這串代碼的大致意思:

  • AJAX 請求: 這段代碼使用 $.get/api/flag 端點發起一個 AJAX GET 請求。
  • 成功回調: 如果請求成功,done 方法會被調用,并傳入返回的數據。
    • 使用解構賦值從返回的數據中提取 flag 屬性。
    • 將 ID 為 username 的輸入元素的值設置為這個 flag
  • 失敗回調: 如果請求失敗,fail 方法會被調用。
    • xhr: XMLHttpRequest 對象。
    • xhr.responseJSON.message: 從響應 JSON 中提取的錯誤信息,并在警告框中顯示。

猜測flag應該就在/api/flag里面,提示了koa框架;

koa-static是一個處理靜態文件資源的中間件,從大佬哪里借鑒一個koa的框架結構

controllers是項目控制器存放目錄,訪問來查看源碼

結合前面提到的flag所在的目錄,訪問api目錄

/controllers/api.js

?發現了返回flag的條件

'GET /api/flag': async (ctx, next) => {if(ctx.session.username !== 'admin'){throw new APIError('permission error', 'permission denied');}const flag = fs.readFileSync('/flag').toString();ctx.rest({flag});await next();},

簡單來說就是判斷username是否為admin,如果是admin的話就讀取'/flag'下的內容以字符串的形式存儲在flag中

想要username為admin,就只有通過JWT偽造(因為注冊為admin會報錯)

那么解題思路也就明確了,通過jwt將username偽造為admin,來讀取flag并返回

先解析返回的jwt,簽名是HS256

偽造方法,把"alg"值更改為"none",這樣就不執行簽名驗證,將secretid改為[]代表一個空值

修改之后進行base64編碼(去掉換行符和編碼后的"="),把header和payload拼接,因為簽名改為了none所以簽名認證就為空

進入/api/flag,抓包,修改一下sses:aok和sses:aok.sig,修改為偽造jwt后返回的對應的值

就完成了jwt的偽造,獲取到flag

總結:這個周從復現開始就全是token的題,前面也接觸過session,一開始只是草草了解token和session類似,但是現在把兩個做了明顯的區別對比

Token

  • 客戶端存儲:Token是在客戶端存儲用戶身份驗證和狀態信息的一種機制。通常,服務器會在用戶登錄成功后生成一個令牌(Token),并將其發送給客戶端。客戶端通常會將Token存儲在本地,比如LocalStorage、SessionStorage或者Cookies中。

  • 狀態管理:Token同樣用于跟蹤用戶的身份驗證狀態,但所有的狀態信息都被編碼到Token中。服務器在接收到包含Token的HTTP請求時,會解碼Token并驗證用戶的身份。

  • 無狀態性:Token通常被設計為無狀態的,這意味著服務器不需要在內存或者數據庫中存儲任何關于用戶會話的信息。這使得系統更容易水平擴展,并提高了性能。

  • 靈活性:Token可以在不同的服務之間輕松傳遞,因為所有的用戶信息都被編碼在Token中。這使得Token特別適合于微服務架構和分布式系統。

  • 安全性:Token通常使用加密算法進行簽名,以確保其完整性和真實性。另外,Token還可以包含過期時間和范圍限制等信息,以增強安全性。

Session

  • 服務器端存儲:Session是在服務器端存儲用戶的身份驗證和狀態信息的一種機制。通常,服務器會在用戶登錄后創建一個唯一的會話標識符(Session ID),并將這個ID與用戶的相關信息存儲在服務器上的內存或持久化存儲中。

  • 狀態管理:Session用于跟蹤用戶的會話狀態,可以存儲用戶的登錄狀態、權限信息、購物車內容等。服務器可以根據Session ID來識別特定用戶的會話,并提供相應的個性化服務。

  • Cookies支持:通常,服務器會將Session ID 存儲在客戶端的Cookie中,以便在后續的HTTP請求中發送回服務器。這樣,服務器就可以根據Session ID 來識別用戶的會話。但是,Session ID 也可以通過其他方式在客戶端進行傳輸,比如通過URL參數或者隱藏域。

  • 安全性:由于Session數據存儲在服務器端,因此相對來說更加安全。但是,仍然需要注意Session劫持(Session Hijacking)和會話固定(Session Fixation)等攻擊。

區別

  • Session主要依賴于服務器端存儲,用于跟蹤用戶的會話狀態。
  • Token主要依賴于客戶端存儲,包含了用戶的身份驗證和狀態信息,并且被設計為無狀態的、可傳遞的機制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19908.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序 vant Picker組件default-index不生效的解決辦法

1、原始的寫法以及問題 <van-popup show"{{ showPopup && cellClick Freq }}" position"bottom" bind:close"onPopupClose"><van-picker value-key"Spec" show-toolbar title"{{cellClick Freq ? showPcCha…

win10鍵盤按亂了,如何恢復?

今天鍵盤被寶寶給按亂了&#xff0c;好不容易給重新調整回來&#xff0c;記錄備忘&#xff1a; 1、win10的asdf和方向鍵互換了&#xff1a; 使用Fnw鍵來回切換&#xff0c;OK&#xff01; 2、鍵盤的win鍵失效&#xff0c;例如&#xff1a;按winD無法顯示桌面。此時&#xf…

Day30

Day30 CSS CSS常用樣式 font-family:“微軟雅黑” -設置字體 font-size: 50px -設置字體大小 font-style : italic-設置字體風格 font-weight:bolder -設置字體粗細 color: white-設置字體顏色 letter-spacing: 20px-設置文本內容的間隔 text-decoration :underline - 設置劃…

電動汽車電子系統架構

電動汽車的普及正在穩步發展&#xff0c;供應鏈的各個環節也在發生變化。它涵蓋了制造電動汽車零件的原材料、化學品、電池和各種組件。與此同時&#xff0c;汽車充電基礎設施也參與其中&#xff0c;它們正經歷一個歷史性的階段&#xff0c;經過徹底的重新設計。它們的電氣化以…

Wpf 使用 Prism 實戰開發Day30

登錄界面設計 一.準備登錄界面圖片素材&#xff08;透明背景圖片&#xff09; 1.把準備好的圖片放在Images 文件夾下面&#xff0c;格式分別是.png和.ico 2.選中 login.png圖片鼠標右鍵&#xff0c;選擇屬性。生成的操作選擇>資源 3.MyTodo 應用程序右鍵&#xff0c;屬性&a…

如何修改開源項目中發現的bug?

如何修改開源項目中發現的bug&#xff1f; 目錄 如何修改開源項目中發現的bug&#xff1f;第一步&#xff1a;找到開源項目并建立分支第二步&#xff1a;克隆分支到本地倉庫第三步&#xff1a;在本地對項目進行修改第四步&#xff1a;依次使用命令行進行操作注意&#xff1a;Gi…

地質災害位移應急監測站

地質災害位移應急監測站是一種專門用于地質災害預警和應急響應的設施&#xff0c;它能夠實時監測和分析山體、建筑物、管道等的位移變化情況。以下是關于地質災害位移應急監測站的詳細介紹&#xff1a; 主要組成部分 傳感器&#xff1a;安裝于需要監測的位置&#xff0c;用于…

RK3588+FPGA+AI高性能邊緣計算盒子,應用于視頻分析、圖像視覺等

搭載RK3588&#xff08;四核 A76四核 A55&#xff09;&#xff0c;CPU主頻高達 2.4GHz &#xff0c;提供1MB L2 Cache 和 3MB L3 &#xff0c;Cache提供更強的 CPU運算能力&#xff0c;具備6T AI算力&#xff0c;可擴展至38T算力。 產品規格 系統主控CPURK3588&#xff0c;四核…

Nginx服務器替換SSL證書記得要重啟

輸入訪問域名&#xff0c;發現https證書過期了&#xff0c;果斷申請好ssl證書&#xff0c;并在Nginx服務器上將原證書替換成新申請的證書。 打開瀏覽器輸入網址確認一看&#xff0c;還是原來的證書并沒有替換成功?感覺不合常理 以下開啟了證書為什么替換不成功的排查 1、清除…

GUI 02:布局管理器相關知識,AWT 的 3 種布局管理器應用,以及嵌套布局的使用

一、前言 記錄時間 [2024-05-31] 前置文章 GUI 01&#xff1a;GUI 編程概述&#xff0c;AWT 相關知識&#xff0c;Frame 窗口&#xff0c;Panel 面板&#xff0c;及監聽事件的應用 本文講述了 GUI 編程種布局管理器的相關知識&#xff0c;以及 AWT 的 3 種布局管理器——流式布…

【FPGA】Verilog語言從零到精通

接觸fpga一段時間&#xff0c;也能寫點跑點吧……試試系統地康康呢~這個需要耐心但是回報巨大的工作。正原子&&小梅哥 15_語法篇&#xff1a;Verilog高級知識點_嗶哩嗶哩_bilibili 1Verilog基礎 Verilog程序框架&#xff1a;模塊的結構 類比&#xff1a;c語言的基礎…

P3881

最小值最大 二分&#xff1a;枚舉兩個牛之間的最小距離&#xff0c;左端點是1&#xff0c;右端點是籬笆總長度。 Check數組&#xff1a; 如果兩頭牛之間距離是Mid不合法&#xff0c;則返回0&#xff08;false&#xff09;&#xff1b; 如果兩頭牛之間距離是Mid合法&#xf…

去噪擴散概率模型在現代技術中的應用:圖像生成、音頻處理到藥物發現

去噪擴散概率模型&#xff08;DDPMs&#xff09;是一種先進的生成模型&#xff0c;它通過模擬數據的噪聲化和去噪過程&#xff0c;展現出多方面的優勢。DDPMs能夠生成高質量的數據樣本&#xff0c;這在圖像合成、音頻生成等領域尤為重要。它們在數據去噪方面表現出色&#xff0…

瑞吉外賣項目學習筆記(二)后臺系統的員工管理業務開發

一、完善登錄功能 1.1 問題分析 1.2 代碼實現 package com.itheima.reggie.filter;//這是一個過濾器類 //登錄檢查過濾器import com.alibaba.fastjson.JSON; import com.itheima.reggie.common.R; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf…

華為OD機試-最大坐標值

題目描述與示例 題目描述 小明在玩一個游戲&#xff0c;游戲規則如下&#xff1a;在游戲開始前&#xff0c;小明站在坐標軸原點處&#xff08;坐標值為 0&#xff09;給定一組指令和一個幸運數&#xff0c;每個指令都是一個整數&#xff0c;小明按照指定的要求前進或者后退指…

解析Java中1000個常用類:FunctionalInterface類,你學會了嗎?

Java 8 引入了一系列新的特性和改進,其中之一便是函數式編程。函數式接口(Functional Interface)是函數式編程的核心概念之一。本文將深入探討 FunctionalInterface 注解,介紹其用法、重要性,并通過示例展示如何在實際開發中應用函數式接口。 什么是函數式接口? 函數式…

有向圖的拓撲排序

文章目錄 概念及模板例題 雜務 概念及模板 有向圖的拓撲排序是指將有向無環圖中的所有頂點排成一個線性序列&#xff0c;使得圖中任意一對頂點u和v&#xff0c;若邊(u, v)在圖中&#xff0c;則u在該序列中排在v的前面。 例如&#xff0c;假設有n個任務&#xff0c;這些任務需…

HarmonyOS鴻蒙學習筆記(28)@entry和@Component的生命周期

entry和Component的生命周期 entry和Component的關系Component生命周期Entry生命周期 生命周期流程圖生命周期展示示例代碼參考資料 HarmonyOS的生命周期可以分為Compnent的生命周期和Entry的生命周期&#xff0c;也就是自定義組件的生命周期和頁面的生命周期。 entry和Compone…

【傳知代碼】雙深度學習模型實現結直腸癌檢測(論文復現)

前言&#xff1a;在醫學領域&#xff0c;科技的進步一直是改變人類生活的關鍵驅動力之一。隨著深度學習技術的不斷發展&#xff0c;其在醫學影像診斷領域的應用正日益受到關注。結直腸癌是一種常見但危害極大的惡性腫瘤&#xff0c;在早期發現和及時治療方面具有重要意義。然而…

快手發布大模型產品“可圖”,超20種創新AI圖像玩法限免上線

近日&#xff0c;快手自研大模型產品“可圖”&#xff08;Kolors&#xff09;正式對外開放&#xff0c;支持文生圖和圖生圖兩類功能&#xff0c;已上線20余種AI圖像玩法。目前&#xff0c;用戶可以通過“可圖大模型”官方網站和微信小程序&#xff0c;免費使用各項AI圖像功能。…