18/8/14

Web Security: Khái niệm "Cross-Site Scripting"

1 - Cross-Site Scripting là gì?



Cross-Site Scripting (XSS) là một trong các kỹ thuật hack website phổ biến. Bằng cách chèn vào thanh địa chỉ của trình duyệt, các textbox tìm kiếm, những chỗ có textbox để chèn mã độc. Các hacker sẽ nhúng các đoạn mã độc bằng JavaScript, VBScript, ActiveX, HTML hoặc
Flash. Những đoạn mã này sẽ thực hiện nhiệm vụ thu thập thông tin từ người dùng nạn nhân (victim). Từ đó các hacker có thể đánh cắp được thông tin cá nhân, cookie người dùng, hoặc đưa người dùng đến một website nào khác để thực hiện những đoạn mã độc khác mà người dùng không ngờ tới được gọi là trang fishing. Xss được chia làm 2 loại: Persistent và Non-Persistent


2 - Nguyên lý hoạt động của XSS:

Khi website đã bị chèn các thẻ html hay những đoạn mã script thì khi đó các request từ máy nạn nhân sẽ được gửi đến server nhằm chèn vào đó các thông tin vượt quá tầm kiểm soát của server. Khi người sử dụng click vào những link đó thì toàn bộ cookies, mật khẩu lưu trên trình duyệt được gửi về cho hacker qua email hoặc 1 file nào đó trên host đã được thiết lập từ trước hoặc bị dẫn tới 1 trang fishing mà hacker đã thiết lập từ trước hay bị cài đặt các chương trình virus, Trojan, backdoor trên máy victim tùy vào mục đích của hacker.

3 - Các điều mã hacker có thể làm được bằng cách tấn công XSS:

Ăn cắp cookies, mật khẩu, cướp session làm việc của victim.
- Cài các loại virus, trojan, backdoor trên máy tính victim.
- Phá hoại website. Tuy nhiên nó chỉ chạy trên trình duyệt phía client và chỉ tấn công vào bề mặt website, không làm thay đổi cấu trúc mã nguồn, cơ sở dữ liệu của website trên server.

4 - Ví dụ về tấn công XSS:

Bây giờ mình sẽ làm một ví dụ về một cuộc tấn công sử dụng kỹ thuật xss. Kịch bản đặt ra là chúng ta có một website cung cấp dịch vụ tính toán cho người dùng. Người dùng khi truy cập vào website sẽ thực hiện tính toán bằng cách nhập vào 2 số và chọn một phép toán, sau đó bấm nút "Tính" để thực hiện việc tính toán. Hacker sẽ ăn cắp các cookie bằng cách chèn 1 đoạn script.

Bây giờ chúng ta tạo folder cho project là xss_example, trong folder chúng ta soạn 1 file index.php có nội dung như bên dưới:


<html>
 <head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
 </head>
 <body>
  <form method="POST">
   <table border="0" width="300" cellspacing="0" cellpadding="3">
    <tr>
     <td width="100">Phép toán</td>
     <td>
      <select name="operator">
       <option value="1">-- Cộng --</option>
       <option value="2">-- Trừ --</option>
       <option value="3">-- Nhân --</option>
       <option value="4">-- Chia --</option>
      </select>
     </td>
    </tr>
    <tr>
     <td width="100">Số thứ nhất</td>
     <td>
      <input type="text" name="number_one" />
     </td>
    </tr>
    <tr>
     <td width="100">Số thứ hai</td>
     <td>
      <input type="text" name="number_two" />
     </td>
    </tr>
    <tr>
     <td width="100"></td>
     <td>
      <input type="submit" name="submit" value="Tính" />
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>

Sau khi soạn xong, chạy thử file index.php chúng ta có giao diện như bên dưới:

(giao diện sau khi chạy file index.php)

Tiếp theo chúng ta chèn ở trên đầu file index.php, đoạn code xử lý tính toán khi người dùng bấm vào nút "Tinh":


<?php
 if (isset($_POST['submit'])) {
  $operator = $_POST['operator'];
  $number_one = $_POST['number_one'];
  $number_two = $_POST['number_two'];
  $operatorString = '';
  $result = 0;
  
  switch ($operator) {
   case 1:
    $operatorString = ' + ';
    $result = (int) $number_one + (int) $number_two;
    break;
   case 2:
    $operatorString = ' - ';
    $result = (int) $number_one - (int) $number_two;
    break;
   case 3:
    $operatorString = ' * ';
    $result = (int) $number_one * (int) $number_two;
    break;
   case 4:
    $operatorString = ' / ';
    $result = (int) $number_one / (int) $number_two;
    break;
  }
 }
?>

Sau đó chúng ta chèn thêm đoạn mã sau vào trước tag mở của tag "form" để xuất hiện kết quả sau khi tính toán:


<?php
  if(isset($result)) {
   echo '<p>Kết quả của phép toán ' . $number_one . $operatorString . $number_two .' = ' . $result . '</p>';
  }
  ?>

Bây giờ chúng ta thử chạy lại trang index.php và tính thử xem nào, bên dưới là lần chạy thử đầu tiên của mình:

(Kết quả khi người dùng bình thường nhập vào các ô textbox)


Nhưng mọi chuyện không đơn giản như vậy, bây giờ chúng ta chèn đoạn script bên dưới vào ô textbox xem chuyện gì xảy ra nhé:


<script>alert("I'm Hacker ^^!")</script>

Và kết quả, sau khi chèn đoạn script trên vào và bấm nút "Tính" thì:

(Chèn script vào ô textbox)
(Và đây là kết quả)

Sau khi trải qua 1 ví dụ nhỏ, mình mong là có thể giúp các bạn hiểu được thế nào là XSS, cách thức tấn công. Ví dụ ở trên vẫn chưa thể mô tả hết được các kỹ thuật mà các hacker sử dụng để tấn công XSS. Và trong các chuỗi bài tiếp theo chúng ta sẽ cùng tìm hiểu kỹ hơn về các kỹ thuật mà các hacker sử dụng trên thực tế để biết được là lỗ hổng này có thể bị khai thác nguy hiểm như thế nào đối với người dùng cuối như chúng ta.


Không có nhận xét nào:

Đăng nhận xét