Directory traversal
Trong phần này, sẽ giải thích directory traversal là gì, mô tả cách thực hiện cuộc tấn công directory traversal và cách bypass một số bộ lọc và cách ngăn chặn cuộc tấn công liên quan đến lỗ hổng này.
Last updated
Trong phần này, sẽ giải thích directory traversal là gì, mô tả cách thực hiện cuộc tấn công directory traversal và cách bypass một số bộ lọc và cách ngăn chặn cuộc tấn công liên quan đến lỗ hổng này.
Last updated
Directory traversal hay còn được biết đến là file path traversal là một lỗ hổng bảo mật web mà cho phép attacker có thể đọc một file bất kì trên server mà ứng dụng đang chạy. Trong một số trường hợp, attacker có thể ghi vào các tệp tùy ý trên máy chủ, điều này cho phép chúng sửa đổi dữ liệu hoặc hành vi của ứng dụng và cuối cùng là có thể kiểm soát toàn bộ máy chủ.
Giả sử một ứng dụng mua sắm hiển thị hình ảnh của các mặt hàng. Hình ảnh được tải qua một số HTML sau:
<img src="/loadImage?filename=218.png>
URL loadImage nhận một tham số filename và trả về nội dung hình ảnh đã được chỉ định. Bản thân các tệp hình ảnh được lưu trữ ở vị trí /var/www/images. Để trả về hình ảnh, ứng dụng sẽ thêm tên tệp được yêu cầu vào thư mục cơ sở này và sử dụng APT hệ thống để đọc nội dung của tệp. Ví dụ, trong trường hợp trên, đường dẫn của file ảnh 218.png như sau:
/var/www/images/218.png
Giả sử ứng dụng không triển khai biện pháp bảo vệ chống lại các cuộc tấn công duyệt thư mục nào, vì vậy attacker có thể yêu cầu URL sau để truy xuất một tệp tùy ý từ hệ thống máy chủ:
Điều này, dẫn đến đường dẫn sau:
/var/www/images/../../../etc/passwd
Do đó, thư mục thực sự được đọc là /etc/passwd
Đó là trên Unix, còn trên Windows thì ../ và ..\ đều hợp lệ và một cuộc tấn công tương tự sẽ là:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
Thực hiện lab : (Level Apprentice)
Tên lab : File path traversal, simple case
Nội dung lab: Trang web này chữa lỗ hổng file path traversal ở màn hình hiển thị ảnh sản phẩm. Để hoàn thành lab, sẽ truy xuất nội dung tệp /etc/passwd
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request
Sửa đổi giá trị của tham số filename thành ../../../etc/passwd
Có rất nhiều ứng dụng thực hiện một số bảo vệ chống lại các cuộc tấn công file path traversal và chúng thường có thể bypass.
Nếu một ứng dụng loại bỏ hoặc chặn các trình tự duyệt thư mục khỏi tên tệp do người dùng cung câp thì có thể vượt qua lớp bảo vệ bằng nhiều kĩ thuật khác nhau.
Bạn có thể sử dụng một đường dẫn tuyệt đối từ thư mục gốc của hệ thống tệp, ví dụ như filename=/etc/passwd, để tham chiếu trực tiếp mà không cần sử dụng bất kì trình tự truyền tải nào.
Thực hành lab: (Level Practitioner)
Tên lab: File path traversal, traversal sequences blocked with absolute path bypass
Nội dung lab: Trang web này chứa lỗ hổng file path traversal trong màn hình hiển thị ảnh sản phẩm. Ứng dụng đã chặn các trình tự truyền tải nhưng coi tên tệp được cung cấp là có liên quan đến một thư mục mặc định. Để giải quyết phòng thí nghiệm, hãy truy xuất nội dung của tệp /etc/passwd
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request
Sửa đổi giá trị của filename thành /etc/passwd
Thực hành lab: (Level Practitioner)
Tên lab: File path traversal, traversal sequences stripped non-recursively
Nội dung lab: Trang web này chứa lỗ hổng file path traversal trong màn hình hiển thị ảnh sản phẩm. Ứng dụng loại bỏ trình tự path traversal khỏi tên tệp người dùng cung cấp trước khi sử dụng. Để giải quyết lab, hãy truy xuất nội dung tệp /etc/passwd
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request
Sửa đổi giá trị tham số filename thành : ....//....//....//etc/passwd
Trong một số trường hợp, máy chủ web có thể loại bỏ bất kì trình tự duyệt thư mục nào trước khi chuyển thông tin đầu vào của người dùng tới ứng dụng. Đôi khi, có thể bypass điều này bằng mã hóa URL các kí tự ../ dẫn đến %2e%2e%2f hoặc %252%252%252f....
Thực hiện lab: (Level Practitioner)
Tên lab: File path traversal, traversal sequences stripped with superfluous URL-decode
Nội dung lab: Trang web này chứa lỗ hổng file path traversal trong màn hình hiển thị ảnh sản phẩm. Ứng dụng chặn đầu vào chứa trình tự file traversal. Sau đó thực hiện decode URL của đầu vào trước khi đưa vào sử dụng. Để hoàn thành lab, hãy truy xuất nội dung tệp /etc/passwd
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request
Gửi request đó tới Intruder. Add nơi cần fuzzing.
Trong Intruder, sử dụng payload Fuzzing file traversal
Nhấn attack để bắt đầu.
Tìm được 1 kết quả trả về có độ dài khác biệt. Gửi request đó đến repeater và thay đổi giá trị tham số cần thiết để hoàn thành lab.
Hoặc có thể làm thủ công bằng cách chèn payload : ..%252f..%252f..%252fetc/passwd
Nếu một ứng dụng yêu cầu tên tệp do người dùng cung cấp phải bắt đầu bằng thư mục cơ sở dự kiến, chẳng hạn như /var/www/images, thì có thể bao gồm thư mục cơ sở được yêu cầu. Ví dụ:
filenam=/var/www/images/../../../etc/passwd
Thực hành lab: (Level Practitioner)
Tên lab: File path traversal, validation of starth path
Nội dung lab: Trang web này chứa lỗ hổng file path traversal trong màn hình hiển thị ảnh sản phẩm. Ứng dụng truyền đường dẫn tệp đầy đủ thông qua tham số yêu cầu và xác thực rằng đường dẫn được cung cấp bắt đầu với thư mục dự kiến. Để giải quyết lab này, truy xuất nội dung của tệp /etc/passwd
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request
Thay đổi giá trị tham số filename thành /var/www/images/../../../etc/passwd
Nếu ứng dụng yêu cầu tên tệp do người dùng cung cấp phải kết thúc bằng phần mở rộng của tệp dự kiến, chẳng hạn như .png thì có thể sử dụng byte rỗng để chấm dứt hiệu quả đường dẫn tệp trước phần mở rộng được yêu cầu. Ví dụ:
filename = ../../../ect/passwd%00.png
Thực hành lab: (Level Practitioner)
Tên lab: File path traversal, validation of file extention with null byte bypass
Nội dung lab: Trang web này chứa lỗ hổng file path traversal trong màn hình hiển thị ảnh sản phẩm. Ứng dụng xác thực rằng tên tệp được cung cấp kết thúc bằng phần mở rộng tệp dự kiến. Hãy truy xuất thông tin tệp /etc/passwd để hoàn thành lab.
Thực hiện lab:
Sử dụng Burp suite để chặn và sửa đổi request.
Sửa đổi giá trị tham số filename thành ../../../etc/passwd%00.jpg
Cách hiệu quả nhất là tránh chuyển hoàn toàn thông tin đầu vào do người dùng cung cấp tới các API hệ thống tệp.
Nếu việc chuyển thông tin đầu vào do người dùng cung cấp tới API là điều không thể tránh khỏi thì hai lớp bảo vệ nên được sử dụng cùng nhau để ngăn chặn các cuộc tấn công.
Ứng dụng phải xác thực đầu vào của người dùng trước khi xử lí. Tốt nhất là việc xác thực phải so sánh với danh sách trằng các giá trị được phép. Nếu điều đó là không thể đối với chức năng được yêu cầu, thì quá trình xác thực sẽ xác minh rằng đầu vào chỉ chứa nội dung được phép, chẳng hạn như các ký tự chữ và số thuần túy.
Sau khi xác thực đầu vào được cung cấp, ứng dụng sẽ nối đầu vào thư mục cơ sở và sử dụng API hệ thống tệp nền tảng để chuẩn hóa đường dẫn. Nó sẽ xác minh rằng đường dẫn được chuẩn hóa bắt đầu với thư mục cơ sở dự kiến.