Lab: Forced OAuth profile linking
Last updated
Last updated
Phòng thí nghiệm này cung cấp cho bạn tùy chọn đính kèm hồ sơ mạng xã hội vào tài khoản của bạn để bạn có thể đăng nhập qua thay vì sử dụng tên người dùng và mật khẩu thông thường. Do luồng OAuth được client application triển khai không an toàn, kẻ tấn công có thể thao túng chức năng này để truy cập vào tài khoản của người dùng khác.
Người dùng quản trị sẽ mở bất cứ thứ gì bạn gửi từ exloit server và họ luôn có phiên hoạt động trên trang web blog.
Bạn có thể đăng nhập vào tài khoản của mình bằng thông tin đăng nhập sau:
Blog website account: wiener:peter
Social media profile: peter.wiener:hotdog
Mục tiêu: Tấn công CSRF để đính kèm Social media profile của bạn vào tài khoản người dùng quản trị trên trang web blog, sau đó truy cập bảng điều khiển quản trị và xóa carlos
.
Đăng nhập bằng tài khoản trang web. Để ý thấy trong /my-account có tùy chọn Attach a social profile
Khi nhấp vào chức năng này, người dùng được chuyển hướng đến trang web mạng xã hội, nơi phải đăng nhập bằng thông tin xác thực mạng xã hội của mình để hoàn tất luông OAuth. Sau đó, sẽ được chuyển hướng trở lại trang web blog.
Đăng xuất và đăng nhập với tùy chọn Login with social media. Ta được đăng nhập ngay lập tức thông qua tài khoản phương tiện truyền thông xã hội mới được liên kết.
Quan sát lại HTTP trong Burp. Trong GET /auth?client_id[...]
request, ta thấy redirect_uri
với chực năng gửi authorization code /oauth-linking
Quan trọng là request này không bao gồm tham số state
để chống lại cuộc tấn công CSRF
Dùng tính năng Attach a social profile
một lần nữa và chặn bắt request GET /oauth-linking?code=[...]
trong Burp Proxy. Nhấp chuột phải vào yêu cầu này và chọn "Copy URL". Đông thời drop request này để đảm bảo code không được sử dụng và còn hợp lệ để tấn công CSRF
Trên exploit server, tạo một iframe
trong đó thuộc tính src
trỏ đến URL vừa sao chép
Gửi exploit cho nạn nhân
Khi trình duyệt của họ tải iframe
, nó sẽ hoàn tất luồng OAuth bằng cách sử dụng Social media profile, đính kèm nó vào tài khoản quản trị trên trang web blog.
Đăng nhập lại bằng "Log in with social media" . Quan sát trong /my-account và thấy rằng ta đã đăng nhập với tư cách administrator
Đi đến Admin panel và xóa tài khoản carlos