SSRF là gì? Server-Side Request Forgery là một lỗ hổng cho phép kẻ tấn công khiến webserver thực hiện một yêu cầu HTTP bổ sung hoặc đã được chỉnh sửa đến một tài nguyên do kẻ tấn công lựa chọn.

Các loại SSRF

  • Regular SSRF: Dữ liệu được trả về màn hình của kẻ tấn công.
  • Blind SSRF: SSRF xảy ra nhưng không có thông tin nào được trả về.

Tác động Một cuộc tấn công SSRF thành công có thể dẫn đến:

  • Truy cập vào các khu vực trái phép.
  • Truy cập dữ liệu của khách hàng/tổ chức.
  • Khả năng mở rộng tấn công vào mạng nội bộ.
  • Làm lộ token/thông tin xác thực.

Ví dụ

  1. Kẻ tấn công có toàn quyền kiểm soát URL mà webserver yêu cầu.

  2. Kẻ tấn công có thể sử dụng TryHackMe - Path Traversal để truy cập vào các endpoint khác, ví dụ ../ để loại bỏ phần /stock khỏi request.

  3. Kẻ tấn công kiểm soát subdomain và sử dụng &x= để biến phần còn lại của đường dẫn thành một tham số, ngăn nó được nối vào URL.

  4. Kẻ tấn công có thể buộc webserver yêu cầu đến một server do họ kiểm soát để chiếm các header, có thể chứa thông tin xác thực hoặc API key.

Tìm kiếm SSRF

Các lỗ hổng SSRF tiềm tàng có thể được phát hiện ở nhiều nơi:

  • Tham số URL đầy đủ: Khi một URL hoàn chỉnh được sử dụng làm tham số.
  • Trường ẩn trong form: Các trường ẩn có thể chứa URL.
  • URL một phần: Chỉ có hostname hoặc path được cung cấp.

Đối với Blind SSRF, cần sử dụng các công cụ ghi log HTTP bên ngoài như requestbin.com hoặc Burp Suite Collaborator để theo dõi các request.

Vượt qua các biện pháp phòng thủ

Deny List

Deny list từ chối các request đến các tài nguyên được chỉ định (ví dụ: localhost, 127.0.0.1). Kẻ tấn công có thể bypass bằng cách sử dụng các cách biểu diễn khác của localhost:

  • 0, 0.0.0.0, 127.1
  • 2130706433 (địa chỉ IP dạng decimal)
  • Subdomain có DNS record trỏ về 127.0.0.1 (ví dụ: 127.0.0.1.nip.io).
  • Đối với môi trường cloud, có thể bypass việc chặn 169.254.169.254 (metadata service) bằng cách đăng ký một subdomain trỏ đến IP này.

Allow List

Allow list chỉ cho phép các request đến các tài nguyên được chỉ định (ví dụ: phải bắt đầu bằng https://website.thm). Kẻ tấn công có thể bypass bằng cách tạo một subdomain như https://website.thm.attackers-domain.thm.

Open Redirect

Nếu các phương pháp trên không hoạt động, có thể lợi dụng một endpoint “open redirect” trên server. Endpoint này được thiết kế để chuyển hướng người dùng đến một địa chỉ khác. Kẻ tấn công có thể sử dụng nó để chuyển hướng request HTTP nội bộ đến một domain do họ kiểm soát, bypass các quy tắc lọc nghiêm ngặt.

Thử thách