Basic

Sử dụng lỗ hổng CL.TE (Content-Length và Transfer-Encoding), chúng ta có thể “buôn lậu” một request thứ hai bên trong một request POST. Frontend server (ví dụ: Apache Traffic Server) sẽ chỉ xử lý header Content-Length, trong khi backend server sẽ xử lý header Transfer-Encoding.

Attack Request:

POST / HTTP/1.1
Host: httprequestsmuggling.thm
Content-Length: 160
Connection: keep-alive
Transfer-Encoding: chunked
 
0
 
POST /contact.php HTTP/1.1
Host: httprequestsmuggling.thm
Content-Type: application/x-www-form-urlencoded
Content-Length: 500
 
username=test&query

Request thứ hai (smuggled) sẽ được backend xử lý, có thể dùng để lấy thông tin nhạy cảm.

Success

THM{1c4N_$mU66l3!!}

HTTP/2

Với HTTP/2, chúng ta có thể khai thác lỗ hổng H2.CL bằng cách chèn CRLF (\r\n) vào header. Varnish proxy sẽ chuyển đổi request HTTP/2 thành HTTP/1.1 và không validate đúng các ký tự newline, cho phép chúng ta smuggle một request khác.

Attack Request:

POST / HTTP/2
Host: 10.10.38.110:8000
Cookie: sessid=ba89f897ef7f68752abc
Sec-Ch-Ua: "Not;A=Brand";v="24", "Chromium";v="128"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://10.10.38.110:8000/post/12315198742342
Accept-Encoding: gzip, deflate, br
Priority: u=0, i
Content-Length: 0
 
GET /post/like/12315198742342 HTTP/1.1
Foo: x

Request này sẽ khiến người dùng khác “like” bài viết của chúng ta.

Success

THM{my_name_is_a_flag}

Tunneling

Leaking Internal Headers

Khai thác CVE-2019-19330 trong HAProxy. Bằng cách chèn CRLF vào giá trị header, chúng ta có thể smuggle một request và làm lộ các header nội bộ mà backend server thêm vào.

Success

THM{not_secret_anymore}

Bypassing Frontend Restrictions

Tương tự như trên, chúng ta có thể smuggle một request để truy cập vào các endpoint bị chặn bởi frontend proxy.

Success

THM{staff_only}

Web Cache Poisoning

Chúng ta có thể smuggle một request để làm nhiễm độc bộ đệm cache của web, khiến người dùng khác khi truy cập vào một tài nguyên (ví dụ: file JS) sẽ nhận được nội dung độc hại từ server của chúng ta.

Success

THM{nom_nom_cookies}

h2c Smuggling

Kỹ thuật này cho phép nâng cấp một kết nối HTTP/1.1 lên HTTP/2 qua cleartext (không mã hóa). Một số proxy sẽ chuyển tiếp các header nâng cấp này đến backend thay vì tự xử lý. Điều này tạo ra một “đường hầm” HTTP/2, cho phép chúng ta gửi các request trực tiếp đến backend, bypass proxy.

Công cụ: h2csmuggler.

Success

THM{walls_are_a_suggestion}

WebSockets

Chúng ta có thể gửi một request nâng cấp WebSocket “giả” với header Sec-WebSocket-Version không hợp lệ. Một số proxy sẽ tin rằng kết nối đã được nâng cấp và tạo một đường hầm, trong khi backend vẫn xử lý nó như một kết nối HTTP thông thường. Điều này cho phép chúng ta smuggle các request HTTP qua đường hầm này.

Lab 1: Proxy không kiểm tra phản hồi của backend

Proxy (Varnish) không kiểm tra phản hồi từ backend, nên nó sẽ tạo đường hầm ngay cả khi backend từ chối nâng cấp.

Success

THM{bf208caddc31c6bb52621fdc2b3a73e5}

Lab 2: Proxy có kiểm tra phản hồi của backend

Proxy (Nginx) sẽ kiểm tra phản hồi. Chúng ta cần tìm một lỗ hổng khác (ví dụ: SSRF) để ép backend trả về một response 101 Switching Protocols giả, lừa proxy rằng việc nâng cấp đã thành công.

Success

THM{a87d4e5b777c010ed3266e59fb42ccac}

Browser Desync

Đây là một kỹ thuật tấn công phía client. Chúng ta có thể khai thác sự khác biệt trong cách trình duyệt và server xử lý các request không rõ ràng để thực hiện các cuộc tấn công như cross-site scripting (XSS). Bằng cách gửi một request POST với body chứa một request GET “lồng” vào, chúng ta có thể làm cho server lưu trữ một payload độc hại và thực thi nó trên trình duyệt của người dùng khác.

Success

THM{SMUGGLING_IS_FUN}

Resources