File Upload là chức năng gần như không thể thiếu trong các ứng dụng web:
upload avatar, tài liệu, ảnh, CV, báo cáo…
Tuy nhiên, nếu kiểm soát không chặt chẽ, File Upload có thể trở thành lỗ hổng nghiêm trọng, cho phép attacker:
- Upload webshell
- Thực thi mã từ xa (RCE)
- Chiếm quyền server
- Phát tán malware
🔍 File Upload Vulnerability là gì?
Là lỗ hổng xảy ra khi ứng dụng không kiểm tra hoặc kiểm tra không đầy đủ file do người dùng tải lên.
➡️ Attacker có thể upload:
- File chứa mã độc
- File giả mạo định dạng
- File có thể thực thi trên server
⚠️ Hậu quả thực tế
- RCE (Remote Code Execution)
- Deface website
- Lấy database
- Leo thang đặc quyền
- Pivot sang hệ thống nội bộ
🧠 Kỹ thuật tấn công File Upload phổ biến
1️⃣ Upload webshell trực tiếp
- PHP, ASP, JSP…
- Server cho phép thực thi file upload
2️⃣ Bypass kiểm tra đuôi file
- Đổi tên file: shell.php.jpg shell.phtml shell.phar
- Lợi dụng regex yếu
3️⃣ Fake MIME-Type
- Header:
4️⃣ Upload file có payload nhúng
- Ảnh chứa PHP code
- Document chứa macro độc hại
5️⃣ Path Traversal khi upload
- Ghi đè file hệ thống: ../../../../var/www/html/shell.php
6️⃣ Upload file lớn để DoS
- Không giới hạn dung lượng upload
- Gây đầy ổ đĩa
🛡 Cách phòng chống File Upload Vulnerability
✅ 1. Whitelist định dạng file
- Chỉ cho phép các định dạng cần thiết
- Không dùng blacklist
📌 Ví dụ: .jpg .png .pdf
✅ 2. Kiểm tra nội dung file (Magic Bytes)
- Không chỉ dựa vào đuôi file
- Xác minh chữ ký file thật sự
✅ 3. Đổi tên file khi lưu
- Không dùng tên gốc do user cung cấp
- Dùng UUID hoặc hash
✅ 4. Lưu file ngoài web root
- Không cho truy cập trực tiếp qua URL
- Dùng server trung gian để đọc file
✅ 5. Vô hiệu hóa quyền thực thi
- Thư mục upload: chmod 644
- Không cho execute
✅ 6. Giới hạn kích thước & số lượng file
- Ngăn DoS
- Kiểm soát tài nguyên
✅ 7. Quét malware
- Antivirus
- YARA rule
- Sandbox
✅ 8. Logging & Monitoring
- Ghi log upload
- Phát hiện hành vi bất thường
🔐 File Upload trong góc nhìn Pentester
Pentester thường kiểm tra:
- Server có cho thực thi file upload không
- Có bypass MIME/type không
- Có path traversal không
- Có upload được file đa định dạng không
🎯 Kết luận
File Upload không nguy hiểm — cấu hình sai mới nguy hiểm.
Một chức năng upload an toàn cần:
- Kiểm soát đầu vào
- Kiểm soát quyền
- Kiểm soát vị trí lưu trữ
“Một webshell nhỏ có thể đánh sập cả hệ thống.”
