Path Traversal (dò đường dẫn thư mục) là một dạng lỗ hổng phổ biến khi ứng dụng web cho phép người dùng truyền vào một đường dẫn tương đối để truy cập tệp, nhưng không kiểm tra kỹ khiến kẻ tấn công có thể dùng chuỗi .. để thoát ra khỏi thư mục gốc được phép truy cập (ví dụ đọc được /etc/passwd).
Cho một đường dẫn tương đối P gồm các thành phần cách nhau bởi dấu /. Hãy chuẩn hóa đường dẫn theo quy tắc:
// liên tiếp) hoặc . (thư mục hiện tại) bị bỏ qua;.. nghĩa là đi lên một cấp thư mục: nếu đường dẫn hiện tại (sau chuẩn hóa) đang còn ít nhất một thư mục thì bỏ thư mục cuối cùng đó ra; nếu đường dẫn hiện tại đã rỗng (đang ở thư mục gốc) mà vẫn gặp .. thì đây chính là hành vi thoát khỏi thư mục gốc — phát hiện lỗ hổng;Ví dụ: a/b/../../../etc/passwd → xử lý a, b, .. (bỏ b), .. (bỏ a, về gốc), .. (gốc rỗng mà vẫn gặp ..) → VULNERABLE.
Một dòng duy nhất chứa đường dẫn tương đối P (có thể rỗng), gồm các thành phần chữ và số cách nhau bởi dấu /, độ dài tối đa 300 ký tự, không có dấu / ở đầu.
Nếu quá trình chuẩn hóa phát hiện thoát khỏi thư mục gốc, in ra VULNERABLE.
Ngược lại, in ra đường dẫn đã chuẩn hóa (các thành phần nối bằng /); nếu kết quả rỗng (đường dẫn trỏ về đúng thư mục gốc), in ra dấu chấm ..
Ví dụ: input a/b/c/../../d → output a/d.
Ví dụ:
Đầu vào:
a/b/c/../../d
Đầu ra:
a/d
Đầu vào:
a/b/../../../etc/passwd
Đầu ra:
VULNERABLE
Đang tải editor...