XSS là gì? Cách kiểm tra và ngăn chặn Cross-Site Scripting

XSS là gì? Tìm hiểu về định nghĩa, cách nhận biết và phòng tránh tấn công Cross-Site Scripting để bảo vệ website an toàn

XSS là gì? Cách kiểm tra và ngăn chặn Cross-Site Scripting

XSS là gì? Cách kiểm tra và ngăn chặn Cross-Site ScriptingLink to heading

Trong danh sách OWASP Top 10, XSS luôn nằm trong nhóm lỗ hổng bảo mật web nguy hiểm và phổ biến nhất. Vậy XSS là gì mà khiến giới lập trình viên và chuyên gia an ninh mạng phải đặc biệt cảnh giác? Bài viết này sẽ giúp bạn hiểu rõ bản chất Cross-Site Scripting (XSS), nguyên nhân gây ra lỗ hổng, cách phát hiện và chiến lược phòng chống, giúp bạn chủ động bảo vệ hệ thống khỏi nguy cơ bị tin tặc lợi dụng.

XSS là gì?Link to heading

XSS (Cross-Site Scripting) là một lỗ hổng bảo mật ứng dụng web cho phép kẻ tấn công chèn và thực thi mã độc (thường là JavaScript) trực tiếp trên trình duyệt của người dùng thông qua các trang web hợp pháp nhưng dễ bị khai thác. 

Khi người dùng truy cập vào trang web đã bị chèn mã, đoạn mã độc sẽ được xử lý như một phần hợp lệ của website, từ đó bỏ qua cơ chế Same-Origin Policy – vốn được thiết kế để ngăn các website khác nhau truy cập dữ liệu của nhau.

Với lỗ hổng này, kẻ tấn công có thể giả mạo người dùng, thực hiện mọi hành động mà người dùng có quyền, và truy cập vào dữ liệu nhạy cảm như thông tin đăng nhập, cookie, session token. Nếu người bị tấn công có quyền quản trị, hacker thậm chí có thể chiếm quyền kiểm soát toàn bộ chức năng và dữ liệu của ứng dụng.

XSS là lỗ hổng phía client-side, hoạt động trực tiếp trên trình duyệt, khiến việc phát hiện và ngăn chặn trở nên khó khăn hơn so với các tấn công phía server. Ngoài JavaScript và HTML, một số công nghệ khác như Flash, VBScript, ActiveX hay CSS cũng có thể bị lợi dụng trong các cuộc tấn công XSS.

>>> Có thể bạn quan tâm: Code Injection Attack là gì? Cách thức tấn công và hậu quả

Cách thức hoạt động của Cross-Site Scripting (XSS)Link to heading

Tìm hiểu về XSS là gì, bạn nên biết tấn công Cross-Site Scripting diễn ra khi kẻ tấn công chèn mã độc hại, thường là JavaScript hoặc HTML, vào các vị trí trên website có khả năng nhận dữ liệu từ người dùng nhưng không được kiểm soát đầu vào nghiêm ngặt. Khi dữ liệu này được hiển thị lại mà không qua bước lọc hoặc mã hóa an toàn, trình duyệt sẽ hiểu và thực thi đoạn mã độc như thể đó là một phần hợp lệ của trang web.

Quy trình cơ bản của một cuộc tấn công XSS bắt đầu khi hacker xác định được vị trí dễ bị khai thác, chẳng hạn như ô tìm kiếm, biểu mẫu nhập liệu hoặc khu vực bình luận. Sau đó, chúng sẽ chèn vào đây một đoạn script. 

Nếu hệ thống phản hồi lại dữ liệu này mà không kiểm tra cẩn thận, đoạn mã độc sẽ lập tức được thực thi trong trình duyệt của người dùng, gây ra những nguy cơ như đánh cắp cookie, giả mạo danh tính hay chiếm quyền truy cập tài khoản.

Ví dụ: Một trang web có ô tìm kiếm hiển thị lại từ khóa người dùng nhập vào mà không xử lý an toàn. Nếu kẻ tấn công nhập:

 

Khi nhấn “Search”, đoạn mã này sẽ được trình duyệt thực thi như mã hợp lệ của website và hiển thị hộp thoại cảnh báo. Trong thực tế, thay vì chỉ hiển thị thông báo, hacker có thể chèn những đoạn script tinh vi hơn để lấy cắp dữ liệu nhạy cảm hoặc kiểm soát toàn bộ phiên làm việc của người dùng.

Nguyên nhân khiến trình duyệt thực thi mã độc là do nó không thể phân biệt giữa mã gốc của website và mã được chèn từ bên ngoài khi trang web không có biện pháp xử lý đầu vào an toàn. Điều này biến những đoạn mã tưởng chừng vô hại thành công cụ tấn công nguy hiểm trong tay hacker.

Các hình thức tấn công Cross-Site Scripting (XSS)Link to heading

Reflected XSS là gì?Link to heading

