Mask
VIP Members
-
03/07/2013
-
33
-
25 bài viết
Web11: Một số hình thức giả mạo http headers
Trong lập trình web, nhiều lập trình viên sử dụng các trường trong http headers để kiểm tra, kiểm soát truy cập của người sử dụng. Việc kiểm tra, kiểm soát này tưởng trừng như an toàn nhưng trên thực tế tất cả trường trong http headers đều có thể bị giả mạo dẫn tới những nguy cơ về việc truy cập trái phép vào các website đó.
Dưới đây tôi sẽ đưa ra một số trường hợp giả mạo http headers để thực hiện việc truy cập trái phép.
Trong một số trường hợp, một số website chỉ cho phép truy cập từ một số trang nhất định.
Khi bạn request từ một trang khác sẽ bị từ chối truy cập.
URL: http://natas4.natas.labs.overthewire.org/
Username: natas4
Password: Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ
Trong trường hợp này, lập trình viên đã sử dụng biến $_SERVER['HTTP_REFERER'] để kiểm soát sự truy cập. Trường tương ứng với biến này trong header là Referer.
Vì vậy, có thể thay đổi header để truy cập vào site đó
Sử dụng Tamper data (addon trên firefox) để thay đổi trường referer trong header thành như sau:
Và chúng ta có thể truy cập vào site đó
Một trường hợp khác:
Một site lưu trạng thái đăng nhập trong cookie, vì cookie cũng được gửi trong http header nên chúng ta có thể thay đổi
URL: http://natas5.natas.labs.overthewire.org/
Username: natas5
Password: iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
Khi sử dụng Tamper data để phân tích header gửi lên ta thấy tham số loggedin=0 trong trường cookie. Thay đổi nó thành 1 sau đó submit để thấy sự khác biệt.
Một ví dụ tiếp theo.
Một site có đoạn xử lý ip của người truy cập tới như sau:
Site này chỉ cho truy cập tới từ một địa chỉ ip cố định, và không được phép truy cập từ các địa chỉ ip khác. Tuy nhiên nó sử dụng các thông tin được gửi lên trong http headers để kiểm tra ip của người sử dụng.
X-Forwarded-For và Client-Ip là 2 trường trương ứng của 2 biến server $_SERVER['HTTP_X_FORWARDED_FOR'] và $_SERVER['HTTP_CLIENT_IP'] trong HTTP header. Vì vậy, ta có thể giả mạo được địa chỉ IP truy cập bằng cách thay đổi một trong hai trường này.
Đối với form upload
Một số lập trình viên sử dụng đoạn mã kiểm tra phần mở rộng của file upload như sau:
Hacker có thể dễ dàng bypass bằng cách xử dụng các phần mềm Tamper để sửa trường Content-Type trong header trước khi gửi lên server
Và hacker có thể upload nên một file với phần mở rộng .php trái phép.
Việc sử dụng các trường trong http headers để kiểm tra, kiểm soát truy cập là không an toàn, vì vậy các lập trình viên cần nắm được để đảm bảo an toàn cho website.
Dưới đây là video đề mô về một số trường hợp giả mạo http headers mà tôi đã nói ở trên
Dưới đây tôi sẽ đưa ra một số trường hợp giả mạo http headers để thực hiện việc truy cập trái phép.
Trong một số trường hợp, một số website chỉ cho phép truy cập từ một số trang nhất định.
Khi bạn request từ một trang khác sẽ bị từ chối truy cập.
URL: http://natas4.natas.labs.overthewire.org/
Username: natas4
Password: Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ
Trong trường hợp này, lập trình viên đã sử dụng biến $_SERVER['HTTP_REFERER'] để kiểm soát sự truy cập. Trường tương ứng với biến này trong header là Referer.
Vì vậy, có thể thay đổi header để truy cập vào site đó
Sử dụng Tamper data (addon trên firefox) để thay đổi trường referer trong header thành như sau:
Và chúng ta có thể truy cập vào site đó
Một trường hợp khác:
Một site lưu trạng thái đăng nhập trong cookie, vì cookie cũng được gửi trong http header nên chúng ta có thể thay đổi
URL: http://natas5.natas.labs.overthewire.org/
Username: natas5
Password: iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq
Khi sử dụng Tamper data để phân tích header gửi lên ta thấy tham số loggedin=0 trong trường cookie. Thay đổi nó thành 1 sau đó submit để thấy sự khác biệt.
Một ví dụ tiếp theo.
Một site có đoạn xử lý ip của người truy cập tới như sau:
PHP:
Site này chỉ cho truy cập tới từ một địa chỉ ip cố định, và không được phép truy cập từ các địa chỉ ip khác. Tuy nhiên nó sử dụng các thông tin được gửi lên trong http headers để kiểm tra ip của người sử dụng.
X-Forwarded-For và Client-Ip là 2 trường trương ứng của 2 biến server $_SERVER['HTTP_X_FORWARDED_FOR'] và $_SERVER['HTTP_CLIENT_IP'] trong HTTP header. Vì vậy, ta có thể giả mạo được địa chỉ IP truy cập bằng cách thay đổi một trong hai trường này.
Đối với form upload
Một số lập trình viên sử dụng đoạn mã kiểm tra phần mở rộng của file upload như sau:
PHP:
if($_FILES[‘file’][‘type’] == ‘image/gif’)
{
//cho phép upload
}
else
{
//không cho phép upload
}
Và hacker có thể upload nên một file với phần mở rộng .php trái phép.
Việc sử dụng các trường trong http headers để kiểm tra, kiểm soát truy cập là không an toàn, vì vậy các lập trình viên cần nắm được để đảm bảo an toàn cho website.
Dưới đây là video đề mô về một số trường hợp giả mạo http headers mà tôi đã nói ở trên
Chỉnh sửa lần cuối bởi người điều hành: