-
Lỗ hổng File Upload xảy ra khi máy chỉ web cho phép người dùng upload file lên hệ thống mà không xác thực đầy đủ những thứ như tên, loại, nội dung hoặc kích thước của chúng. Khi không có những hạn chế đối với file thì attacker có thể lợi dụng điều đó để thực thi các kịch bản tấn công, thậm chí là thực thi mã từ xa.
-
Web shell là một tập lệnh độc hại cho phép attacker thực hiện các lệnh tùy ý trên máy chủ web từ xa chỉ bằng cách gửi các yêu cấp HTTP đến đúng điểm cuối. Nếu có thể upload web shell thành công, bạn có toàn quyền kiểm soát máy chủ.
Lỗ hổng chạy Script file upload xảy ra khi thỏa mãn những điều kiện sau:
-
File upload được lưu vào public directory
-
Có thể upload các file script
Đối với uploader, khi tạo ra một ứng dụng phù hợp hai điều kiện trên thì sẽ trở thành nguyên nhân sinh ra lỗ hổng. Vì thế, việc không thỏa mãn ít nhất một trong hai điều kiện nêu trên trở thành đối sách giải quyết của lỗ hổng này.
Ảnh hưởng của lỗ hổng file upload phụ thuộc vào hai yếu tố chính:
-
phần của file mà trang web không thể xác định được đúng cách
-
Những hạn chế được áp dụng lên file sau khi đã upload thành công
Trường hợp kích thước của tệp nằm ngoài ngưỡng dự kiến có thể kích hoạt tấn công DoS, attacker có thể tấn công lấp đầy không gian đĩa có sẵn.
Trường file được upload không được xác thực đúng cách có thể cho phép attacker ghi đè các tệp quan trọng bằng cách tải lên tệp có cùng tên. Nếu máy chủ cũng dễ bị truy cập thư mục thì attacker có thể upload file vào những vị trí không xác định được.
Trường hợp tệ nhất, loại file không được xác định đúng cách và cấu hình máy chủ cho phép file được thực thi dưới dạng mã (như .php hay .jsp). Trong trường hợp này, attacker có thể upload file có chức năng như một web shell và có thể cho attacker có toàn quyền kiểm soát máy chủ.
Tóm lại, lỗ hổng file upload xảy ra có thể:
-
Làm lộ các thông tin nội bộ, chẳng hạn như đường dẫn của máy chủ
-
Là tiền đề dẫn đến các lỗ hổng khác
-
Khiến attacker chiếm quyền điều khiển hệ thống
Có thể tải lên bất kỳ file nào.
Chúng ta có thể up lên 1 file shell bất kỳ và khai thác trực tiếp. Có một lưu ý đặc biệt đó là file thực thi phải phù hợp với Web server đang sử dụng.Bạn có thể up 1 file .jsp với Apache nhưng nó sẽ không thực thi được.
Đoạn code sử dụng sẽ trông như thế này:
Để bypass qua filter này, hãy dùng burp suite sửa content type thành image/... Rồi sau đó forward là đuôc
Blacklist là danh sách những file bị cấm tải lên. Giả sử đoạn code đó sẽ trông như sau:
Bypass qua filter này có thể Upload file có đuôi .php3, .php4, .php5, .pHp, ...
Ngược lại với Blacklist thì Whitelist sẽ là danh sách những file được cho phép tải lên.Theo mình thấy thì đây là filter bypass khoai nhất.
Việc xác định định dạng file ngoài việc dựa vào extension, người ta còn dựa vào signature file. Việc xác định signature file sẽ dựa vào 8 bits đầu của file. Code của nó sẽ trông như thế này.