Reflected XSS là một trong những dạng tấn công XSS phổ biến nhất, trong đó mã độc không được lưu trữ trên máy chủ mà nằm trực tiếp trong yêu cầu HTTP. Kẻ tấn công thường dụ nạn nhân truy cập một liên kết chứa đoạn mã độc. Khi nạn nhân click vào liên kết này, mã độc nhúng trong URL sẽ được thực thi ngay trên trình duyệt của họ. 

Mục tiêu chính của Reflected XSS là đánh cắp cookie hoặc chiếm quyền sử dụng phiên đăng nhập của người dùng.

Ví dụ, kẻ tấn công có thể tạo một liên kết như:

http://kiten.com/index.php?search=

Trong trường hợp này, đoạn JavaScript alert(document.cookie) được chèn vào tham số search của URL. Khi nạn nhân truy cập liên kết, trình duyệt sẽ thực thi đoạn mã, hiển thị cookie của nạn nhân trong cửa sổ cảnh báo. Thay vì chỉ hiển thị thông tin, kẻ tấn công có thể thay thế đoạn mã này bằng script nguy hiểm hơn để đánh cắp cookie và chiếm quyền kiểm soát phiên làm việc.

Để giảm khả năng bị phát hiện, kẻ tấn công thường mã hóa toàn bộ URL, ví dụ:

http%3A%2F%2Fvictim.com%2Findex.php%3Fsearch%3D%3Cscript%3Ealert(document.cookie)%3C%2Fscript%3E

Khi được mã hóa, liên kết trông ít khả nghi hơn và dễ dàng qua mặt người dùng thiếu cảnh giác. Sau khi nạn nhân click, trình duyệt sẽ tự động giải mã URL và thực thi đoạn mã độc hại ẩn bên trong.

Stored XSS là gì?Link to heading

Stored XSS là dạng tấn công Cross-Site Scripting nguy hiểm hơn Reflected XSS vì có thể ảnh hưởng đến nhiều người dùng cùng lúc. Trong hình thức này, mã độc được chèn trực tiếp vào cơ sở dữ liệu của máy chủ. Điều này xảy ra khi ứng dụng web không kiểm tra hoặc lọc dữ liệu đầu vào từ người dùng trước khi lưu trữ. Khi những người dùng khác truy cập vào trang web hoặc ứng dụng chứa dữ liệu độc hại đó, mã sẽ tự động được thực thi trên trình duyệt của họ.

Lỗ hổng Stored XSS thường xuất hiện trong các chức năng cho phép nhập và lưu dữ liệu như phần bình luận, tin nhắn, diễn đàn hoặc bất kỳ khu vực nào lưu trữ nội dung do người dùng tạo ra.

Ví dụ, trong một website có tính năng bình luận, nếu kẻ tấn công chèn đoạn mã JavaScript:

và đoạn mã này được lưu vào cơ sở dữ liệu mà không qua xử lý an toàn, bất kỳ ai truy cập và xem bình luận đó sẽ bị tác động. Trình duyệt của họ sẽ thực thi đoạn mã, hiển thị cookie của người dùng trong một cửa sổ cảnh báo.

DOM based XSS là gì?Link to heading

DOM-based XSS là một loại lỗ hổng XSS đặc biệt, xảy ra ở mã phía client thay vì mã phía server. Kỹ thuật này khai thác lỗ hổng bằng cách thay đổi cấu trúc DOM (Document Object Model) của trang web, tức là can thiệp trực tiếp vào HTML hoặc JavaScript hiển thị trên trình duyệt. 

Điểm khác biệt lớn nhất giữa DOM-based XSS với Reflected XSS và Stored XSS là mã độc không bao giờ được gửi đến máy chủ, mà được thực thi hoàn toàn trên trình duyệt của nạn nhân. Chính vì payload không đi qua máy chủ nên loại tấn công này khó bị phát hiện hơn.

Ví dụ: Một website có URL:

http://example.com/register.php?message=Please fill in the form

Trang web sử dụng tham số message trong URL để hiển thị thông báo. Kẻ tấn công có thể thay đổi tham số này để chèn mã độc:

http://example.com/register.php?message=

Khi người dùng truy cập đường dẫn trên, trình duyệt sẽ thực thi đoạn JavaScript alert(document.cookie) và hiển thị cookie của người dùng.

Ví dụ:

 

Welcome!

 

Hi

 

 


 

Welcome

 

 

Với một trang web sử dụng tham số name trong URL để hiển thị lời chào, URL hợp lệ sẽ là:

http://www.vulnerable.site/welcome.html?name=Jill

Tuy nhiên, kẻ tấn công có thể thay đổi tham số name để chèn mã độc:

http://www.vulnerable.site/welcome.html?name=

Khi nạn nhân truy cập, trình duyệt sẽ thực thi đoạn mã JavaScript và hiển thị cookie. Vì mã độc được chạy trực tiếp trên trình duyệt, không qua xử lý của máy chủ, nên DOM-based XSS thường khó phát hiện và dễ bị bỏ sót nếu không có biện pháp kiểm tra chặt chẽ.

