Authentication – Xác thực
Tấn công qua cookie
Authentication 01
Tại Authentication 01, chúng ta sẽ thực hiện cách hack một trang web theo cách mình nghĩ là đơn giản nhất.
Điều kiện là website đó sử dụng cookie xử lý việc xác thực. Khi bạn đăng nhập bằng một user vừa tạo thì chúng ta sẽ nhận được một cookies (chứa thông tin của người dùng) từ server và lưu ở đâu đó trên thiết bị của chúng ta. Server sẽ sử dụng lại cookie đó cho các mục đích khác nhau, ở đây chính là dùng cookie đó như một chìa khoá để xác thực user đó là ai. Chúng ta hãy xem cookies đó bằng Chrome, nhấn F12 và chọn Application như ảnh sau:
Chúng ta chỉ việc sửa đổi tham số value từ user1 thành admin. Khi đó cookie này đang từ thông tin là user1 đã chuyển thành admin, khi server đọc file cookie thì đã bị đánh lừa là user admin đang làm việc.
Authentication 02
Value tại ví dụ này phức tạp hơn chút xíu, đó là sử dụng hash username sử dụng MD5, giá trị này sẽ đại diện cho user. Do đó chúng ta muốn hack thành user admin thì chỉ cần thay đổi giá trị value thành mã hash của admin.
Authentication 03
Ở ví dụ này, lợi dụng sự so sánh không đúng giữa webapp và database để khai thác lỗ hổng. Cụ thể:
- Khi bạn tạo user, ứng dụng kiểm tra xem tên người dùng và mật khẩu có chính xác không? Nếu có nó sẽ lưu user của bạn trong phiên. Mỗi lần truy cập ứng dụng, ứng dụng đó sẽ truy xuất thông tin chi tiết của user đó dựa trên cookie được lưu trước đó.
- Vấn đề có thể khai thác ở đây là việc so sánh khi đăng ký người dùng mới, ứng dụng thực hiện theo chương trình/thuật toán nào đó (như Ruby) có phân biệt chữ hoa thường, ví dụ admin khác với aDmin. Nhưng khi truy xuất thông tin người dùng, việc so sánh lại được thực hiện ở csdl. Mặc định mysql (kiểu varchar) sẽ so sánh không phân biệt chữ hoa thường, từ đó aDmin sẽ có quyền của admin.
Authentication 04
Để khắc phục sự cố trước đó, nhà phát triển đã quyết định sử dụng so sánh phân biệt chữ hoa chữ thường trong quá trình tạo user của người dùng. Việc kiểm tra này cũng có thể được bỏ qua dựa trên cách MySQL thực hiện so sánh chuỗi: MySQL bỏ qua các dấu cách ở cuối (tức là: pentesterlab và pentesterlab [dấu cách] là bằng nhau). Sử dụng phương pháp tương tự như trên, bạn sẽ có thể giả vờ đăng nhập với tư cách quản trị viên người dùng bằng cách thêm dấu cách sau user khi tạo tài khoản mới
Authentication 05
Ví dụ này mình không thực sự hiểu lắm về ý nghĩa hoặc case trong thực tế. Đại loại là trong code của dev có chứa key và bạn đó quên không stop thực thi khi chuyển hướng người dùng đến trang đăng nhập.