# Lỗ hổng phía máy chủ: Phần 1: Path traversal ## 1. Path traversal là gì Path traversal (directory traversal) là các lỗ hổng cho phép kẻ tấn công đọc các tệp tùy ý trên máy chủ đang chạy ứng dụng. Các tệp này bao gồm: - Code ứng dụng và dữ liệu - Thông tin xác thực hệ thống back-end - Các tập tin hệ điều hành nhạy cảm Trong một số trường hợp, ker tấn công có thể ghi vào các tệp tùy ý trên máy chủ, sửa đổi dữ liệu hoặc hành vi của ứng dụng, cuối cùng là chiếm toàn quyền kiểm soát máy chủ. ## 2. Đọc các tập tin tùy ý thông qua path traversal Giả sử một ứng dụng mua sắm hiển thị hình ảnh các mặt hàng đang được bán. Điều này có thể tải hình ảnh bằng cách sử dụng HTML: ``` <img src="/loadImage?filename=218.png"> ``` URL `loadImage` lấy một tham số `filename` và trả về nội dung của tệp đã chỉ định. Các tệp hình ảnh được lưu trữ ở vị trí `/var/www/images/`. Để trả về một 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 filesystem API để đọc nội dung của tệp. Ứng dụng đọc từ đường dẫn tệp sau: ``` /var/www/images/218.png ``` Ứng dụng này không triển khai bất kỳ biện pháp phòng thủ nào chống lại các cuộc tấn công vượt đường dẫn. Do đó, kẻ tấn công có thể yêu cầu URL sau để lấy tệp `/etc/paswd` từ hệ thống tệp của máy chủ: ``` https://insecure-website.com/loadImage?filename=../../../etc/passwd ``` Điều này khiến ứng dụng đọc từ đường dẫn tệp sau: ``` /var/www/images/../../../etc/passwd ``` Trình tự `../` hợp lệ trong một đường dẫn tệp và có nghĩa là tăng một cấp trong cấu trúc thư mục. Ba chuỗi `../` liên tiếp tăng dần từ `/var/www/images/` đến hệ thống file root. Do đó, tệp thực sự được đọc là: ``` /etc/passwd ``` Trên hệ điều hành Unix, đây là tệp chuẩn chứa thông tin chi tiết về người dùng đã đăng kí trên máy chủ. Kẻ tấn công có thể truy xuất các tệp tùy ý khác bằng kỹ thuật này. Trên Windows, cả 2 chuỗi `../` và `..\` đều là chuỗi duyệt thư mục hợp lệ. Ví dụ về một cuộc tấn công tương đương vào máy chủ chạy Windows: ``` https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini ``` ## Lab: File path traversal, trường hợp đơn giản Bài Lab này chứa lỗ hổng path traversal trong việc hiển thị hình ảnh sản phẩm. Để giải bài Lab, hãy truy xuất nội dung của tệp `/etc/passwd`. https://0a8700e103dd3097832b75fa001c0040.web-security-academy.net/ Mình sẽ sử dụng Burp Suite để giải quyết bài Lab này. Bước 1: Mở Burp Suite -> Proxy -> Open browser. ![Screenshot 2024-11-07 155037](https://hackmd.io/_uploads/S1g_kbcZ1g.png) Mình mở được một trình duyệt như này: ![Screenshot 2024-11-07 155121](https://hackmd.io/_uploads/r1c61bqbkg.png) Dán link bài Lab vào trình duyệt. Bước 2: Bật Intercept sau đó reload trình duyệt, mình thu được Request ![Screenshot 2024-11-07 155438](https://hackmd.io/_uploads/Bk3qxW9bJe.png) Chuột phải vào Request -> Send to Repeater ![Screenshot 2024-11-07 155626](https://hackmd.io/_uploads/HyCg-bqZyl.png) Bước 3: Vào Repeater -> Send, mình sẽ được Respond như này: ![Screenshot 2024-11-07 155814](https://hackmd.io/_uploads/Skxv-Zqbyg.png) Bước 4: Đề bài viết rằng: Bài Lab này chứa lỗ hổng path traversal trong việc hiển thị hình ảnh sản phẩm. Nên mình sẽ tìm đường dẫn đến một hình ảnh bất kì trong Respond. ![Screenshot 2024-11-07 160400](https://hackmd.io/_uploads/rJShGZc-kg.png) Thay đổi đường dẫn để truy cập hình ảnh đó ![Screenshot 2024-11-07 160535](https://hackmd.io/_uploads/rJweQZqZ1x.png) Truy cập thành công ![Screenshot 2024-11-07 160616](https://hackmd.io/_uploads/S1WEmbc-kx.png) Bước 5: Để truy cập vào `/etc/passwd`, mình cần tìm đến hệ thống file root bằng cách tăng cấp thư mục. Tăng lên 1 cấp thư mục: ![Screenshot 2024-11-07 161134](https://hackmd.io/_uploads/B1iL4b5Zyx.png) Không thành công. Tăng lên 2 cấp thư mục: ![Screenshot 2024-11-07 161232](https://hackmd.io/_uploads/H14TVWc-1e.png) Vẫn không thành công. Tăng lên 3 cấp thư mục: ![Screenshot 2024-11-07 161306](https://hackmd.io/_uploads/B1dlBWq-yx.png) Thành công. ![Screenshot 2024-11-07 161456](https://hackmd.io/_uploads/HJSQB-5b1g.png)