- vừa được xem lúc

Authentication vulnerability - Lỗ hổng xác thực (phần 5)

0 0 13

Người đăng: Viblo Security

Theo Viblo Asia

VI. Phân tích một số lab nâng cao

1. Xác thực với kiểu định dạng JSON, cần chú ý điều gì?

Một số hệ thống xác thực tài khoản người dùng qua định dạng JSON. Kiểu JSON định dạng theo từng cặp key:value, khi đó username đóng vai trò là key, password đóng vai trò là value. Do kiểu định dạng JSON chấp nhận giá trị value thuộc bất kì dạng gì như object, array, string, ... Nên khi thực hiện quá trình xác thực, nếu hệ thống không chuyển đổi password sang dạng string thì kẻ tấn công có thể lợi dụng sự lỏng lẻo trong kiểu dữ liệu này để vượt qua cơ chế xác thực.

Phân tích lab Broken brute-force protection, multiple credentials per request

Chúng ta được cung cấp một danh sách password, trong đó chứa mật khẩu đúng của carlos. Cần khai thác tính năng đăng nhập để truy cập vào tài khoản của carlos.

Đăng nhập với tên đăng nhập và mật khẩu bất kì, quan sát request qua Burp Suite:

Tên đăng nhập và mật khẩu được gửi tới hệ thống theo định dạng JSON. Do giá trị value của JSON chấp nhận các kiểu dữ liệu khác nhau, thử thay đổi kiểu dữ liệu khác của password:

Không thấy response báo lỗi, có thể hệ thống đã chấp nhận kiểu dữ liệu mảng của password mà không chuyển đổi về dạng string. Như vậy, có thể thực hiện gửi tất cả password theo định dạng mảng tới hệ thống.

Mong rằng các bạn có thể tự code từ danh sách password được cung cấp để thu được danh sách password theo đúng định dạng của JSON để luyện trình code chút. Nếu không thì sử dụng luôn đoạn code sau cũng được (Python):

def transFileStringToStringJSON(path): s = "" with open(path, 'r') as f1: list1 = f1.readlines() for i in range(0, len(list1)): list1[i] = list1[i].rstrip('\n') for a in list1: s = "\"" + a + "\"," + s print(s) transFileStringToStringJSON("./password.txt")

Gửi request với password là mảng các password được cung cấp:

Chúng ta thu được response có status code 302. Click chuột phải chọn Show response in browser, copy và paste trong URL, chúng ta đã đăng nhập thành công:

2. Ngăn chặn brute force xác thực two-factor (2FA), liệu có an toàn?

Tương tự với ngăn chặn tấn công brute force mật khẩu, cơ chế xác thực 2FA cũng cần lựa chọn hình thức ngăn chặn tấn công brute force mã 2FA (ngăn chặn tấn công brute force trong lab 2FA broken logic). Tuy nhiên, không phải hình thức nào cũng mang tới hiệu quả tuyệt đối.

Xét hệ thống ngăn chặn tấn công brute force mã 2FA có cách hoạt động như sau: Khi phát hiện người dùng nhập sai mã 2FA vượt quá số lần quy định, hệ thống thực hiện tự động đăng xuất người dùng khỏi phiên đăng nhập (session) đó. Lúc này session mất hiệu liệu thì kẻ tấn công không thể thực hiện tiếp tục việc mò mã 2FA. Tuy nhiên, cơ chế này có thể bị vượt qua bởi kẻ tấn công bằng cách thiết lập một đoạn mã tự động hóa việc đăng nhập lại tài khoản mỗi khi phiên đăng nhập hết hạn. Tính năng Macro của Burp Suite hỗ trợ công việc đó.

Phân tích lab 2FA bypass using a brute-force attack

Chúng ta đã biết username và password của victim, mục đích cần vượt qua cơ chế xác thực 2FA để truy cập vào tài khoản victim.

Sau khi đăng nhập, hệ thống yêu cầu mã 2FA, thử nhập sai mã code xem hệ thống có thực hiện ngăn chặn hành vi Brute force hay không. Nhận thấy rằng khi nhập sai mã code 2 lần sẽ tự động trở về trang login (Kết thúc session).

