Rate this post

Tác động của một phản hồi được xây dựng độc hại có thể được tăng lên nếu nó được lưu vào Cache bởi Cache web được nhiều người dùng sử dụng hoặc thậm chí Cache của trình duyệt của một người dùng. Nếu phản hồi được lưu trong Cache ẩn của web được chia sẻ, chẳng hạn như những phản hồi thường thấy trong máy chủ proxy, thì tất cả người dùng Cache đó sẽ tiếp tục nhận được nội dung độc hại cho đến khi mục nhậpCache được xóa. Tương tự, nếu phản hồi được lưu vào bộ nhớ cache trong trình duyệt của một người dùng cá nhân, thì người dùng đó sẽ tiếp tục nhận được nội dung độc hại cho đến khi mục nhập bộ nhớ cache được xóa, mặc dù chỉ người dùng của phiên bản trình duyệt cục bộ mới bị ảnh hưởng.

Các bài viết liên quan:

Để thực hiện thành công một cuộc tấn công như vậy, kẻ tấn công:

  • Tìm mã dịch vụ dễ bị tấn công, cho phép chúng điền vào trường tiêu đề HTTP với nhiều tiêu đề.
  • Buộc máy chủ lưu trong Cache phải xóa nội dung Cache thực của nó, nội dung mà chúng tôi muốn được máy chủ lưu vào Cache.
  • Gửi một yêu cầu được tạo thủ công đặc biệt, yêu cầu này sẽ được lưu trữ trong bộ nhớ cache.
  • Gửi yêu cầu tiếp theo. Nội dung được đưa vào trước đó được lưu trữ trong bộ nhớ cache sẽ là phản hồi cho yêu cầu này.

Cuộc tấn công này khá khó thực hiện trong môi trường thực tế. Danh sách các điều kiện dài và khó thực hiện được bởi kẻ tấn công. Tuy nhiên, sử dụng kỹ thuật này dễ dàng hơn so với Giao diện người dùng chéo.

Có thể xảy ra một cuộc tấn công nhiễm độc Cache do Phân tách phản hồi HTTP và các sai sót trong ứng dụng web. Theo quan điểm của kẻ tấn công, ứng dụng cho phép điền vào trường tiêu đề nhiều hơn một tiêu đề bằng các ký tự CR (Carriage Return) và LF (Line Feed).

Các ví dụ

Chúng tôi đã tìm thấy một trang web, lấy tên dịch vụ của nó từ đối số “trang” và sau đó chuyển hướng (302) đến dịch vụ này.

ví dụ. http://testsite.com/redir.php?page=http://other.testsite.com/

Và mã mẫu của redir.php:

rezos@dojo ~/public_html $ cat redir.php
<?php
header ("Location: " . $_GET['page']);
?>

Tạo yêu cầu thích hợp:

GET http://testsite.com/index.html HTTP/1.1
Pragma: no-cache
Host: testsite.com
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Các trường tiêu đề HTTP Pragma: no-cache và ‘Cache-Control: no-cache’ sẽ xóa trang khỏi Cache (hiển nhiên là nếu trang được lưu trongCache).

Sử dụng tính năng Phân tách phản hồi HTTP, chúng tôi buộc máy chủ bộ nhớ cache tạo hai phản hồi cho một yêu cầu

GET http://testsite.com/redir.php?site=%0d%0aContent-
Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aLast-
Modified:%20Mon,%2027%20Oct%202009%2014:50:18%20GMT%0d%0aConte
nt-Length:%2020%0d%0aContent-
Type:%20text/html%0d%0a%0d%0a<html>deface!</html> HTTP/1.1
Host: testsite.com
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Chúng tôi đang cố ý đặt thời gian trong tương lai (trong tiêu đề, nó được đặt thành ngày 27 tháng 10 năm 2009) trong tiêu đề HTTP phản hồi thứ hai “Last-Modified” để lưu trữ phản hồi trong bộ nhớ cache.

Xem thêm Memory( bộ nhớ) máy tính trong hệ điều hành

Chúng tôi có thể có được hiệu ứng này bằng cách đặt các tiêu đề sau:

  • Last-Modified (được kiểm tra bằng tiêu đề Nếu được sửa đổi-Kể từ khi sửa đổi)
  • ETag (được kiểm tra bằng tiêu đề Nếu-Không-Khớp)

Gửi yêu cầu cho trang mà chúng tôi muốn thay thế trong Cache ẩn của máy chủ

GET http://testsite.com/index.html HTTP/1.1
Host: testsite.com
User-Agent: Mozilla/4.7 [en] (WinNT; I)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Về lý thuyết, máy chủ Cache phải khớp câu trả lời thứ hai từ yêu cầu số 2 với yêu cầu số 3. Bằng cách này, chúng tôi đã thay thế nội dung bộ nhớ cache.

Phần còn lại của các yêu cầu phải được thực thi trong một kết nối (nếu máy chủ bộ nhớ cache không yêu cầu sử dụng phương pháp phức tạp hơn), có thể ngay lập tức lần lượt.

Có thể có vấn đề khi sử dụng cuộc tấn công này như một kỹ thuật phổ biến để nhiễm độc bộ nhớ cache. Đó là do mô hình kết nối khác nhau của máy chủ bộ nhớ cache và việc triển khai xử lý yêu cầu. Nó có nghĩa là gì? Đó là ví dụ, phương pháp hiệu quả để đầu độc Cache Apache 2.x bằng mô-đun mod_proxy và mod_cache sẽ không hoạt động với Squid.

Một vấn đề khác là độ dài của URI, đôi khi khiến nó không thể đặt tiêu đề phản hồi cần thiết, tiêu đề này tiếp theo sẽ được khớp với yêu cầu cho trang bị nhiễm độc.

Các ví dụ yêu cầu được sử dụng là từ bài báo của Amit Klein được tham chiếu bên dưới, đã được sửa đổi theo nhu cầu của bài báo.

Xe thêm Các bước hack hệ thống ? hacking? Ethical hacking

Leave a Reply

Call now
%d bloggers like this: