Phần này mô tả cách kiểm tra chuyển hướng URL phía máy khách, còn được gọi là chuyển hướng mở. Đó là một lỗ hổng xác thực đầu vào tồn tại khi một ứng dụng chấp nhận đầu vào do người dùng kiểm soát chỉ định một liên kết dẫn đến một URL bên ngoài có thể độc hại. Loại lỗ hổng này có thể được sử dụng để thực hiện một cuộc tấn công lừa đảo hoặc chuyển hướng nạn nhân đến một trang lây nhiễm.
Lỗ hổng này xảy ra khi một ứng dụng chấp nhận đầu vào không đáng tin cậy có chứa giá trị URL và không làm sạch nó. Giá trị URL này có thể khiến ứng dụng web chuyển hướng người dùng đến một trang khác, chẳng hạn như một trang độc hại do kẻ tấn công kiểm soát.
Lỗ hổng này có thể cho phép kẻ tấn công thực hiện thành công một trò lừa đảo trực tuyến và đánh cắp thông tin đăng nhập của người dùng. Vì sự chuyển hướng được bắt nguồn bởi ứng dụng thực, các nỗ lực lừa đảo có thể có vẻ ngoài đáng tin cậy hơn.
Đây là một ví dụ về URL tấn công lừa đảo.
http://www.target.site?#redirect=www.fake-target.site
Nạn nhân truy cập URL này sẽ được tự động chuyển hướng đến fake-target.site, nơi kẻ tấn công có thể đặt một trang giả mạo giống với trang web dự định để lấy cắp thông tin đăng nhập của nạn nhân.
Chuyển hướng mở cũng có thể được sử dụng để tạo ra một URL có thể vượt qua các kiểm tra kiểm soát truy cập của ứng dụng và chuyển tiếp kẻ tấn công đến các chức năng đặc quyền mà chúng thường không thể truy cập.
Mục tiêu kiểm tra Client-side URL Redirect
Xác định các điểm chèn xử lý URL hoặc đường dẫn.
Đánh giá các vị trí mà hệ thống có thể chuyển hướng đến.
Làm thế nào để kiểm tra Client-side URL Redirect
Khi người kiểm tra kiểm tra loại lỗ hổng này theo cách thủ công, trước tiên họ xác định xem có chuyển hướng phía máy khách được triển khai trong mã phía máy khách hay không. Những chuyển hướng này có thể được thực hiện, để đưa ra một ví dụ JavaScript, bằng cách sử dụng đối tượng window.location. Điều này có thể được sử dụng để hướng trình duyệt đến một trang khác bằng cách chỉ định một chuỗi cho nó. Điều này được chứng minh trong đoạn mã sau:
var redir = location.hash.substring(1); if (redir) { window.location='http://'+decodeURIComponent(redir); }
Trong ví dụ này, tập lệnh không thực hiện bất kỳ xác thực nào của biến redir chứa đầu vào do người dùng cung cấp thông qua chuỗi truy vấn. Vì không có hình thức mã hóa nào được áp dụng, đầu vào chưa được xác thực này được chuyển đến đối tượng windows.location, tạo ra lỗ hổng chuyển hướng URL.
Điều này ngụ ý rằng kẻ tấn công có thể chuyển hướng nạn nhân đến một trang web độc hại chỉ bằng cách gửi chuỗi truy vấn sau:
http://www.victim.site/?#www.malicious.site
Với một chút sửa đổi, đoạn mã ví dụ trên có thể dễ bị chèn JavaScript.
var redir = location.hash.substring(1); if (redir) { window.location=decodeURIComponent(redir); }
Điều này có thể được khai thác bằng cách gửi chuỗi truy vấn sau:
http://www.victim.site/?#javascript:alert(document.cookie)
Khi kiểm tra lỗ hổng bảo mật này, hãy xem xét rằng một số ký tự được các trình duyệt khác nhau xử lý khác nhau. Để tham khảo, hãy xem XSS dựa trên DOM.