Writeup WebGoat
Đây là Writeup cho WebGoat - một trong những challenge mình chọn cho mùa hè 2025
A1 - Broken Access Control
Hijack Session
Challenge xoay quanh nhân tố là hijack_cookie. Mục tiêu của chúng ta là phân tích format của hijack_cookie và tìm cách login vào account của một user khác.
Thử gửi một POST request đăng nhập như trong ảnh, ta thu được cookie 8978894399465949343-1750751209589
Nguyên nhân
Với source code tạo cookie như sau:
1 | public class HijackSessionAuthenticationProvider implements AuthenticationProvider<Authentication> { |
Ta nhận thấy cookie được hình thành theo công thức:
- Tạo base id
- Với mỗi một user, tăng 1 đơn vị so với id trước đó
- Ghép với thời gian lấy từ Instance.now() theo format
id - time
Vậy ta thử gửi request liên tục, nếu để ý phần id của cookie tăng lên hơn 1 đơn vị thì đơn vị nằm giữa đó sẽ là id của người khác -> Mục tiêu cần tấn công
POC
Áp dụng ý tưởng đó, chúng ta lấy được 2 cookie với id lệch nhau hơn 1 đơn vị là:
1 | 8978894399465949341-1750751202550 |
Để ý phần đuôi của id tăng từ 41 lên 43, vậy ID 42 sẽ là ID cần tấn công! Lúc này, chúng ta chỉ cần brute-force khung thời gian từ 2550-9589 (khoảng thời gian chênh lệch) là được.
Ta thành công khai thác toàn bộ cookie của ID 42
Cách khắc phục
- Gia tăng độ phức tạp & ngẫu nhiên trong quá trình tạo session.