NỘI DUNG
Tiếp theo nội dung Penetration Testing Step 3 – “Lần đầu” với Clickjacking, kỳ này tôi sẽ giới thiệu các tình huống tiếp theo với Clickjacking attack bao gồm:
- Tấn công khi mục tiêu sử dụng giải pháp frame busting/ frame breaking scripts nhằm ngăn chặn Clickjacking (ví dụ cho tất cả đám frame có mặt “hiện hình” – visible hoặc không cho phép click vào invisible frame);
- Tấn công mục tiêu khi Clickjacking attack được sử dụng làm bàn đạp cho các đòn đánh khác (ví dụ DOM-based XSS);
- Tấn công với nhiều bước khi mục tiêu sử dụng giải pháp confirmation dialog.
Lưu ý:
- Như mọi khi, tôi cũng sẽ tận dụng các bài Lab dựng sẵn của ông PortSwigger để tiết kiệm thời gian dàn cảnh;
- Phần demo minh họa có thể chạy mượt mà không cần Burp Suite. Tuy nhiên, việc sử dụng Burp Suite Proxy để ngâm cứu quá trình tương tác của browser và server cũng mang lại nhiều thông tin hữu ích. Nếu cần, bạn có thể xem thêm trong nội dung Penetration Testing Step 3 – 6 điều bạn nên biết trước khi xài tool khủng Burp Suite;.
#1. Clickjacking attack khi mục tiêu sử dụng frame buster script
Trong kịch bản này, mục tiêu được bảo vệ với frame buster nhằm ngăn chặn kẻ xấu tuồn frame “lậu” vào. Tuy nhiên, với giải pháp này, nạn nhân vẫn có thể bị dắt mũi với thủ thuật sử dụng sanbox như sau.
Đầu tiên, tôi cũng login vào hệ thống với credentials quen thuộc wiener:peter và xác định sự hiện diện của Update email function.
Sau đó, tôi có thể chuẩn bị một cái HTML template như sau để quất vào chỗ Body section trên Exploit Server.
<style>
iframe {
position:relative;
width: $width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top: $top_value;
left: $side_value;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe sandbox="allow-forms"
src="$url?email=hacker@attacker-website.com"></iframe>
Chỗ này, tôi sẽ cần cập nhật lại tương ứng cái Lab ID (https://ac7a1f251f21a09fc07c033a00cb00aa.web-security-academy.net/my-account trong trường hợp của tôi) vô chỗ $url. Đồng thời, tôi sẽ cần hiệu chỉnh:
- 2 thông số $width_value và $height_value để phù hợp với cái iframe;
- 2 thông số $top_value và $side_value để cái Click me button trên decoy website vừa khớp với Update email button;
- Thiết lập giá trị $opacity (với giá trị cỡ 0.0001) để cái iframe chim cút ra khỏi tầm mắt của nạn nhân sau khi tôi đã bố trí mọi thứ gọn đẹp;
- Ngoài các thứ quen thuộc nói trên, ở đây sẽ xuất hiện một đối tượng mới là sandbox=”allow-forms” (hoặc allow-scripts). Đối tượng này có vai trò quyết định vào sự thành bại của trận đấu vì có khả năng vô hiệu hóa cái frame buster script đề cập ở trên.
Sau khi đẩy hàng vô Exploit Server, tôi chọn Store và View exploit rồi hì hục chỉnh sửa các thông số đến khi có sản phẩm “chất lượng” như sau.
Và chỉ cần có vậy, lúc này khi tôi click Deliver exploit to victim thì nạn nhân sẽ ăn hành ngập mồm.
#2. Sử dụng Clickjacking attack làm bàn đạp để kích hoạt DOM-based XSS attack
Tôi chuyển sang một kịch bản phức tạp hơn khi clickjacking sẽ đóng vai trò làm tác nhân kích hoạt lỗ hổng DOM-based XSS trên mục tiêu.
Lưu ý:
- Bạn có thể xem thêm về DOM-based XSS trong nội dung Penetration Testing Step 3 – Các đường chấm mút với DOM based Cross-Site Scripting (Part 1);
- Trong kịch bản này, mục tiêu sẽ có chức năng Submit feedback cho phép tôi sử dụng để giở trò Clickjacking.
Vẫn như cũ, tôi lại chuẩn bị một cái HTML template kiểu như sau để quất vô Body section trên Exploit Server.
<style>
iframe {
position:relative;
width: $width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
div {
position:absolute;
top: $top_value;
left: $side_value;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe
src="$url?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>
Tương tự, tôi sẽ cần cập nhật:
- Giá trị tương ứng của Lab ID (https://ac1d1fe31f40c1fac0142e1000380048.web-security-academy.net/feedback trong trường hợp của tôi) vô chỗ $url.
- 2 thông số $width_value và $height_value để phù hợp với cái iframe;
- 2 thông số $top_value và $side_value để cái Click me button trên decoy website vừa khớp với Submit feedback button;
- Thiết lập giá trị $opacity (với giá trị cỡ 0.0001) để cái iframe chim cút ra khỏi tầm mắt của nạn nhân sau khi tôi đã bố trí mọi thứ gọn đẹp;
- Đối tượng mới xuất hiện trong kịch bản này là onerror=print() với hàm ý rằng khi xuất hiện lỗi (chắc chắn sẽ xuất hiện vì cái src=1 vớ vẩn), cái print() sẽ thực thi.
Tôi cũng sẽ lại chọn Store và View exploit rồi hì hục chỉnh sửa các thông số đến khi có được kết quả như sau trước khi xả đạn với Deliver exploit to victim.
#3. Multistep clickjacking với mục tiêu sử dụng confirmation dialog
Tôi tiếp tục chuyển sang tình huống demo phức tạp hơn với Clickjacking. Trong kịch bản này, mục tiêu sử dụng confirmation dialog để chống đỡ Clickjacking attack.
Cụ thể, sau khi login vào hệ thống với credentials wiener:peter, tôi ghi nhận sự xuất hiện của chức năng Delete account.
Chọn thử chức năng Delete account, tôi sẽ thấy xuất hiện confirmation dialog để xác nhận. Để xử lý tình huống này, tôi sẽ cần bố trí một cái HTML template kiểu như sau để đưa vào Body section trên Exploit server.
<style>
iframe {
position:relative;
width: $width_value;
height: $height_value;
opacity: $opacity;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top: $top_value1;
left: $side_value1;
z-index: 1;
}
.secondClick {
top: $top_value2;
left: $side_value2;
}
</style>
<div class="firstClick">Test me first</div>
<div class="secondClick">Test me next</div>
<iframe src="$url"></iframe>
Như 2 kịch bản trước đó, tôi sẽ cần cập nhật:
- Giá trị tương ứng của Lab ID (https://ac451fe71e18b6d6c0aa746c001900c3.web-security-academy.net/my-account trong trường hợp của tôi) vô chỗ $url.
- 2 thông số $width_value và $height_value để phù hợp với cái iframe;
- 2 thông số $top_value1 và $side_value1 để cái Test me first button trên decoy website vừa khớp với Delete account button;
- 2 thông số $top_value2 và $side_value2 để cái Test me next button trên decoy website vừa khớp với Yes button của confirmation dialog;
- Thiết lập giá trị $opacity (với giá trị cỡ 0.0001) để cái iframe chim cút ra khỏi tầm mắt của nạn nhân sau khi tôi đã bố trí mọi thứ gọn đẹp.
Tiếp đến, tôi cũng sẽ lại chọn Store và View exploit rồi hì hục chỉnh sửa các thông số đến khi có được kết quả như sau cho cả hai cái button.
Và cuối cùng, tôi sẽ xả đạn với Deliver exploit to victim để kết thúc trận đấu cũng như kết thúc luôn nội dung liên quan đến Clickjacking attack.