Rate this post

HTTP Verb Tampering của ứng dụng web đối với các phương thức HTTP khác nhau truy cập các đối tượng hệ thống. Đối với mọi đối tượng hệ thống được phát hiện trong quá trình thử nghiệm, người thử nghiệm nên cố gắng truy cập tất cả các đối tượng đó bằng mọi phương thức HTTP.

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

Đặc tả HTTP bao gồm các phương thức yêu cầu khác với các yêu cầu GET và POST tiêu chuẩn. Máy chủ web tuân thủ các tiêu chuẩn có thể đáp ứng các phương pháp thay thế này theo những cách mà các nhà phát triển không lường trước được. Mặc dù mô tả phổ biến là giả mạo động từ, nhưng tiêu chuẩn HTTP 1.1 đề cập đến các loại yêu cầu này như các phương thức HTTP khác nhau.

Đặc tả HTTP 1.1 đầy đủ xác định các phương thức yêu cầu HTTP hợp lệ sau:

Nếu được bật, WebDAV cho phép một số phương thức HTTP khác:

Tuy nhiên, hầu hết các ứng dụng web chỉ cần phản hồi các yêu cầu GET và POST, cung cấp dữ liệu người dùng trong chuỗi truy vấn URL hoặc được nối vào yêu cầu tương ứng. Các liên kết kiểu <a href=””> </a> tiêu chuẩn kích hoạt yêu cầu GET; dữ liệu biểu mẫu được gửi qua <form method = ‘POST’> </form> kích hoạt yêu cầu ĐĂNG. Các biểu mẫu được xác định không có phương thức cũng gửi dữ liệu qua GET theo mặc định.

Thật kỳ lạ, các phương thức HTTP hợp lệ khác không được hỗ trợ bởi tiêu chuẩn HTML. Bất kỳ phương thức HTTP nào khác ngoài GET hoặc POST cần được gọi bên ngoài tài liệu HTML. Tuy nhiên, các lệnh gọi JavaScript và AJAX có thể gửi các phương thức khác với GET và POST.

Miễn là ứng dụng web đang được kiểm tra không gọi cụ thể cho bất kỳ phương thức HTTP không chuẩn nào, việc kiểm tra giả mạo động từ HTTP khá đơn giản. Nếu máy chủ chấp nhận một yêu cầu không phải GET hoặc POST, quá trình kiểm tra không thành công. Các giải pháp là vô hiệu hóa tất cả chức năng không phải GET hoặc POST trong máy chủ ứng dụng web hoặc trong tường lửa ứng dụng web.

Nếu các phương pháp như HEAD hoặc OPTIONS được yêu cầu cho ứng dụng của bạn, thì điều này làm tăng đáng kể gánh nặng kiểm tra. Mỗi hành động trong hệ thống sẽ cần được xác minh rằng các phương pháp thay thế này không kích hoạt các hành động mà không có xác thực thích hợp hoặc tiết lộ thông tin về nội dung hoặc hoạt động của ứng dụng web. Nếu có thể, hãy giới hạn việc sử dụng phương thức HTTP thay thế cho một trang không chứa hành động của người dùng, chẳng hạn như trang đích mặc định (ví dụ: index.html).

Làm thế nào để kiểm tra

Vì tiêu chuẩn HTML không hỗ trợ các phương thức yêu cầu ngoài GET hoặc POST, chúng tôi sẽ cần tạo các yêu cầu HTTP tùy chỉnh để kiểm tra các phương thức khác. Chúng tôi thực sự khuyên bạn nên sử dụng một công cụ để thực hiện việc này, mặc dù chúng tôi cũng sẽ trình bày cách thực hiện thủ công.

Kiểm tra HTTP Verb Tampering thủ công

Ví dụ này được viết bằng gói netcat từ openbsd (tiêu chuẩn với hầu hết các bản phân phối Linux). Bạn cũng có thể sử dụng telnet (đi kèm với Windows) theo cách tương tự.

Tạo yêu cầu HTTP tùy chỉnh

Mỗi yêu cầu HTTP 1.1 tuân theo định dạng và cú pháp cơ bản sau. Các phần tử được bao quanh bởi dấu ngoặc [] là theo ngữ cảnh đối với ứng dụng của bạn. Dòng mới trống ở cuối là bắt buộc.

[METHOD] /[index.htm] HTTP/1.1
host: [www.example.com]

Để tạo các yêu cầu riêng biệt, bạn có thể nhập thủ công từng yêu cầu vào netcat hoặc telnet và kiểm tra phản hồi. Tuy nhiên, để tăng tốc độ thử nghiệm, bạn cũng có thể lưu trữ từng yêu cầu trong một tệp riêng biệt. Cách tiếp cận thứ hai này là những gì chúng tôi sẽ chứng minh trong các ví dụ này. Sử dụng trình soạn thảo yêu thích của bạn để tạo tệp văn bản cho mỗi phương pháp. Sửa đổi tên miền và trang đích của ứng dụng của bạn.

1.1 OPTIONS

OPTIONS /index.html HTTP/1.1
host: www.example.com

1.2 GET

GET /index.html HTTP/1.1
host: www.example.com

1.3 HEAD

HEAD /index.html HTTP/1.1
host: www.example.com

1.4 POST

POST /index.html HTTP/1.1
host: www.example.com

1.5 PUT

PUT /index.html HTTP/1.1
host: www.example.com

1.6 DELETE

DELETE /index.html HTTP/1.1
host: www.example.com

1.7 TRACE

TRACE /index.html HTTP/1.1
host: www.example.com

1.8 CONNECT

CONNECT /index.html HTTP/1.1
host: www.example.com

Gửi yêu cầu HTTP

Đối với mỗi phương thức hoặc tệp văn bản phương thức, hãy gửi yêu cầu đến máy chủ web của bạn qua netcat hoặc telnet trên cổng 80 (HTTP):

nc www.example.com 80 < OPTIONS.http.txt

Phân tích cú pháp phản hồi HTTP

Mặc dù mỗi phương thức HTTP có thể trả về các kết quả khác nhau, nhưng chỉ có một kết quả hợp lệ duy nhất cho tất cả các phương thức ngoài GET và POST. Máy chủ web sẽ hoàn toàn bỏ qua yêu cầu hoặc trả về lỗi. Bất kỳ phản hồi nào khác chỉ ra lỗi kiểm tra vì máy chủ đang phản hồi các phương thức / động từ không cần thiết. Các phương pháp này nên bị vô hiệu hóa.

Một ví dụ về kiểm tra không thành công (tức là máy chủ hỗ trợ OPTIONS mặc dù không cần nó):

Kiểm tra Automated HTTP Verb Tampering Testing tự động

Nếu bạn có thể phân tích ứng dụng của mình thông qua các mã trạng thái HTTP đơn giản (200 OK, Lỗi 501, v.v.) – thì tập lệnh bash sau sẽ kiểm tra tất cả các phương thức HTTP có sẵn.

#!/bin/bash

for webservmethod in GET POST PUT TRACE CONNECT OPTIONS PROPFIND;

do
printf "$webservmethod " ;
printf "$webservmethod / HTTP/1.1\nHost: $1\n\n" | nc -q 1 $1 80 | grep "HTTP/1.1"
done

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now