六.jwt
這題我又不會寫
先來了解下jwt
**JWT(JSON Web Token)**是一種基于JSON的開放標準(RFC 7519),主要用于在網絡應用環境間傳遞聲明信息。JWT通常用于身份驗證和信息交換,確保在各方之間安全地傳輸信息。一個JWT實際上是一個被編碼的JSON字符串,包含了一系列聲明。它由三部分組成:Header(頭部)、Payload(載荷)[&和Signature(簽名)&]。
JWT結構詳解
Header(頭部)
Header部分用于描述JWT的元數據,包括令牌的類型(JWT)和所使用的簽名算法(如HMAC SHA256或RSA)。例如:
{
"typ": "JWT",
"alg": "HS256"
}
這個JSON對象會被Base64編碼成字符串,形成JWT的第一部分。
Payload(載荷)
Payload部分存儲要傳輸的信息,如用戶的身份信息和一些聲明。這里可以包含三種類型的聲明:注冊聲明、公共聲明和私有聲明。例如:
{
"userId": "b07f85be-45da",
"iss": "https://provider.domain.com/",
"sub": "auth/some-hash-here",
"exp": 153452683
}
這部分信息也會被Base64編碼,形成JWT的第二部分。需要注意的是,Payload中的信息是可以被任何人解碼閱讀的,因此不應該存放敏感信息。
Signature(簽名)
Signature部分是對前兩部分的簽名,防止數據篡改。生成簽名的方法是將編碼后的Header和Payload以及一個密鑰使用Header中指定的算法進行簽名。例如,如果使用HMAC SHA256算法,簽名會是這樣的:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
這個簽名確保了JWT在傳輸過程中未被篡改。
一、JWT 的核心作用
1. 身份認證(Authentication)
2. 信息交換與授權(Authorization)
3. 安全傳輸數據
我的理解就是? JWT在這里起身份認證的作用,然后整個過程相當于垂直越權
先隨便注冊一個賬號
然后登錄,點擊個人中心
F12,點擊網絡,搜索JWT
可以使用jwtcrack工具中的crackjwt.py腳本用字典爆破出密鑰
jwtcrack工具免費下載
使用方法:
python? ?crackjwt.py? ?JWT? ?字典
得到密鑰為 SYSA
?再把JWT放到在線解析網站(下面3個隨便選一個即可)
jwt在線解析 - JSON工具
jwt解密/加密 - bejson在線工具
JSON Web Tokens - jwt.io
把username改為admin,把密鑰改為SYSA ,然后進行編碼
??
用編碼后的JWT替換原來的JWT
得到flag?
flag{ec39c705cfb5295f9dddcedc819a1659}
七.login?
F12可以看到給了學號密碼
學號密碼提交20200101,顯示提交成功,但沒啥反應
提交20200102試試,發現顯示了f
然后每次加1,把每次顯示的 合在一起就是flag
flag{dlcg}
八.?iphone
進來后是這樣的
翻譯一下
【抱歉,管理菜單必須從 iPhone 或iPad 查看;】這句話是重點
這里又有個知識點了
User-Agent
?User-Agent?是 HTTP 請求頭中的一個字段,用于標識客戶端的設備、操作系統、瀏覽器等信息。服務器通過解析 User-Agent,可以判斷訪問者的來源,從而決定是否允許訪問或提供特定的內容。
在網頁爬蟲中,默認的 User-Agent 通常會暴露爬蟲的身份,導致被服務器拒絕訪問(如返回 HTTP 403 錯誤)。通過修改 User-Agent,可以偽裝成普通用戶的瀏覽器,從而繞過限制。
如何獲取網頁的 User-Agent
在瀏覽器中,可以通過以下步驟獲取 User-Agent:
打開目標網頁,按下?F12?或點擊瀏覽器右上角的“更多工具”選擇“開發者工具”。
刷新網頁后,選擇“Network”選項卡,再點擊“Doc”。
在右側的“Headers”中,向下滾動找到 User-Agent 字段,復制其內容。
User-Agent 的組成結構
User-Agent 通常由以下部分組成:
Mozilla/5.0:歷史遺留部分,幾乎所有 User-Agent 都包含此字段。
操作系統信息:如?Windows NT 10.0?表示 Windows 10 系統,X11; Linux x86_64?表示 Linux 系統。
引擎版本:如?AppleWebKit/537.36,表示瀏覽器的渲染引擎。
瀏覽器版本:如?Chrome/81.0.4044.113,表示瀏覽器的具體版本。
通過理解 User-Agent 的結構,可以根據需要自定義字段內容,以適應不同的爬蟲場景。
?所有只需要通過修改 User-Agent,可以偽裝成iphone用戶的瀏覽器,從而繞過限制。
Mozilla/5.0 (iPhone; CPU iPhone OS 16_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Mobile/15E148 Safari/604.1
輕松拿下
flag{ba4c2f175f0dba2f2974e676c6dfbbab}
?九.浮生日記
隨便嘗試的輸入一些東西,還嘗試了一些注入,但是沒啥用
F12后有些新發現
其實上面也有?
彈個窗?,讓我想到了xss的一些知識
輸入<script>alert(1)</script>試試,發現script沒了,應該是被注釋掉了
根據源代碼先閉合value,然后再獨立出一個script執行惡意代碼
"><sscriptcript>alert(1)</sscriptcript>
這時候就會彈出來一個彈窗,點確認?
flag{747b11f075d2f6f0d599058206190e27}
十.$$?
?又是php
解析一下
<?php
/*PolarD&N CTF*/highlight_file(__file__); // 顯示當前PHP源代碼,方便審計
error_reporting(0); // 關閉錯誤報告,防止信息泄露
include "flag.php"; // 包含存儲flag的文件$a=$_GET['c']; // 獲取URL參數c的值if(isset($_GET['c'])){ // 檢查參數c是否存在if(preg_match('/flag|\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $a)){// 使用正則表達式過濾危險字符:// 包括flag字符串、空白字符、各種符號以及數字和HTML標簽die("oh on!!!"); // 匹配到過濾字符時終止執行}else{eval("var_dump($$a);"); // 執行動態生成的PHP代碼,使用變量變量語法}
}
GLOBALS
?
GLOBALS
?是 PHP 中的一個超全局變量(Superglobal Variable),其作用是提供對所有全局變量的訪問。總結:利用流程
- 用戶訪問 URL:
http://example.com/index.php?c=GLOBALS
- 代碼執行?
eval("var_dump($GLOBALS);");
var_dump()
?輸出所有全局變量,包括?$flag
- 用戶從輸出中提取 flag 值
?輸入?c=GLOBALS
flag{9f8a2133f0cad361ff6d22a445c2531a}