Lab: JWT authentication bypass via unverified signature
Mô tả lab:
Sử dụng JWT để quản lý phiên đăng nhập. Tuy nhiên, do lỗi triển khai, máy chủ không kiểm tra signature
của JWT. Điều này cho phép ta chỉnh sửa JWT mà không cần biết khóa bí mật của máy chủ, từ đó giành quyền admin và xóa tài khoản carlos
.
🎯 Mục tiêu
- Lợi dụng JWT để giành quyền admin.
- Truy cập /admin.
- Xóa tài khoản carlos.
Các bước thực hiện
Step 1: Đăng nhập account. (wiener:peter
)
Step 2: Tìm cookie session
Chuyển sang tab Proxy → HTTP history.
Tìm request GET /my-account.
Trong phần Request headers, tìm cookie session
chứa JWT.
Step 3: Giải mã
- Paste đoạn session vào extension
JSON Web Tokens
và xem phầnpayload
- Thử sửa
"sub": "wiener"
→"sub": "administrator"
- Send request với
GET/admin
Đánh giá cá nhân
Lab này hay trong việc giúp người học hiểu về lỗ hổng khi máy chủ không xác minh chữ ký JWT, một lỗi bảo mật nghiêm trọng có thể dẫn đến chiếm quyền điều khiển tài khoản.
Lab: JWT authentication bypass via flawed signature verification
Mô tả lab:
Mục tiêu của lab là sửa đổi token phiên của bạn để truy cập vào trang admin tại /admin
và xóa người dùng carlos
.
Các bước thực hiện
- Tiến hành đăng nhập các bước cơ bản tương tự như lab đầu tiên.
- Tuy nhiên với lab này có vẻ như không dễ dàng như lab trước. Sau khi sửa payload và thực hiện gửi lại request thì vẫn chưa vào được trang xóa tài khoản
- Xem phần Header có gì nghịch không nào !!!
{
"kid": "7b113c0f-579f-468e-9512-e1972bca31e5",
"alg": "RS256"
}
alg: "RS256"
là thuật toán mã hóa chữ ký của JWT.
==> Thử đổi alg thành "none".
Vẫn không được !!!!!!
Thử xóa phần signature
Đánh giá cá nhân
Lab này hay có nâng cấp mức độ hơn so với lab đầu tiên. Cụ thể đây là một ví dụ điển hình của lỗ hổng JWT "none"
algorithm vulnerability
.
Lab: JWT authentication bypass via weak signing key
Mô tả lab:
Lab này sử dụng JWT (JSON Web Token
) để quản lý phiên đăng nhập. Tuy nhiên, máy chủ sử dụng một secret key
quá yếu để ký và xác minh token. Điều này khiến kẻ tấn công có thể brute-force
(bẻ khóa) secret key bằng danh sách mật khẩu phổ biến. Sau khi tìm được secret key, ta có thể ký lại JWT để nâng quyền truy cập vào admin panel
và xóa user carlos
.
Các bước thực hiện
- Làm lại các bước như hai bài lab trên thì lab này yêu cầu khả năng khai thác secret key nên hướng đi là bẻ bằng
Hashcat
. - Brute-force secret key bằng Hashcat Lệnh:
hashcat -a 0 -m 16500 <YOUR-JWT> /path/to/jwt.secrets.list
File jwt.secrets.list: https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list
- Dò thành công!!
==> Key: secret1
- Vào jwt.io thêm key vừa tìm được
- Đưa cookie session vừa tìm được vào burp và gửi lại gói tin ==> DONE
Đánh giá cá nhân
Lab này hay có nâng cấp mức độ hơn so với 2 lab đầu tiên. Cụ thể cần bẻ khóa
secret key
để thông qua tìm được cookie session. Ngoài ra lab có áp dụng Hashcat - một công cụ bẻ khóa mật khẩu mã nguồn mở, mạnh mẽ và tối ưu hóa hiệu suất, hỗ trợ nhiều thuật toán băm khác nhau. Nó sử dụng nhiều phương pháp tấn công để tìm ra mật khẩu từ một hash (hàm băm).
Lab: JWT authentication bypass via jwk header injection
Mô tả lab:
Bài lab khai thác lỗ hổng JWT Embedded JWK để truy cập trang admin và xóa user carlos.
Các bước thực hiện
Step 1: Bắt request GET /my-account
bằng Burp Proxy
. Trong Burp Repeater
, đổi đường dẫn từ /my-account
thành /admin
==> Chưa khai thác được gì :v
Step 2: Server hỗ trợ tham số jwk
trong header
nhưng không kiểm tra nguồn gốc của key, cho phép attacker đưa vào key giả để ký JWT mới
.
- Sử dụng trình
JWT editor
tạo khóa RSA giả mạo.
Step 3: Quay lại phần Payload đổi sub sang "administrator"
{
"iss": "portswigger",
"exp": 1740227374,
"sub": "administrator"
}
- Sau đó
attack
bằngRSA key
vừa tạo.
Step 4: Gửi request để check.
==> Đã vào được trang admin
Đánh giá cá nhân
Bài lab này có tính thực tế cao, lỗ hổng
Embedded JWK Attack
xuất hiện trong các hệ thống xác thựcJWT
yếu kém. Ứng dụng thực tế: Cách tấn công này có thể xuất hiện trên các hệ thống có xác thựcJWT
không kiểm soát nguồn gốc khóa.
Top comments (0)