Web12: Kỹ thuật hack Session Fixation

1. Giới thiệu

Session Fixation là một kỹ thuật cho phép hacker có thể chiếm đoạt session của người dùng. Kỹ thuật này lợi dụng việc server không thay đổi giá trị của session ID mỗi khi người dùng đăng nhập, thay vào đó nó sử dụng session ID sẵn có trước đó. Quá trình tấn công bao gồm việc lấy một session ID hợp lệ (có thể bằng cách truy cập vào website), sau đó tìm cách để nạn nhân đăng nhập vào website với session ID này, cuối cùng, khi nạn nhân đăng nhập thành công, hacker sẽ duyệt website với tài khoản của anh ta. Kịch bản cụ thể như sau:

Mallory tìm một website, chẳng hạn http://unsafe.example.com, chấp nhận bất cứ session ID nào từ request mà không cần xác thực.

Mallory sẽ gửi đến Alice một e-mail, trong đó có chứa đường link http://unsafe.example.com/?SID=1234.

Alice đi đến http://unsafe.example.com/?SID=1234. Sau đó đăng nhập vào website.

Mallory chỉ cần đi đến http://unsafe.example.com/?SID=1234, và sử dụng website với tài khoản của Alice.

Mallory có thể dùng các cách sau để set cookie cho Alice:

Gửi kèm theo một đoạn script để set cookie

Gửi gói tin HTTP Response kèm theo giá trị cookie của MalloryGửi gói tin HTTP Response kèm theo giá trị cookie của Mallory

Sử dụng thẻ meta của HTML:

Session Fixation

2. Các ví dụ

Ví dụ 1 – Client-side scripting

Tương tự như kịch bản đã nêu ở phần trên, tuy nhiên, trong trường hợp này, Session ID không được truyền vào URL mà nằm trong cookie. Để sửa giá trị của Session ID trong cookie của nạn nhân, hacker sẽ chèn một đoạn Javascript:

http://website.kom/document.cookie=”sessionid=abcd”;

Ví dụ 2 - tag

Tương tự như client-side scripting, nhưng lần này hacker sẽ chèn thêm thẻ:

http://website.kon/

Ví dụ 3 – HTTP header response

Việc chèn Session ID cũng có thể được thực hiện bằng cách chặn các gói tin trao đổi giữa client và Web application, sau đó chèn thêm trường Set-Cookie vào header.

Chèn thêm trường Set-Cookie vào header

3. Cách phòng chống

Nguyên nhân của lỗi này là do server không tái tạo session ID sau mỗi lần đăng nhập thành công. Vì thế, khắc phục lỗi này cũng không khó, ta chỉ cần thay đổi giá trị của Session ID là xong. Trong PHP, ta dùng hàm session_regenerate_id() để cấp lại session.

Thứ Tư, 13/07/2022 20:00
53 👨 1.095
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng