This page looks best with JavaScript enabled

File Upload Vulnerability

 ·  ☕ 7 min read  ·  🤖 ch1nhpd

Decription

Các tệp đã được tải lên có thể gây rủi ro đáng kể cho các ứng dụng. Bước đầu tiên trong nhiều cuộc tấn công là đưa được đoạn code của mình lên hệ thống của nạn nhân. Sau đó tìm cách để có thể thực thi đoạn code đó. Và upload file là một cách có thể giúp ta đẩy được đoạn code đó tới server của nạn nhân.

Việc không hạn chế file upload mang đến nhiều hậu quả khác nhau như: giúp attacker có thể tiếp quản toàn bộ hệ thống, làm quá tải hệ thống hoặc database, chuyển tiếp cuộc tấn công đến back-end, dẫn đến các cuộc tấn công ở phía người dùng (client-side attacks). Nó phụ thuộc vào việc ứng dụng cho phép upload file là gì, và đặc biệt là được lưu trữ ở đâu.

Có hai vấn đề ta cần quan tâm đến ở đây:
- Thứ nhất là file metadata như path, tên file. Chúng thường được cung cấp bởi phương tiện truyền tải như HTTP multi-part encoding. Dữ liệu này có thể đánh lừa ứng dụng để ghi đè lên một tệp quan trọng hoặc lưu trữ tệp ở một vị trí cấm. Vì vậy cần phải xem xét thật cẩn thận metadata trước khi sử dụng nó.
- Thứ hai là dung lượng file và nội dung của nó. Mức độ ảnh hưởng của nó sẽ tùy thuộc theo mục đích sử dụng của file đó. Hãy xem các ví dụ bên dưới để biết về các kịch bản dẫn đến việc sử dụng sai mục đích của file. Để chống lại các cuộc tấn công này, ta nên phân tích mọi thứ mà ứng dụng của mình làm với file đó và xem xét, suy nghĩ cẩn thận về những gì liên quan đến quá trình xử lý file.

Các yếu tố rủi ro (Risk Factors)

  1. Những tác động của lỗ hỏng này là rất lớn, những đoạn code có thể thực thi ở phía server hoặc phía client. Khả năng attacker phát hiện ra lỗ hỏng cũng rất lớn.

  2. Điều quan trọng là phải kiểm tra các module kiểm soát việc upload file để xác định các rủi ro một cách chính xác.

  3. Server-side attacks: Web server có thể bị tổn hại bởi việc upload và excute một web-shell, cái mà có thể run commands, truy cập đến files hệ thống, những tài nguyên cục bộ, tấn công đến một server khác hoặc khai thác một lỗ hỏng cục bộ….

  4. Client-side attacks: gây ra các cuộc tấn công như XSS, Cross-site Content Hijacking.

  5. Ngoài ra còn có thể lợi dụng để khai thác các phần dễ bị tấn công khác của ứng dụng khi mà ứng dụng đó yêu cầu một file đến từ cùng một server hoặc một server đáng tin cậy khác.

  6. Có thể kích hoạt các lỗ hỏng trong các thư viện/app bị hỏng ở phía client hoặc server.

VD: iPhone MobileSafari LibTIFF Buffer Overflow (phía Client) hoặc ImageTragick (phía server)

  1. Có thể kích hoạt các lỗ hỏng trong real-time monitoring tools (VD: Symantec antivirus exploit by unpacking a RAR file)

  2. Các tệp nguy hiểm như là Unix shell script, windows virus, Excel file với các công thức nguy hiểm hoặc reverse shell có thể được tải lên server để thực thi code bởi administrator hoặc webmaster sau này - trên máy của nạn nhân. (??)

  3. Attacker có thể tạo ra một phishing page trên website hoặc làm hỏng website đó.

  4. Server lưu trữ tệp có thể bị lạm dụng để lưu trữ các tệp khác như malwares, phần mềm không hợp lệ, hoặc nội dung không phù hợp khác.

  5. Người tải tệp lên có thể tiết lộ những thông tin nội bộ như server internal paths trong thông báo lỗi của họ.

Examples

Attacks on application platform

  • Upload .jsp file lên web tree: jsp code có thể thực thi dưới quyền web user.
  • Upload .gif file để được thay đổi kích thước: lỗ hỏng thư viện hình ảnh đã được khai thác.
  • Upload các tệp lớn (huge file): dos attacks
  • Upload file sử dụng tên hoặc đường dẫn độc hại: ghi đè lên một file quan trọng (critical file)
  • Upload file chứa dữ liệu cá nhân: những người dùng khác có thể truy cập.
  • Upload file chứa “tags”: tags được thực thi như một phần được đưa vào trong một trong web.
  • Upload .rar file để được scan bởi antivirus: commands được thực thi trên máy chủ đang chạy phần mềm antivirus.

Attacks on other systems

  • Upload .exe file vào web tree: victims vô tình download tệp trojan có thể thực thi.
  • Upload file bị nhiễm virus: lây sang máy victim
  • Upload .html file có chứa script: cuộc tấn công XSS
  • Upload .jpg file chứa đối tượng Flash: cuộc tấn công Cross-site Content Hijacking.
  • Upload .rar file để được scan bởi antivirus: commands được thực thi trên máy client đang chạy phần mềm antivirus.

Bypass một số phương pháp bảo vệ yếu

Từ chối file Extensions

Có thể bypass bằng cách:

  • Tìm các extension bị bỏ quên mà có thể thực thi ở phía server hoặc gây nguy hiểm ở phía client như:.php, .pht, .phtml, .shtml, .asa, .cer, .asax, .swf, .xap
  • Tìm sai sót trong việc cấu hình server, khi nó phân tích cú pháp các tệp có phần mở rộng kép (double extension) hoặc thực thi chúng bằng cách cung cấp phần mở rộng nhạy cảm sau dấu phân cách như “/” hoặc “;”

VD: “/file.jpg/index.php” . Khi “file.jpg” file chứa PHP code và đã được upload.
- Với Apache, php file có thể được thực thi bằng cách sử dụng kĩ thuật double extension như “file.php.jpg” (giả sử .jpg được chấp nhận)
- Với IIS6 (hoặc các bản cũ hơn), script file có thể đucợ thực thi bằng một trong hai cách sau:
- Thêm “;” vào sau extension bị cấm và trước extension được phép (VD: file.asp;.jpg)
- Đổi tên script file’s extension (VD: .asp) thành extension được phép (VD: .txt) đồng thời cái folder chứa nó cũng phải đổi thành đuôi bị cấm (VD: folder.asp).

  • Sửa một số kí tự trong extension thành viết hoa (VD: .pHp, .ASp)
  • Thay thế một tệp hiện có thành tên thay thế(shortname) của nó (VD: web.config -> web~1.con ; .htaccess -> HTACCE~1 ) (Đây là một tính năng của Win 8.3)
  • Tìm các kí tự được chuyển đổi thành kí tự hữu ích khác trong quá trình upload file. VD: khi chạy PHP trong IIS, “<”, “>” và dấu nháy kép chuyển đổi tương ứng với “?”, “*”, “.” (VD: web"config tức là web.config)
  • Tìm các kí tự trung tính đằng sau tên tệp như dấu cách, dấu chấm hoặc các kí tự gạch chéo. Các kí tự này sẽ bị xóa một cách tự động. (VD: “file.asp . .. . .. …”, “file.asp “, “file.asp."). Mặc dù các kí tự như “/” hay “" thường bị cho là có vấn đề (tức là victim block kí tự này rồi) nhưng cứ phải thử biết đâu ấm ớ lại vớ huy chương (VD: “file.asp./")
  • Tìm các sai sót trong kỹ thuật phát hiện extension. Web server có thể chỉ kiểm tra cái đầu tiên sau dấu “.” nhưng mình có thể có “file.txt.jpg.php”
  • Sử dụng kí tự điều khiển như NULL(0x00) sau extension bị cấm và trước extension được phép để bypass. Khi lưu file, tất cả các kí tự sau NULL sẽ được bỏ đi. Cả URL-encode lẫn decode của kí tự NULL ddeeuf phải được thử trong một file upload request để kiểm tra thật kỹ lưỡng.
  • Dùng NTFS
    UPDATING….

Reference

Share on

Phạm Đăng Chính
WRITTEN BY
ch1nhpd
Developer, Pentester