[Pentest Q&A cùng Tsu] #7: Web-Cache Poisoning

Q1: web-cache thì mình biết, nhưng mà web-cache poisoning là gì?

A1: web cache nằm giữa client và server, liên tục xem xét request và response, tìm kiếm bất cứ response nào có thể cached (lưu vào bộ nhớ đệm). Bởi vậy thời gian phản hồi sẽ rút ngắn khi cùng một request được gửi đi nhiều lần.

Thì dễ dàng đoán ra web-cache poisoning là quậy tanh bành cái web-cache, làm nó trả về content tào lao.

Đến đây thì nhiều bạn sẽ nghĩ rằng kiểu tấn công này chủ yếu là tự tay bóp dái, hoặc cần physical access, hoặc cần trong cùng mạng, blah… blah…, điều đó là đúng, nếu như chúng ta đang nói về browser cache hay dns cache.

Trong bài này, 2 thứ cache trên không liên quan, chúng ta sẽ phân loại cache ra làm 2 là: private cache và share cache.

Private cache là cache được web browser (hoặc HTTP agent) lưu cục bộ, nằm trong máy client

Shared cache là cache nằm giữa client và server, nó dạng như một proxy, bắt request lại và xác định xem nên trả response luôn hay chuyển request đó tới server.

chúng ta sẽ poison shared cache, như vậy mới bóp dái thằng khác được

Q2: vl chim én, how?

A2: Bây giờ tưởng tượng nè, làm sao quyết định được nên trả về gì cho 1 request gửi lên? Cache hay chuyển tới server để lấy new resource về? Nếu mà so sánh từng byte 1 thì hoàn toàn không hiệu quả, do đó sinh ra 1 khái niệm gọi là “Cache keys” – là một số thành phần cụ thể của HTTP request dùng để xác định resource đang được yêu cầu.

Ví dụ:

cache keys ở đây là phần bôi cam cam ở trên, nếu request nào match 2 cái đó thì resource cache sẽ được trả về, như vậy nếu ta request:

Thì content trả về vẫn là english, vì cache key vẫn đúng, và… poisoned >_<, Lưu ý là cache keys tuỳ thuộc từng trường hợp, không cố định (hoặc có thể được xác định bằng trường Vary)

Q3: Ok hiểu cơ chế xác định rồi? vậy tấn công như nào

A3: Sau đây là sơ đồ bóp dái

Mục tiêu bây giờ là, poison shared cache:
Qua 3 bước:
1. Tìm những chỗ input không phải cache key
2. Xem những chỗ input đó có thành lỗi được không
3. Nếu có thì bắt đầu poison shared cache

Ví dụ acunetix hay quét ra lỗi host header attack, ngày xưa thì lỗi này bị quy vào unexpoitable, chỉ mang tính chất doạ cho zui, mình bị N/A mấy lần roài rất akay, cụ thể là như thế này

trường X-Forwarded-Host thường được dùng để chỉ định tên máy chủ được sử dụng để truy cập web trên trình duyệt, nên nó sẽ reflect lại ở dưới content. Lưu ý là trường này không phải cache key, cache key ở đây là /en?dontpoisoneveryone=1

sửa lại như này, break đc tag, xss được, ok xong bước 1 và 2

Mỗi shared cache có 1 thời gian nhất định, nghĩa là sau 1 thời gian cache sẽ bị xoá dành chỗ cho cache mới, để poison nó, chúng ta cần phải là người đầu tiên tạo cache

=> Sử dụng burp intruder, tạo custom code, cài cắm auto (với header X-Forwarded-Host bị poison) cho đến khi thành công.

Sau khi đã tạo được cache láo thì việc còn lại là dụ user truy cập vào /en?dontpoisoneveryone=1 thôi.

Q4: Hay vl, đạo bài này ở đâu vậy?

A4: https://portswigger.net/blog/practical-web-cache-poisoning

Advertisements

3 thoughts on “[Pentest Q&A cùng Tsu] #7: Web-Cache Poisoning

  1. Pingback: [Pentest Q&A cùng Tsu] #0: Introduction | Tsu BlogS ٩(^‿^)۶

  2. Em muốn hỏi là, làm sao mình biết web đó có sử dụng cache và bị lỗi cache poisoning? Ngoài fuzzing thì có trường header nào nói lên điều đó không?
    Thứ 2, anh có thể giải thích chỗ trường vary của http giúp em được không?

    Like

      1. Phải fuzzing em nhé, thuộc về vấn đề tâm linh và nhận thức nha, tuy nhiên em có thể đơn giản hoá quá trình bằng cách sử dụng burp plugin Param Miner, plugin này sẽ fuzz hết tất cả các case hộ chúng ta trên từng request.
      2. Trường Vary nằm trong header trả về, nó được máy chủ sử dụng để cho biết field nào được dùng làm cache key.

      Ví dụ:
      cache

      Trường Vary nói rằng, User-Agent là một trong những cache key

      ( Nhưng đừng nhầm lẫn chức năng thật sự của Vary, ở trên chỉ là trick detect thôi, see more: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary )

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s