DEV Community

Quoc Tinh
Quoc Tinh

Posted on

LAB JWT

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)

Image description
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.

Image description

Step 3: Giải mã

  • Paste đoạn session vào extension JSON Web Tokens và xem phần payload

Image description

  • Thử sửa "sub": "wiener""sub": "administrator"

Image description

  • Send request với GET/admin

Image description
Step 4: Xem response trên web

Image description

Đá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

Image description

Image description

  • Xem phần Header có gì nghịch không nào !!!
{
    "kid": "7b113c0f-579f-468e-9512-e1972bca31e5",
    "alg": "RS256"
}
Enter fullscreen mode Exit fullscreen mode

alg: "RS256"là thuật toán mã hóa chữ ký của JWT.
==> Thử đổi alg thành "none".

Image description

Vẫn không được !!!!!!
Thử xóa phần signature

Image description
Gửi request lần nữa.

Image description

Image description

Đá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
Enter fullscreen mode Exit fullscreen mode

File jwt.secrets.list: https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list

  • Dò thành công!!

Image description

==> Key: secret1

  • Vào jwt.io thêm key vừa tìm được

Image description

  • Đưa cookie session vừa tìm được vào burp và gửi lại gói tin ==> DONE

Image description

Đá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

Image description

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.

Image description

Step 3: Quay lại phần Payload đổi sub sang "administrator"

{
    "iss": "portswigger",
    "exp": 1740227374,
    "sub": "administrator"
}
Enter fullscreen mode Exit fullscreen mode
  • Sau đó attack bằng RSA key vừa tạo.

Image description

Step 4: Gửi request để check.

Image description

==> Đã vào được trang admin

Image description

Đá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ực JWT 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ực JWT không kiểm soát nguồn gốc khóa.

Top comments (0)