Bài Tập NoWASP Multilidea - XSS Attack Đánh Cắp Cookie

XSS Attack (Cross-Site Scripting) và Steal Cookie


1. Cross-Site Scripting (XSS) là gì?

Cross-Site Scripting (XSS) là một lỗ hổng bảo mật phổ biến trên các ứng dụng web, xảy ra khi kẻ tấn công chèn mã độc (thường là JavaScript) vào trang web để thực thi mã này trong trình duyệt của người dùng.

Mục tiêu của XSS:

  • Đánh cắp thông tin nhạy cảm như cookie, token xác thực, hoặc dữ liệu cá nhân.
  • Thực hiện các hành động không mong muốn thay mặt người dùng, như chuyển tiền, thay đổi thông tin tài khoản.
  • Lợi dụng trình duyệt người dùng để phát tán mã độc hoặc tấn công các mục tiêu khác.

2. Phân loại XSS

XSS được chia thành 3 loại chính:

a. Stored XSS (Persistent XSS):

  • Mã độc được lưu trữ trực tiếp trong cơ sở dữ liệu của ứng dụng.
  • Kẻ tấn công chèn mã độc vào các trường như bình luận, bài viết, hoặc form.
  • Khi người dùng khác truy cập nội dung chứa mã độc, trình duyệt của họ sẽ thực thi mã này.

b. Reflected XSS:

  • Xảy ra khi dữ liệu không được xác thực từ người dùng được phản hồi trực tiếp về trình duyệt.
  • Ví dụ: Kẻ tấn công gửi một liên kết chứa mã độc, và khi nạn nhân nhấp vào, mã này được thực thi.

c. DOM-Based XSS:

  • Xảy ra khi mã độc được thực thi hoàn toàn ở phía client (trình duyệt) mà không cần sự can thiệp từ server.
  • Lỗ hổng thường nằm trong việc xử lý DOM (Document Object Model) của ứng dụng.

3. Steal Cookie (Đánh cắp Cookie) qua XSS

Cookie là một tệp dữ liệu nhỏ được lưu trữ trong trình duyệt của người dùng, thường chứa thông tin như phiên làm việc (session) hoặc token xác thực. Kẻ tấn công có thể lợi dụng XSS để đánh cắp cookie và chiếm quyền truy cập tài khoản.

Quy trình tấn công:

  1. Chèn mã độc vào ứng dụng web: Kẻ tấn công chèn mã JavaScript độc hại vào các trường đầu vào không được kiểm soát.

    
    
    • Mã trên gửi cookie của nạn nhân đến máy chủ của kẻ tấn công.
  2. Nạn nhân truy cập trang chứa mã độc: Khi người dùng truy cập trang, trình duyệt thực thi mã JavaScript và gửi cookie về máy chủ của kẻ tấn công.

  3. Kẻ tấn công sử dụng cookie để chiếm tài khoản: Cookie bị đánh cắp có thể được sử dụng để chiếm quyền truy cập vào phiên làm việc của người dùng.


4. Ví dụ minh họa: Steal Cookie qua Reflected XSS

Kịch bản:

  • Một ứng dụng web có URL tìm kiếm:
    https://example.com/search?q=abc
    
  • Ứng dụng phản hồi lại như sau:
    Kết quả tìm kiếm: abc
    
  • Nếu không lọc dữ liệu đầu vào, kẻ tấn công có thể thay abc bằng mã độc:
    https://example.com/search?q=
    

Kết quả:

  • Khi nạn nhân truy cập URL này, mã JavaScript được thực thi.
  • Cookie của nạn nhân bị gửi đến http://malicious.com/steal.

5. Biện pháp phòng chống XSS và Steal Cookie

Để ngăn chặn XSS và bảo vệ cookie của người dùng:

a. Kiểm tra và lọc dữ liệu đầu vào:

  • Luôn xác thực dữ liệu từ người dùng trước khi xử lý.
  • Sử dụng các thư viện như DOMPurify để làm sạch HTML đầu vào.

b. Mã hóa (Encode) dữ liệu đầu ra:

  • Mã hóa các ký tự đặc biệt trước khi hiển thị ra trang web.
  • Ví dụ: .

c. Sử dụng các Header bảo mật:

  • Content-Security-Policy (CSP): Hạn chế các nguồn thực thi mã JavaScript.
  • HttpOnly Cookie: Đặt cờ HttpOnly cho cookie để ngăn JavaScript truy cập cookie.

d. Sử dụng Token chống giả mạo (CSRF Token):

  • Tích hợp CSRF token để xác minh các yêu cầu từ người dùng.

e. Kiểm tra bảo mật thường xuyên:

  • Sử dụng công cụ như Burp Suite, OWASP ZAP để phát hiện và vá lỗ hổng.

6. Công cụ hỗ trợ khai thác và phát hiện XSS

  • Burp Suite: Hỗ trợ phát hiện và khai thác XSS.
  • OWASP ZAP: Công cụ miễn phí để kiểm tra lỗ hổng XSS.
  • XSS Hunter: Giúp phát hiện và phân tích các lỗ hổng XSS.

Kết luận: XSS là một lỗ hổng nghiêm trọng nhưng có thể phòng ngừa nếu áp dụng đúng các biện pháp bảo mật. Hiểu rõ quy trình tấn công và áp dụng các biện pháp phòng ngừa sẽ giúp bảo vệ hệ thống và người dùng.

Bài viết cùng danh mục