學(xué)校ftp服務(wù)器做網(wǎng)站泰安seo
目錄
Java安全-Druid監(jiān)控-未授權(quán)訪問(wèn)&信息泄漏
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
攻擊點(diǎn)
Java安全-Swagger接口-導(dǎo)入&聯(lián)動(dòng)批量測(cè)試
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
自動(dòng)化發(fā)包測(cè)試
自動(dòng)化漏洞測(cè)試
Java安全-JWT令牌-空算法&未簽名&密匙提取
識(shí)別 JWT
方式一:人工識(shí)別
方式二:Burp插件識(shí)別
解析JWT數(shù)據(jù)
JWT安全
空加密算法(攻擊頭部不使用加密)
未校驗(yàn)簽名(攻擊簽名不使用簽名認(rèn)證)
暴力破解密鑰(攻擊簽名知道密鑰實(shí)現(xiàn)重組)
其他安全參考:(源碼泄漏密匙,Kid注入等)
CTF-JWT
Web345(None空加密算法)
Web346(None算法繞過(guò)簽名)
Web347(弱口令密鑰獲取)
Web348(爆破密鑰上題一樣)
Web349(公鑰私鑰泄露)
Web350(密鑰混淆攻擊RS256=>HS256)
黑盒JWT測(cè)試
知識(shí)點(diǎn)
1、Java安全-Druid監(jiān)控-未授權(quán)訪問(wèn)&信息泄漏
2、Java安全-Swagger接口-文檔導(dǎo)入&聯(lián)動(dòng)批量測(cè)試
2、Java安全-JWT令牌攻防-空算法&未簽名&密匙提取
Java安全-Druid監(jiān)控-未授權(quán)訪問(wèn)&信息泄漏
Druid是阿里巴巴數(shù)據(jù)庫(kù)事業(yè)部出品,為監(jiān)控而生的數(shù)據(jù)庫(kù)連接池。Druid提供的監(jiān)控功能,監(jiān)控SQL的執(zhí)行時(shí)間、監(jiān)控Web URI的請(qǐng)求、Session監(jiān)控。當(dāng)開(kāi)發(fā)者配置不當(dāng)時(shí)就可能造成未授權(quán)訪問(wèn)漏洞。
參考:https://developer.aliyun.com/article/1260382
攻擊點(diǎn):
- 直接拼接URL路徑,嘗試能否直接未授權(quán)訪問(wèn)系統(tǒng)功能點(diǎn)。
- 結(jié)合泄露URL路徑和Session信息,利用BurpSuite進(jìn)行嘗試登錄。
- 利用Cookie編輯器替換Session,再次訪問(wèn)后臺(tái)路徑嘗試進(jìn)入后臺(tái)。
?
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
在項(xiàng)目源碼配置文件中搜索druid
關(guān)鍵字
攻擊點(diǎn)
直接拼接URL路徑,嘗試能否直接未授權(quán)訪問(wèn)系統(tǒng)功能點(diǎn)。
結(jié)合泄露URL路徑和Session信息,利用BurpSuite進(jìn)行嘗試登錄
利用Cookie編輯器替換Session,再次訪問(wèn)后臺(tái)路徑嘗試進(jìn)入后臺(tái)。
Java安全-Swagger接口-導(dǎo)入&聯(lián)動(dòng)批量測(cè)試
Swagger是一個(gè)用于生成、描述和調(diào)用RESTful接口的Web服務(wù)。就是將項(xiàng)目中所有(想要暴露的)接口展現(xiàn)在頁(yè)面上,并可以進(jìn)行接口調(diào)用和測(cè)試的服務(wù)。所以可以對(duì)這個(gè)接口進(jìn)行漏洞測(cè)試,看是否存在未授權(quán)訪問(wèn)、sql注入、文件上傳等漏洞。由于接口太多,一個(gè)個(gè)接口測(cè)試的話太費(fèi)時(shí)間,所以一般會(huì)采用自動(dòng)化接口漏洞安全測(cè)試。
自動(dòng)化發(fā)包測(cè)試,Postman
自動(dòng)化漏洞測(cè)試,聯(lián)動(dòng)BurpSuite Xray等
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
自動(dòng)化發(fā)包測(cè)試
如果postman
上有出現(xiàn)200
的響應(yīng),那么就有可能是一個(gè)未授權(quán)接口
自動(dòng)化漏洞測(cè)試
聯(lián)動(dòng)BurpSuite Xray
等
?
也可以在BP上看有沒(méi)有200響應(yīng)的數(shù)據(jù)包,也有可能會(huì)是一個(gè)未授權(quán)接口
bp
聯(lián)動(dòng)xray
Java安全-JWT令牌-空算法&未簽名&密匙提取
JSON Web Token(JWT)。它遵循JSON格式,將用戶信息加密到token里,服務(wù)器不保存任何用戶信息,只保存密鑰信息,通過(guò)使用特定加密算法驗(yàn)證token,通過(guò)token驗(yàn)證用戶身份?;趖oken的身份驗(yàn)證可以替代傳統(tǒng)的cookie+session身份驗(yàn)證方法。這使得JWT成為高度分布式網(wǎng)站的熱門選擇,在這些網(wǎng)站中,用戶需要與多個(gè)后端服務(wù)器無(wú)縫交互。
JWT攻擊
識(shí)別 JWT
JWT由三部分組成:表頭,有效載荷,簽名
標(biāo)頭(Header)
Header是JWT的第一個(gè)部分,是一個(gè)JSON對(duì)象,主要聲明了JWT的簽名算法,如"HS256”、"RS256"等,以及其他可選參數(shù),如"kid"、"jku"、"x5u"等
alg字段通常用于表示加密采用的算法。如"HS256"、"RS256"等
typ字段通常用于表示類型
還有一些其他可選參數(shù),如"kid"、"jku"、"x5u"等
有效載荷(Payload)
Payload是JWT的第二個(gè)部分,這是一個(gè)JSON對(duì)象,主要承載了各種聲明并傳遞明文數(shù)據(jù),用于存儲(chǔ)用戶的信息,如id、用戶名、角色、令牌生成時(shí)間和其他自定義聲明。
iss:該字段表示jwt的簽發(fā)者。
sub:該jwt面向的用戶。
aud:jwt的接收方。
exp:jwt的過(guò)期時(shí)間,通常來(lái)說(shuō)是一個(gè)時(shí)間戳。
iat:jwt的簽發(fā)時(shí)間,常來(lái)說(shuō)是一個(gè)時(shí)間戳。
jti:此jwt的唯一標(biāo)識(shí)。通常用于解決請(qǐng)求中的重放攻擊。該字段在大多數(shù)地方?jīng)]有被提及或使用。因?yàn)槭褂么俗侄尉鸵馕吨仨氁诜?wù)器維護(hù)一張jti表, 當(dāng)客戶端攜帶jwt訪問(wèn)的時(shí)候需要在jti表中查找這個(gè)唯一標(biāo)識(shí)是否被使用過(guò)。使用這種方式防止重放攻擊似乎讓jwt有點(diǎn)怪怪的感覺(jué), 畢竟jwt所宣稱的優(yōu)點(diǎn)就是無(wú)狀態(tài)訪問(wèn)
簽名(Signature)
Signature是對(duì)Header和Payload進(jìn)行簽名,具體是用什么加密方式寫(xiě)在Header的alg 中。同時(shí)擁有該部分的JWT被稱為JWS,也就是簽了名的JWT。
對(duì)Header和Payload進(jìn)行簽名,具體是用什么加密方式寫(xiě)在Header的alg中。
同時(shí)擁有該部分的JWT被稱為JWS,也就是簽了名的JWT。
第一部分:對(duì) JSON 的頭部做 base64 編碼處理得到
第二部分:對(duì) JSON 類型的 payload 做 base64 編碼處理得到
第三部分:分別對(duì)頭部和載荷做base64編碼,并使用.拼接起來(lái)
使用頭部聲明的加密方式,對(duì)base64編碼前兩部分合并的結(jié)果加鹽加密處理,作為JWT
在線解析:https://jwt.io/
BURP插件:Hae 或 JSON Web Tokens
方式一:人工識(shí)別
方式二:Burp插件識(shí)別
Hae(需要自己下載項(xiàng)目)
JSON Web Tokens(BP商店有,支持識(shí)別解析)
解析JWT數(shù)據(jù)
JWT在線解析:https://jwt.io/
BP官方插件-JSON Web Tokens,上面已有介紹
JWT安全
空加密算法(攻擊頭部不使用加密)
簽名算法可被修改為none,JWT支持將算法設(shè)定為"None"。如果"alg"字段設(shè)為"None",那么簽名會(huì)被置空,這樣任何token都是有效的。
未校驗(yàn)簽名(攻擊簽名不使用簽名認(rèn)證)
某些服務(wù)端并未校驗(yàn)JWT簽名,可以嘗試修改payload后然后直接請(qǐng)求token或者直接刪除signature再次請(qǐng)求查看其是否還有效。
暴力破解密鑰(攻擊簽名知道密鑰實(shí)現(xiàn)重組)
針對(duì)是對(duì)稱加密算法(非對(duì)稱沒(méi)有用)
非對(duì)稱要使用方法:從源碼獲取公鑰私鑰文件
某些簽名算法,例如HS256(HMAC+SHA-256),會(huì)像密碼一樣使用一個(gè)任意的、獨(dú)立的字符串作為秘密密鑰。這個(gè)秘鑰如被輕易猜到或暴力破解,則攻擊者能以任意的頭部和載荷值來(lái)創(chuàng)建JWT,然后用密鑰重新給令牌簽名。
其他安全參考:(源碼泄漏密匙,Kid注入等)
參考文章:https://blog.csdn.net/weixin_44288604/article/details/128562796
CTF-JWT
JWT利用項(xiàng)目:https://github.com/ticarpi/jwt_tool
項(xiàng)目命令幫助
# 使用None算法
python3 jwt_tool.py JWT_HERE -X a# 自定義修改生成
python3 jwt_tool.py JWT_HERE -T# 使用字典破解
python3 jwt_tool.py JWT_HERE -C -d dictionary.txt# 指定密碼測(cè)試
python3 jwt_tool.py JWT_HERE -C -p password_here
Web345(None空加密算法)
簽名算法可被修改為none,JWT支持將算法設(shè)定為 "None" 。如果 "alg" 字段設(shè)為 "None" ,那么簽名會(huì)被置空,這樣任何token都是有效的。
Web346(None算法繞過(guò)簽名)
某些服務(wù)端并未校驗(yàn)JWT簽名,可以嘗試修改payload后然后直接請(qǐng)求token或者直接刪除signature再次請(qǐng)求查看其是否還有效。
解題思路:alg強(qiáng)制設(shè)置為none繞過(guò)簽名
JWT利用項(xiàng)目-jwt_tool
Web347(弱口令密鑰獲取)
針對(duì)是對(duì)稱加密算法(非對(duì)稱沒(méi)有用)非對(duì)稱要使用方法:獲取源碼或者公鑰私鑰文件
某些簽名算法,例如HS256(HMAC+SHA-256),會(huì)像密碼一樣使用一個(gè)任意的、獨(dú)立的字符串作為秘密密鑰。這個(gè)秘鑰如被輕易猜到或暴力破解,則攻擊者能以任意的頭部和載荷值來(lái)創(chuàng)建JWT,然后用密鑰重新給令牌簽名。
JWT利用項(xiàng)目-jwt_tool
知道密匙之后肯定要重新生成JWT呀,如何重新生成?
使用 JWT在線解析:https://jwt.io/來(lái)重新生成
Web348(爆破密鑰上題一樣)
同上
Web349(公鑰私鑰泄露)
下載JS源碼后用Webstorm打開(kāi)
公鑰私鑰泄露,訪問(wèn)/private.key、/public.key
得到公鑰密鑰
源碼中私鑰生成jwt,利用公鑰解密jwt,只要有私鑰就可以重新生成JWT
test.py
import jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))
注意源碼中公匙解密的條件
Web350(密鑰混淆攻擊RS256=>HS256)
下載源碼后使用Webstorm打開(kāi)
將RS256
算法改為HS256
(非對(duì)稱密碼算法=>對(duì)稱密碼算法)HS256
算法使用密鑰為所有消息進(jìn)行簽名和驗(yàn)證。
而RS256算法則使用私鑰對(duì)消息進(jìn)行簽名并使用公鑰進(jìn)行身份驗(yàn)證。
test.js
var jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('./public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)
黑盒JWT測(cè)試
首先找到需要JWT鑒權(quán)后才能訪問(wèn)的頁(yè)面,如個(gè)人資料頁(yè)面,將該請(qǐng)求包重放測(cè)試:
- 未授權(quán)訪問(wèn):刪除Token后仍然可以正常響應(yīng)對(duì)應(yīng)頁(yè)面
- 敏感信息泄露:通過(guò)JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密碼等
- 破解密鑰+越權(quán)訪問(wèn):通過(guò)JWT.io解密出Payload部分內(nèi)容,通過(guò)空加密算法或密鑰爆破等方式實(shí)現(xiàn)重新簽發(fā)Token并修改Payload部分內(nèi)容,重放請(qǐng)求包,觀察響應(yīng)包是否能夠越權(quán)查看其他用戶資料
- 檢查Token時(shí)效性:解密查看payload中是否有exp字段鍵值對(duì)(Token過(guò)期時(shí)間),等待過(guò)期時(shí)間后再次使用該Token發(fā)送請(qǐng)求,若正常響應(yīng)則存在Token不過(guò)期
- 通過(guò)頁(yè)面回顯進(jìn)行探測(cè):如修改Payload中鍵值對(duì)后頁(yè)面報(bào)錯(cuò)信息是否存在注入,payload中kid字段的目錄遍歷問(wèn)題與sql注入問(wèn)題