知識點:
1、Java安全-Druid監(jiān)控-未授權訪問&信息泄漏
2、Java安全-Swagger接口-文檔導入&聯(lián)動批量測試
2、Java安全-JWT令牌攻防-空算法&未簽名&密匙提取
一、演示案例-Java安全-Druid監(jiān)控-未授權訪問
參考:https://developer.aliyun.com/article/1260382
Druid是阿里巴巴數(shù)據(jù)庫事業(yè)部出品,為監(jiān)控而生的數(shù)據(jù)庫連接池。Druid提供的監(jiān)控功能,監(jiān)控SQL的執(zhí)行時間、監(jiān)控Web URI的請求、Session監(jiān)控。當開發(fā)者配置不當時就可能造成未授權訪問漏洞。
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
在項目源碼配置文件中搜索druid
關鍵字
攻擊點
1、直接拼接URL路徑,嘗試能否直接未授權訪問系統(tǒng)功能點。
2、結合泄露URL路徑和Session信息,利用BurpSuite進行嘗試登錄。
3、利用Cookie編輯器替換Session,再次訪問后臺路徑嘗試進入后臺。
二、演示案例-Java安全-Swagger接口-導入&聯(lián)動批量測試
Swagger就是將項目中所有(想要暴露的)接口展現(xiàn)在WEB頁面上,并可以進行接口調用和調式的服務(一般都是用spring boot
框架搭建該服務)
所以可以對這個接口進行漏洞測試,看是否存在未授權訪問、sql注入、文件上傳等漏洞。由于接口太多,一個個接口測試的話太費時間,所以一般會采用自動化接口漏洞安全測試。
黑盒發(fā)現(xiàn)
白盒發(fā)現(xiàn)
1、自動化發(fā)包測試
Postman:https://github.com/hlmd/Postman-cn
如果postman
上有出現(xiàn)200
的響應,那么就有可能是一個未授權接口
2、自動化漏洞測試
聯(lián)動BurpSuite Xray
等
也可以在BP上看有沒有200響應的數(shù)據(jù)包,也有可能會是一個未授權接口
bp
聯(lián)動xray
三、演示案例-Java安全-JWT令牌-空算法&未簽名&密匙提取
JSON Web Token(JWT)
。它遵循JSON格式,將用戶信息加密到token
里,服務器不保存任何用戶信息,只保存密鑰信息,通過使用特定加密算法驗證token
,通過token
驗證用戶身份。基于token
的身份驗證可以替代傳統(tǒng)的cookie+session
身份驗證方法。這使得JWT
成為高度分布式網(wǎng)站的熱門選擇,在這些網(wǎng)站中,用戶需要與多個后端服務器無縫交互。
JWT識別
1、標頭(Header)
Header
是JWT
的第一個部分,是一個JSON對象,主要聲明了JWT的簽名算法,如"HS256”、"RS256"
等,以及其他可選參數(shù),如"kid"、"jku"、"x5u"
等alg
字段通常用于表示加密采用的算法。如"HS256"、"RS256"
等(HS對稱加密、RS非對稱加密
)typ
字段通常用于表示類型
還有一些其他可選參數(shù),如"kid"、"jku"、"x5u"
等
2、有效載荷(Payload)
Payload
是JWT
的第二個部分,這是一個JSON對象,主要承載了各種聲明并傳遞明文數(shù)據(jù),用于存儲用戶的信息
,如id、用戶名、角色、令牌生成時間和其他自定義聲明。iss:
該字段表示jwt的簽發(fā)者。sub:
該jwt面向的用戶。aud:
jwt的接收方。exp:
jwt的過期時間,通常來說是一個時間戳。iat:
jwt的簽發(fā)時間,常來說是一個時間戳。jti:
此jwt的唯一標識。通常用于解決請求中的重放攻擊。該字段在大多數(shù)地方?jīng)]有被提及或使用。因為使用此字段就意味著必須要在服務器維護一張jti表, 當客戶端攜帶jwt訪問的時候需要在jti表中查找這個唯一標識是否被使用過。使用這種方式防止重放攻擊似乎讓jwt有點怪怪的感覺, 畢竟jwt所宣稱的優(yōu)點就是無狀態(tài)訪問
3、簽名(Signature)
Signature
是對Header
和Payload
進行簽名,具體是用什么加密方式寫在Header的alg 中。同時擁有該部分的JWT被稱為JWS,也就是簽了名的JWT。
第一部分:對 JSON 的頭部做 base64 編碼處理得到
第二部分:對 JSON 類型的 payload 做 base64 編碼處理得到
第三部分:分別對頭部和載荷做base64編碼,并使用.拼接起來
使用頭部聲明的加密方式,對base64編碼前兩部分合并的結果加鹽加密處理,作為JWT
4、人工識別
5、BURP插件識別
Hae(需要自己下載項目)
JSON Web Tokens(BP商店有,支持識別解析)
如何解析JWT數(shù)據(jù)?
1.JWT在線解析
https://jwt.io/
2.BP官方插件-JSON Web Tokens
JWT安全
1、空加密算法(攻擊頭部不使用加密)
簽名算法可被修改為none,JWT支持將算法設定為"None"。如果"alg"字段設為"None",那么簽名會被置空,這樣任何token都是有效的。
2、未校驗簽名(攻擊簽名不使用簽名認證)
某些服務端并未校驗JWT簽名,可以嘗試修改payload后然后直接請求token或者直接刪除signature再次請求查看其是否還有效。
3、暴力破解密鑰(攻擊簽名知道密鑰實現(xiàn)重組)
針對是對稱加密算法(非對稱沒有用)
非對稱要使用方法:從源碼獲取公鑰私鑰文件
某些簽名算法,例如HS256(HMAC+SHA-256),會像密碼一樣使用一個任意的、獨立的字符串作為秘密密鑰。這個秘鑰如被輕易猜到或暴力破解,則攻擊者能以任意的頭部和載荷值來創(chuàng)建JWT,然后用密鑰重新給令牌簽名。
4、其他安全參考:(源碼泄漏密匙,Kid注入等)
https://blog.csdn.net/weixin_44288604/article/details/128562796
JWTCTF
JWT利用項目
https://github.com/ticarpi/jwt_tool
項目命令幫助
# 使用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
# 指定密碼測試
python3 jwt_tool.py JWT_HERE -C -p password_here
Web345(None空加密算法)
Web346(None算法繞過簽名)
解題思路:alg強制設置為none繞過簽名
兩種方法:
BP插件-JSON Web Tokens
JWT利用項目-jwt_tool
Web347(弱口令密鑰獲取)
JWT利用項目-jwt_tool
知道密匙之后肯定要重新生成JWT呀,如何重新生成?
使用 JWT在線解析:https://jwt.io/來重新生成
Web348(爆破密鑰上題一樣)
Web349(公鑰私鑰泄露)
這里可以使用專門的js ide
打開相關源碼文件,看的比較清楚
公鑰私鑰泄露,訪問/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)
這里可以使用專門的js ide
打開相關源碼文件,看的比較清楚
將RS256
算法改為HS256
(非對稱密碼算法=>對稱密碼算法)HS256
算法使用密鑰為所有消息進行簽名和驗證。
而RS256算法則使用私鑰對消息進行簽名并使用公鑰進行身份驗證。
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測試
首先找到需要JWT鑒權后才能訪問的頁面,如個人資料頁面,將該請求包重放文章來源:http://www.zghlxwxcb.cn/news/detail-761862.html
測試:文章來源地址http://www.zghlxwxcb.cn/news/detail-761862.html
1、未授權訪問:刪除Token后仍然可以正常響應對應頁面
2、敏感信息泄露:通過在線平臺JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密碼等
3、破解密鑰+越權訪問:通過JWT.io解密出Payload部分內容,通過空加密算法或密鑰爆破等方式實現(xiàn)重新簽發(fā)Token并修改Payload部分內容,重放請求包,觀察響應包是否能夠越權查看其他用戶資料
4、檢查Token時效性:解密查看payload中是否有exp字段鍵值對(Token過期時間),等待過期時間后再次使用該Token發(fā)送請求,若正常響應則存在Token不過期
5、通過頁面回顯進行探測:如修改Payload中鍵值對后頁面報錯信息是否存在注入,payload中kid字段的目錄遍歷問題與sql注入問題
到了這里,關于WEB攻防-Java安全&JWT攻防&Swagger自動化&算法&簽名&密匙&Druid未授權的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!