Trước hết, quan sát thứ tự hoạt động của các request chính:

Đầu tiên, chúng ta đi tới trang đăng nhập (tương ứng với request 160, đường dẫn /login, phương thức GET), sau đó, đăng nhập với tài khoản carlos:montoya (tương ứng với request 162, đường dẫn /login2, phương thức POST), cuối cùng, thực hiện nhập mã code 2FA (tương ứng với request 165 hoặc 167, do chúng ta vừa thử 2 lần, đường dẫn /login2, phương thức POST).

Như vậy, điều này dẫn đến suy nghĩ rằng chúng ta có thể tạo ra một hệ thao tác đăng nhập tự động. Config trong Session handling rule editor:

  • Bước 1: Thêm một hành vi Session handling rule editor mới:

  • Thêm một Rule Action mới bằng cách chọn Add ở mục Rule Actions, sau đó chọn Run a macro:

  • Chọn các request chúng ta cần macro, sau đó Burp Suite cũng sẽ thực hiện các request lần lượt theo đúng thứ tự chọn hiện tại:

  • Trong đó request cuối cùng có chứa thông báo Please enter your 4-digit security code:

Sau khi config thành công, chúng ta có thể thực hiện brute force 2FA code qua Intruder, mỗi lần thực hiện tấn công, tính năng macro của Burp Suite sẽ giúp chúng ta tự động đăng nhập lại 1 lần.

Request 658 trả về status 302, đây là mã 2FA hợp lệ. Click chuột phải chọn Show response in browser, copy và paste lên URL để truy cập vào tài khoản của carlos:

Các tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Có thực sự an toàn với Authentication và Authorization , mật khẩu có nên lưu ở dạng text ?

Có thực sự an toàn với Authentication và Authorization , mật khẩu có nên lưu ở dạng text . Hơn nữa, vì chúng ta đang lưu trữ thông tin đăng nhập và hỗ trợ quy trình đăng nhập, chúng ta biết rằng sẽ có thông tin xác thực được gửi qua hạ tầng mạng.

0 0 46

- vừa được xem lúc

Login LINE với Firebase Authentication

Ngày nay, khi sử dụng một dịch vụ online online, chúng ta có xu hướng sử dụng một tài khoản liên kết (Google, Facebook, Twitter... tạm gọi là bên thứ 3) để đăng nhập vào dịch vụ đó thay vì cứ mỗi một dịch vụ, ta lại tạo một account/passord riêng. Lúc này Firebase Authentication (từ đây sẽ gọi tắt là

0 0 35

- vừa được xem lúc

Bài 17: Phân quyền trong Laravel

Chào mừng các bạn quay trở lại với series học Laravel với VueJS của mình, ở bài này mình sẽ hướng dẫn các bạn các phân quyền bằng Laravel và VueJS mà không cần cài đặt thêm bất kì package hay library

0 0 86

- vừa được xem lúc

Phân biệt sự khác nhau giữa Authentication và Authorization

Có lẽ trong quá trình lập trình bạn đã được nghe rất nhiều về 2 khái niệm authentication và authorization nhưng liệu bạn đã phân biệt được sự khác nhau giữa 2 khái niệm này? hay đôi khi bạn vẫn mập mờ

0 0 34

- vừa được xem lúc

[Node JS + React JS] - Phần 2 - Authentication server

Hôm nay chúng ta sẽ tiếp tục serie Node JS + React JS với chủ đề là authentication + authorization. Hôm nay chúng ta cùng đi tìm hiểu hai khái niệm cơ bản là Authentication và Authorization, cũng như

0 0 385

- vừa được xem lúc

API với Postman (Phần 3)

Sau 2 bài viết, chúng ta đã hiểu thế nào là client và server, cách chúng sử dụng HTTP để nói chuyện với nhau và việc xác định định dạng dữ liệu để hiểu nhau. Có lẽ trong đầu chúng ta sẽ có câu hỏi: Là

0 0 71