Tác động của tấn công XSS là gì?Link to heading

Kẻ tấn công sử dụng XSS để khai thác lỗ hổng bảo mật trong ứng dụng web, chèn và thực thi mã độc ngay trên trình duyệt của người dùng. Mục tiêu của chúng thường bao gồm:

  • Đánh cắp cookie hoặc session: Giúp chiếm quyền kiểm soát phiên làm việc, truy cập vào tài khoản mà không cần biết mật khẩu.
  • Giả mạo hoặc mạo danh người dùng: Thực hiện các hành động thay mặt nạn nhân như gửi tin nhắn, đăng bài viết hoặc thực hiện giao dịch trực tuyến.
  • Truy xuất dữ liệu nhạy cảm: Nếu thông tin quan trọng được lưu trên trình duyệt, XSS có thể được dùng để đọc và lấy cắp dữ liệu này.
  • Thay đổi nội dung trang web: Can thiệp vào giao diện hiển thị, làm sai lệch thông tin hoặc phá hoại hình ảnh và uy tín của website.
  • Chuyển hướng đến trang độc hại: Dẫn người dùng sang các website giả mạo nhằm lừa đảo hoặc phát tán mã độc.
  • Cài đặt phần mềm độc hại: Bao gồm keylogger, trojan hoặc các loại mã độc khác để theo dõi hoạt động, đánh cắp dữ liệu hoặc điều khiển máy tính từ xa.
  • Đánh cắp thông tin đăng nhập: Tạo biểu mẫu đăng nhập giả, dụ người dùng nhập thông tin để chiếm đoạt tài khoản.

Các vector tấn công XSS phổ biếnLink to heading

Biết XSS là gì, dưới đây là các vector tấn công XSS phổ biến mà tin tặc thường lợi dụng để xâm nhập và phá vỡ tính bảo mật của website hoặc ứng dụng web.

Sử dụng thẻ

 

 

Khai thác thuộc tính sự kiện JavaScript

Các thuộc tính sự kiện như onload, onerror có thể gắn vào nhiều loại thẻ HTML khác nhau để thực thi mã độc.

 

Khai thác thẻ

Ngoài các thuộc tính sự kiện, thẻ còn có thể bị chèn payload XSS thông qua các thuộc tính ít phổ biến hơn như background.

 

Khai thác thẻ

Một số trình duyệt có thể thực thi JavaScript từ các thuộc tính trong thẻ .

 

 

 

 

Khai thác thẻ

cho phép nhúng một trang HTML khác vào trang hiện tại. Mặc dù JavaScript trong iframe bị hạn chế quyền truy cập DOM của trang cha bởi CSP, nhưng iframe vẫn hữu ích trong các cuộc tấn công phishing.

 

Khai thác thẻ

Ở một số trình duyệt, khi thuộc tính type của được đặt là image, nó có thể bị lợi dụng để nhúng JavaScript.

 

Khai thác thẻ

Thẻ vốn để liên kết CSS, nhưng nếu bị chèn mã độc, nó có thể tải JavaScript thay vì CSS.

 

Khai thác thẻ và

Thuộc tính background trong các thẻ

Khai thác thẻ

Giống như thẻ

có thể trỏ tới mã JavaScript thay vì hình ảnh.

 

 

 

, thẻ
cũng cho phép chỉ định background, từ đó có thể lợi dụng để nhúng mã script độc hại.

 

 

Khai thác thẻ

Thẻ có thể được dùng để chèn và thực thi một đoạn script từ trang web bên ngoài.

 

Hướng dẫn kiểm tra lỗ hổng Cross-Site Scripting (XSS)Link to heading

Kiểm tra thủ côngLink to heading

Tìm hiểu về XSS là gì, bạn nên bắt đầu bằng việc xác định các điểm đầu vào có nguy cơ bị khai thác, tập trung vào những khu vực như form nhập liệu, ô tìm kiếm, phần bình luận và các tham số trong URL. Đây là những vị trí mà kẻ tấn công có thể lợi dụng để chèn mã độc.

Tiếp theo, thử chèn các đoạn mã đơn giản, chẳng hạn:

Nếu sau khi gửi dữ liệu, hộp thoại hiển thị cookie xuất hiện, điều đó cho thấy ứng dụng đang tồn tại lỗ hổng XSS.

Ngoài ra, cần kiểm tra khả năng ứng dụng xử lý các ký tự đặc biệt bằng cách sử dụng dạng mã hóa. Kẻ tấn công thường mã hóa các ký tự để vượt qua bộ lọc, ví dụ %3Cscript%3E là dạng mã hóa URL của

Contact background

Bạn muốn nhận tư vấn về các dịch vụ của System443

Đội ngũ chuyên gia giàu kinh nghiệm của chúng tôi luôn sẵn sàng hỗ trợ bạn!

Mascot contact
Contact now